summaryrefslogtreecommitdiffstats
path: root/src/gui/widgets/qmenu.cpp
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>2009-11-19 16:35:06 (GMT)
committerOswald Buddenhagen <oswald.buddenhagen@nokia.com>2009-11-19 16:35:06 (GMT)
commit901b0391d15ab72830fcfd73048eeff03fb9ed07 (patch)
treecf5f2f2eab83301bf08952426f25eb54a90e9ac4 /src/gui/widgets/qmenu.cpp
parentbb4e301ce6762ab300618c579bd65ea1ee17dc2d (diff)
parent34044853d4315309920a481a585f96ba7b3fb140 (diff)
downloadQt-901b0391d15ab72830fcfd73048eeff03fb9ed07.zip
Qt-901b0391d15ab72830fcfd73048eeff03fb9ed07.tar.gz
Qt-901b0391d15ab72830fcfd73048eeff03fb9ed07.tar.bz2
Merge remote branch 'mainline/4.6' into 4.6
Diffstat (limited to 'src/gui/widgets/qmenu.cpp')
-rw-r--r--src/gui/widgets/qmenu.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
index fc88d06..761a060 100644
--- a/src/gui/widgets/qmenu.cpp
+++ b/src/gui/widgets/qmenu.cpp
@@ -654,6 +654,24 @@ void QMenuPrivate::_q_overrideMenuActionDestroyed()
menuAction=defaultMenuAction;
}
+
+void QMenuPrivate::updateLayoutDirection()
+{
+ Q_Q(QMenu);
+ //we need to mimic the cause of the popup's layout direction
+ //to allow setting it on a mainwindow for example
+ //we call setLayoutDirection_helper to not overwrite a user-defined value
+ if (!q->testAttribute(Qt::WA_SetLayoutDirection)) {
+ if (QWidget *w = causedPopup.widget)
+ setLayoutDirection_helper(w->layoutDirection());
+ else if (QWidget *w = q->parentWidget())
+ setLayoutDirection_helper(w->layoutDirection());
+ else
+ setLayoutDirection_helper(QApplication::layoutDirection());
+ }
+}
+
+
/*!
Returns the action associated with this menu.
*/
@@ -1797,6 +1815,7 @@ void QMenu::popup(const QPoint &p, QAction *atAction)
d->tearoffHighlighted = 0;
d->motions = 0;
d->doChildEffects = true;
+ d->updateLayoutDirection();
#ifndef QT_NO_MENUBAR
// if this menu is part of a chain attached to a QMenuBar, set the
@@ -2347,6 +2366,9 @@ QMenu::event(QEvent *e)
{
Q_D(QMenu);
switch (e->type()) {
+ case QEvent::Polish:
+ d->updateLayoutDirection();
+ break;
case QEvent::ShortcutOverride: {
QKeyEvent *kev = static_cast<QKeyEvent*>(e);
if (kev->key() == Qt::Key_Up || kev->key() == Qt::Key_Down