sc/source/ui/cctrl/checklistmenu.cxx | 4 +++- sc/source/ui/inc/checklistmenu.hxx | 3 ++- sc/source/ui/view/gridwin.cxx | 8 ++++++-- sc/source/ui/view/gridwin2.cxx | 6 ++++-- 4 files changed, 15 insertions(+), 6 deletions(-)
New commits: commit 27b11edf8050fa6edf0c42a28a5e438038a5f8ff Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Fri Nov 12 15:39:49 2021 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Thu Nov 18 12:15:15 2021 +0100 Resolves: tdf#145645 pivot table popups don't dismiss when item activated Change-Id: I5a68a08600b7792d924ec77694a60651df5d9c83 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124983 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> (cherry picked from commit ecb15ba80cd85e40da5d2d48a394d4cbc9a43bba) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125136 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-by: Eike Rathke <er...@redhat.com> Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx index 123c76fdc293..7e4f1b9fbfdc 100644 --- a/sc/source/ui/cctrl/checklistmenu.cxx +++ b/sc/source/ui/cctrl/checklistmenu.cxx @@ -197,7 +197,9 @@ void ScCheckListMenuControl::executeMenuItem(size_t nPos) // no action is defined. return; - maMenuItems[nPos].mxAction->execute(); + const bool bClosePopup = maMenuItems[nPos].mxAction->execute(); + if (bClosePopup) + terminateAllPopupMenus(); } void ScCheckListMenuControl::setSelectedMenuItem(size_t nPos, bool bSubMenuTimer) diff --git a/sc/source/ui/inc/checklistmenu.hxx b/sc/source/ui/inc/checklistmenu.hxx index b0ddc9188bd2..427f29c3f7d3 100644 --- a/sc/source/ui/inc/checklistmenu.hxx +++ b/sc/source/ui/inc/checklistmenu.hxx @@ -63,7 +63,8 @@ public: { public: virtual ~Action() {} - virtual void execute() = 0; + // return true to dismiss the popup + virtual bool execute() = 0; }; struct ResultEntry diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 242ca40b3530..05d75755aecb 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -509,9 +509,12 @@ class AutoFilterAction : public ScCheckListMenuControl::Action public: AutoFilterAction(ScGridWindow* p, ScGridWindow::AutoFilterMode eMode) : mpWindow(p), meMode(eMode) {} - virtual void execute() override + virtual bool execute() override { mpWindow->UpdateAutoFilterFromMenu(meMode); + // RefreshAutoFilterButton manually closes the popup so return + // false to not attempt a second close + return false; } }; @@ -522,9 +525,10 @@ class AutoFilterPopupEndAction : public ScCheckListMenuControl::Action public: AutoFilterPopupEndAction(ScGridWindow* p, const ScAddress& rPos) : mpWindow(p), maPos(rPos) {} - virtual void execute() override + virtual bool execute() override { mpWindow->RefreshAutoFilterButton(maPos); + return false; // this is called after the popup has been closed } }; diff --git a/sc/source/ui/view/gridwin2.cxx b/sc/source/ui/view/gridwin2.cxx index bf1b7597b185..ffe76e677349 100644 --- a/sc/source/ui/view/gridwin2.cxx +++ b/sc/source/ui/view/gridwin2.cxx @@ -383,9 +383,10 @@ public: explicit DPFieldPopupOKAction(ScGridWindow* p) : mpGridWindow(p) {} - virtual void execute() override + virtual bool execute() override { mpGridWindow->UpdateDPFromFieldPopupMenu(); + return true; } private: VclPtr<ScGridWindow> mpGridWindow; @@ -405,7 +406,7 @@ public: , mpViewShell(pViewShell) {} - virtual void execute() override + virtual bool execute() override { switch (meType) { @@ -421,6 +422,7 @@ public: default: ; } + return true; } private: