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 <fitojb@ubuntu.com>
diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx
index 95ab21c..9be4712 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 7ebb95f..5bddd44 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 c5382ef..e9f963d 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 bf1b759..ffe76e6 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: