summaryrefslogtreecommitdiffstats
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)
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);