Resolves: tdf#145645 pivot table popups don't dismiss when item activated

Change-Id: I5a68a08600b7792d924ec77694a60651df5d9c83
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125112
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx
index e96f06c..5fcfa27 100644
--- a/sc/source/ui/cctrl/checklistmenu.cxx
+++ b/sc/source/ui/cctrl/checklistmenu.cxx
@@ -202,7 +202,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 465a259..302f2bd 100644
--- a/sc/source/ui/inc/checklistmenu.hxx
+++ b/sc/source/ui/inc/checklistmenu.hxx
@@ -62,7 +62,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 5d5e2a3..d850ac04 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -499,9 +499,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;
    }
};

@@ -512,9 +515,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 0baef4a..db6c8c6 100644
--- a/sc/source/ui/view/gridwin2.cxx
+++ b/sc/source/ui/view/gridwin2.cxx
@@ -382,9 +382,10 @@ public:
    explicit DPFieldPopupOKAction(ScGridWindow* p) :
        mpGridWindow(p) {}

    virtual void execute() override
    virtual bool execute() override
    {
        mpGridWindow->UpdateDPFromFieldPopupMenu();
        return true;
    }
private:
    VclPtr<ScGridWindow> mpGridWindow;
@@ -404,7 +405,7 @@ public:
        , mpViewShell(pViewShell)
    {}

    virtual void execute() override
    virtual bool execute() override
    {
        switch (meType)
        {
@@ -420,6 +421,7 @@ public:
            default:
                ;
        }
        return true;
    }

private: