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 <caolanm@redhat.com>
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 56fb604..328c517 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 302f2bd..cb78bf2 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 6013848..39c2f7d 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();