sc/source/ui/cctrl/checklistmenu.cxx |    9 ++++++++-
 sc/source/ui/inc/checklistmenu.hxx   |    5 +++++
 sc/source/ui/view/gridwin.cxx        |    6 +++---
 3 files changed, 16 insertions(+), 4 deletions(-)

New commits:
commit 2b3cc82b88d0c6508e9c0c6ccc53e0f9bfb4069e
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed Nov 17 15:20:33 2021 +0000
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Wed Nov 17 20:47:55 2021 +0100

    tdf#142420 color menu should be a child of the autofilter, not a sibling
    
    which is why it doesn't appear at all under wayland. This should also
    get it positioned better rather than using a fixed pixel offset.
    
    Change-Id: I9a4193c27b4172469cea3d980c86cff9ca701ca2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125409
    Tested-by: Caolán McNamara <caol...@redhat.com>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/sc/source/ui/cctrl/checklistmenu.cxx 
b/sc/source/ui/cctrl/checklistmenu.cxx
index 56fb60477220..328c51718364 100644
--- a/sc/source/ui/cctrl/checklistmenu.cxx
+++ b/sc/source/ui/cctrl/checklistmenu.cxx
@@ -283,6 +283,13 @@ void ScCheckListMenuControl::queueCloseSubMenu()
     maCloseTimer.maTimer.Start();
 }
 
+tools::Rectangle ScCheckListMenuControl::GetSubMenuParentRect()
+{
+    if (!mxMenu->get_selected(mxScratchIter.get()))
+        return tools::Rectangle();
+    return mxMenu->get_row_area(*mxScratchIter);
+}
+
 void ScCheckListMenuControl::launchSubMenu(bool bSetMenuPos)
 {
     ScCheckListMenuWindow* pSubMenu = maOpenTimer.mpSubMenu;
@@ -292,7 +299,7 @@ void ScCheckListMenuControl::launchSubMenu(bool bSetMenuPos)
     if (!mxMenu->get_selected(mxScratchIter.get()))
         return;
 
-    tools::Rectangle aRect = mxMenu->get_row_area(*mxScratchIter);
+    tools::Rectangle aRect = GetSubMenuParentRect();
     ScCheckListMenuControl& rSubMenuControl = pSubMenu->get_widget();
     rSubMenuControl.StartPopupMode(aRect, FloatWinPopupFlags::Right);
     if (bSetMenuPos)
diff --git a/sc/source/ui/inc/checklistmenu.hxx 
b/sc/source/ui/inc/checklistmenu.hxx
index 302f2bd0b55d..cb78bf226a45 100644
--- a/sc/source/ui/inc/checklistmenu.hxx
+++ b/sc/source/ui/inc/checklistmenu.hxx
@@ -177,6 +177,11 @@ public:
      */
     void terminateAllPopupMenus();
 
+    /**
+     * Get the area of the active row. Suitable as the parent rectangle
+     * argument for Executing a popup
+    */
+    tools::Rectangle GetSubMenuParentRect();
 private:
 
     std::vector<MenuItemData>         maMenuItems;
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 6013848bb85c..39c2f7d8fd98 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -961,9 +961,9 @@ void ScGridWindow::UpdateAutoFilterFromMenu(AutoFilterMode 
eMode)
                     }
                     i++;
                 }
-                Point pos(mpAutoFilterPopup->GetPosPixel());
-                pos.Move(150, 0);
-                sal_uInt16 nSelected = pColorMenu->Execute(this, pos);
+
+                tools::Rectangle aRect = rControl.GetSubMenuParentRect();
+                sal_uInt16 nSelected = pColorMenu->Execute(mpAutoFilterPopup, 
aRect, PopupMenuFlags::ExecuteRight);
                 pColorMenu.disposeAndClear();
                 rControl.terminateAllPopupMenus();
 

Reply via email to