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/+/125361
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx
index 95ab21c..123c76f 100644
--- a/sc/source/ui/cctrl/checklistmenu.cxx
+++ b/sc/source/ui/cctrl/checklistmenu.cxx
@@ -276,6 +276,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;
@@ -285,7 +292,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 7ebb95f..b0ddc91 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 c5382ef..242ca40 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -957,9 +957,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();