summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets/qmenu.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2012-10-30 11:26:40 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-02 15:18:57 +0100
commit0a91c9df01ec8f0c4aef9ce6e5e9bc3804fb80c2 (patch)
tree866134f30e374cd81302caa8eacfeac69a7cbb24 /src/widgets/widgets/qmenu.cpp
parenta025a2fcfa70e5db99411e2ec73c0a5141619ff5 (diff)
Fix submenu navigation.
Bring back code that was removed in Qt 4: 60324267fbb8a8554e62aaf9ef01360709292320 for QTBUG-7411 . This code reselects the submenu action of a currently opened popup when the mouse is moved to the submenu crossing other actions. In addition, make sure it only triggers when the reason is not keyboard selection. Task-number: QTBUG-20094 Change-Id: Ibb73f83e86635083aad8b1e79fc0fdd512c65754 Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'src/widgets/widgets/qmenu.cpp')
-rw-r--r--src/widgets/widgets/qmenu.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index fe7e444e86..47ffdda3b6 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -543,6 +543,16 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason
{
Q_Q(QMenu);
tearoffHighlighted = 0;
+ // Reselect the currently active action in case mouse moved over other menu items when
+ // moving from sub menu action to sub menu (QTBUG-20094).
+ if (reason != SelectedFromKeyboard && action == currentAction && !(action && action->menu() && action->menu() != activeMenu)) {
+ if (QMenu *menu = qobject_cast<QMenu*>(causedPopup.widget)) {
+ if (causedPopup.action && menu->d_func()->activeMenu == q)
+ menu->d_func()->setCurrentAction(causedPopup.action, 0, reason, false);
+ }
+ return;
+ }
+
if (currentAction)
q->update(actionRect(currentAction));