diff options
Diffstat (limited to 'sc/source/ui')
-rw-r--r-- | sc/source/ui/cctrl/checklistmenu.cxx | 17 | ||||
-rw-r--r-- | sc/source/ui/inc/checklistmenu.hxx | 2 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin.cxx | 1 |
3 files changed, 16 insertions, 4 deletions
diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx index f62b2369da27..88366b2ff0ac 100644 --- a/sc/source/ui/cctrl/checklistmenu.cxx +++ b/sc/source/ui/cctrl/checklistmenu.cxx @@ -283,6 +283,8 @@ void ScCheckListMenuControl::queueCloseSubMenu() maCloseTimer.mpSubMenu = maOpenTimer.mpSubMenu; maCloseTimer.mnMenuPos = maOpenTimer.mnMenuPos; + maOpenTimer.mpSubMenu = nullptr; + maOpenTimer.mnMenuPos = MENU_NOT_SELECTED; maCloseTimer.maTimer.Start(); } @@ -570,11 +572,8 @@ void ScCheckListMenuControl::GrabFocus() } } -ScCheckListMenuControl::~ScCheckListMenuControl() +void ScCheckListMenuControl::DropPendingEvents() { - EndPopupMode(); - for (auto& rMenuItem : maMenuItems) - rMenuItem.mxSubMenuWin.reset(); if (mnAsyncPostPopdownId) { Application::RemoveUserEvent(mnAsyncPostPopdownId); @@ -587,6 +586,14 @@ ScCheckListMenuControl::~ScCheckListMenuControl() } } +ScCheckListMenuControl::~ScCheckListMenuControl() +{ + EndPopupMode(); + for (auto& rMenuItem : maMenuItems) + rMenuItem.mxSubMenuWin.reset(); + DropPendingEvents(); +} + void ScCheckListMenuControl::prepWindow() { mxMenu->set_size_request(-1, mxMenu->get_preferred_size().Height() + 2); @@ -1427,6 +1434,8 @@ IMPL_LINK_NOARG(ScCheckListMenuControl, PopupModeEndHdl, weld::Popover&, void) if (mxPopupEndAction) mxPopupEndAction->execute(); + DropPendingEvents(); + if (comphelper::LibreOfficeKit::isActive()) NotifyCloseLOK(); } diff --git a/sc/source/ui/inc/checklistmenu.hxx b/sc/source/ui/inc/checklistmenu.hxx index 961fddceac58..8d135870d871 100644 --- a/sc/source/ui/inc/checklistmenu.hxx +++ b/sc/source/ui/inc/checklistmenu.hxx @@ -254,6 +254,8 @@ private: DECL_LINK(SetDropdownPosHdl, void*, void); + void DropPendingEvents(); + private: std::unique_ptr<weld::Builder> mxBuilder; std::unique_ptr<weld::Popover> mxPopover; diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 42b02d4b9743..2e4fcf0bc38d 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -524,6 +524,7 @@ public: virtual bool execute() override { mpWindow->RefreshAutoFilterButton(maPos); + mpWindow->GrabFocus(); return false; // this is called after the popup has been closed } }; |