summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTim Blechmann <[email protected]>2025-10-07 14:01:30 +0800
committerTim Blechmann <[email protected]>2025-10-21 13:24:43 +0000
commit2ead0aa20d0d36ab4bcd80c155e022b7381d98bd (patch)
tree3ccfc5f64ab2bd12ca18b54ab0539827cbfe75fc /src
parent2d49156af55f3e0e4f2aefd428a0fef7bac119e5 (diff)
Widgets: QMenu - do not start sloppy menu timer from QMenu API
When QMenu::setCurrentAction starts a timer for closing the menu again. This causes unexpected behaviour when calling QMenu::setCurrentAction, as it may unset the current action when this timer fires. Fixes: QTBUG-138956 Change-Id: Ia4d80455a04453d2e6b173a9d7e7c5df39e696ce Reviewed-by: Richard Moe Gustavsen <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/widgets/widgets/qmenu.cpp5
-rw-r--r--src/widgets/widgets/qmenu_p.h3
2 files changed, 5 insertions, 3 deletions
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index 3177ed5c2d4..69548c4e17e 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -771,7 +771,8 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason
#endif
hideMenu(hideActiveMenu);
} else if (!currentAction || !currentAction->menu()) {
- sloppyState.startTimerIfNotRunning();
+ if (reason != SelectionReason::SelectedFromAPI)
+ sloppyState.startTimerIfNotRunning();
}
}
}
@@ -2172,7 +2173,7 @@ void QMenu::hideTearOffMenu()
void QMenu::setActiveAction(QAction *act)
{
Q_D(QMenu);
- d->setCurrentAction(act, 0);
+ d->setCurrentAction(act, 0, QMenuPrivate::SelectionReason::SelectedFromAPI);
if (d->scroll && act)
d->scrollMenu(act, QMenuPrivate::QMenuScroller::ScrollCenter);
}
diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h
index dd1f058a288..d9dcd7d0362 100644
--- a/src/widgets/widgets/qmenu_p.h
+++ b/src/widgets/widgets/qmenu_p.h
@@ -362,7 +362,8 @@ public:
} delayState;
enum SelectionReason {
SelectedFromKeyboard,
- SelectedFromElsewhere
+ SelectedFromAPI,
+ SelectedFromElsewhere,
};
enum class SelectionDirection {
Up,