Resolves: tdf#133183 select style under mouse on right click context menu

Change-Id: I4317f6702b7a0e172d059fe83614aab94845b201
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94690
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/sfx2/source/dialog/templdlg.cxx b/sfx2/source/dialog/templdlg.cxx
index cd54f92..18be2cd 100644
--- a/sfx2/source/dialog/templdlg.cxx
+++ b/sfx2/source/dialog/templdlg.cxx
@@ -319,13 +319,38 @@ IMPL_LINK(SfxCommonTemplateDialog_Impl, PopupFlatMenuHdl, const CommandEvent&, r
    if (rCEvt.GetCommand() != CommandEventId::ContextMenu)
        return false;

    PrepareMenu(rCEvt.GetMousePosPixel());

    if (mxFmtLb->count_selected_rows() <= 0)
    {
        EnableEdit(false);
        EnableDel(false);
    }

    return PopupTreeMenuHdl(rCEvt);
    ShowMenu(rCEvt);

    return true;
}

void SfxCommonTemplateDialog_Impl::PrepareMenu(const Point& rPos)
{
    weld::TreeView* pTreeView = mxTreeBox->get_visible() ? mxTreeBox.get() : mxFmtLb.get();
    std::unique_ptr<weld::TreeIter> xIter(pTreeView->make_iterator());
    if (pTreeView->get_dest_row_at_pos(rPos, xIter.get()) && !pTreeView->is_selected(*xIter))
    {
        pTreeView->unselect_all();
        pTreeView->select(*xIter);
        FmtSelectHdl(*pTreeView);
    }
}

void SfxCommonTemplateDialog_Impl::ShowMenu(const CommandEvent& rCEvt)
{
    CreateContextMenu();

    weld::TreeView* pTreeView = mxTreeBox->get_visible() ? mxTreeBox.get() : mxFmtLb.get();
    OString sCommand(mxMenu->popup_at_rect(pTreeView, tools::Rectangle(rCEvt.GetMousePosPixel(), Size(1,1))));
    MenuSelect(sCommand);
}

IMPL_LINK(SfxCommonTemplateDialog_Impl, PopupTreeMenuHdl, const CommandEvent&, rCEvt, bool)
@@ -333,11 +358,9 @@ IMPL_LINK(SfxCommonTemplateDialog_Impl, PopupTreeMenuHdl, const CommandEvent&, r
    if (rCEvt.GetCommand() != CommandEventId::ContextMenu)
        return false;

    CreateContextMenu();
    PrepareMenu(rCEvt.GetMousePosPixel());

    weld::TreeView* pTreeView = mxTreeBox->get_visible() ? mxTreeBox.get() : mxFmtLb.get();
    OString sCommand(mxMenu->popup_at_rect(pTreeView, tools::Rectangle(rCEvt.GetMousePosPixel(), Size(1,1))));
    MenuSelect(sCommand);
    ShowMenu(rCEvt);

    return true;
}
diff --git a/sfx2/source/inc/templdgi.hxx b/sfx2/source/inc/templdgi.hxx
index 05746df..57b95ed 100644
--- a/sfx2/source/inc/templdgi.hxx
+++ b/sfx2/source/inc/templdgi.hxx
@@ -207,6 +207,9 @@ protected:
    void SaveFactoryStyleFilter( SfxObjectShell const * i_pObjSh, sal_Int32 i_nFilter );
    SfxObjectShell* SaveSelection();

    void PrepareMenu(const Point& rPos);
    void ShowMenu(const CommandEvent& rCEvt);

public:

    SfxCommonTemplateDialog_Impl(SfxBindings* pB, vcl::Window*, weld::Builder* pBuilder);