summaryrefslogtreecommitdiff
path: root/src/widgets/widgets/qabstractbutton.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgads@gmail.com>2010-12-09 22:20:58 +0200
committerQt by Nokia <qt-info@nokia.com>2012-03-27 17:12:47 +0200
commita4d0c56a59f2c1b8cb94bfafb2ffb9273c6fc12c (patch)
tree40a3b43ef0f89534d25336b86b263ec100eb3929 /src/widgets/widgets/qabstractbutton.cpp
parent4f1820e3a77b3fdda32a1b935502b187e73059cf (diff)
downloadqtbase-a4d0c56a59f2c1b8cb94bfafb2ffb9273c6fc12c.tar.gz
Fix keyboard navigation order for buttons with RTL layout
On RTL layout, right key should move to previous button, and left key should move to next button. Task-number: QTBUG-15790 Change-Id: If0753f9082b3a3624b95276840f5f3799b5e14bf Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Diffstat (limited to 'src/widgets/widgets/qabstractbutton.cpp')
-rw-r--r--src/widgets/widgets/qabstractbutton.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/widgets/widgets/qabstractbutton.cpp b/src/widgets/widgets/qabstractbutton.cpp
index 8c0bcc098f..5f75bd3913 100644
--- a/src/widgets/widgets/qabstractbutton.cpp
+++ b/src/widgets/widgets/qabstractbutton.cpp
@@ -1178,11 +1178,11 @@ void QAbstractButton::keyPressEvent(QKeyEvent *e)
}
break;
case Qt::Key_Up:
- case Qt::Key_Left:
next = false;
// fall through
+ case Qt::Key_Left:
case Qt::Key_Right:
- case Qt::Key_Down:
+ case Qt::Key_Down: {
#ifdef QT_KEYPAD_NAVIGATION
if ((QApplication::keypadNavigationEnabled()
&& (e->key() == Qt::Key_Left || e->key() == Qt::Key_Right))
@@ -1192,13 +1192,13 @@ void QAbstractButton::keyPressEvent(QKeyEvent *e)
return;
}
#endif
- QWidget *pw;
+ QWidget *pw = parentWidget();
if (d->autoExclusive
#ifndef QT_NO_BUTTONGROUP
|| d->group
#endif
#ifndef QT_NO_ITEMVIEWS
- || ((pw = parentWidget()) && qobject_cast<QAbstractItemView *>(pw->parentWidget()))
+ || (pw && qobject_cast<QAbstractItemView *>(pw->parentWidget()))
#endif
) {
// ### Using qobject_cast to check if the parent is a viewport of
@@ -1209,9 +1209,17 @@ void QAbstractButton::keyPressEvent(QKeyEvent *e)
if (hasFocus()) // nothing happend, propagate
e->ignore();
} else {
+ // Prefer parent widget, use this if parent is absent
+ QWidget *w = pw ? pw : this;
+ bool reverse = (w->layoutDirection() == Qt::RightToLeft);
+ if ((e->key() == Qt::Key_Left && !reverse)
+ || (e->key() == Qt::Key_Right && reverse)) {
+ next = false;
+ }
focusNextPrevChild(next);
}
break;
+ }
case Qt::Key_Escape:
if (d->down) {
setDown(false);