diff options
| author | Tim Blechmann <[email protected]> | 2025-10-07 14:01:30 +0800 |
|---|---|---|
| committer | Tim Blechmann <[email protected]> | 2025-10-21 13:24:43 +0000 |
| commit | 2ead0aa20d0d36ab4bcd80c155e022b7381d98bd (patch) | |
| tree | 3ccfc5f64ab2bd12ca18b54ab0539827cbfe75fc /src | |
| parent | 2d49156af55f3e0e4f2aefd428a0fef7bac119e5 (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.cpp | 5 | ||||
| -rw-r--r-- | src/widgets/widgets/qmenu_p.h | 3 |
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, |
