From f9af3a9807ef37ca888a4767d3abdc1078783106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Tue, 15 Dec 2020 09:32:26 +0000 Subject: [PATCH] use GetParentWithLOKNotifier to get the frame LOKNotifier to reuse for menus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit so it doesn't have to be explicitly set by the editview menu creator If I force enable LibreOfficeKit::isActive and right click on a mispelled word in impress, or in the writer comments-in-margin before or after this change I see the same ILibreOfficeKitNotifier set on the MenuFloatingWindow. Seeing as this is used in only the editview spell checking menu give that a unique id 'editviewspellmenu' and only do this for that id SetLOKNotifier in vcl/source/window/menu.cxx added with: commit 8938e8b153f32f3f5926baddb87cb76c8e72755a Author: Jan Holesovsky Date: Thu Mar 8 21:07:40 2018 +0100 lokdialog: Tunnel the spell-checking context menu with recommendations. Change-Id: I1a7952e88a3f89346c97d2516628b4a7a0423de6 Reviewed-on: https://gerrit.libreoffice.org/51062 Reviewed-by: pranavk Tested-by: pranavk Reviewed-on: https://gerrit.libreoffice.org/51166 Tested-by: Jenkins Reviewed-by: Jan Holesovsky SetLOKNotifier in editeng/source/editeng/editview.cxx added with: commit 7c6fbd0ac3b5927b337aa69b132aba14e9b3103f Author: Tamás Zolnai Date: Mon Apr 16 14:38:36 2018 +0200 sd lok: Impress: Right-click menu on misspelled word locks up session Change-Id: Ib554eea7049c1ea244bc4789ee3d7d2adf87e283 Reviewed-on: https://gerrit.libreoffice.org/52977 Tested-by: Jenkins Reviewed-by: Tamás Zolnai Change-Id: I6c23ba4252eab3850b7cc4c8cad2d2f8adee2792 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107747 Tested-by: Jenkins Reviewed-by: Caolán McNamara --- editeng/source/editeng/editview.cxx | 4 +--- editeng/uiconfig/ui/spellmenu.ui | 2 +- include/vcl/menu.hxx | 8 -------- vcl/source/window/menu.cxx | 12 +++++++----- 4 files changed, 9 insertions(+), 17 deletions(-) diff --git a/editeng/source/editeng/editview.cxx b/editeng/source/editeng/editview.cxx index d7642736cf27..2212b526a572 100644 --- a/editeng/source/editeng/editview.cxx +++ b/editeng/source/editeng/editview.cxx @@ -920,7 +920,7 @@ void EditView::ExecuteSpellPopup( const Point& rPosPixel, Link aPopupMenu(aBuilder.get_menu("menu")); + VclPtr aPopupMenu(aBuilder.get_menu("editviewspellmenu")); const sal_uInt16 nAutoCorrId = aPopupMenu->GetItemId("autocorrect"); PopupMenu *pAutoMenu = aPopupMenu->GetPopupMenu(nAutoCorrId); const sal_uInt16 nInsertId = aPopupMenu->GetItemId("insert"); @@ -1104,8 +1104,6 @@ void EditView::ExecuteSpellPopup( const Point& rPosPixel, LinkSetLOKNotifier(pViewShell); } sal_uInt16 nId = aPopupMenu->Execute(pImpEditView->GetWindow(), aTempRect, PopupMenuFlags::NoMouseUpClose); diff --git a/editeng/uiconfig/ui/spellmenu.ui b/editeng/uiconfig/ui/spellmenu.ui index 6b6e2cb05b78..ea3bd9486fd0 100644 --- a/editeng/uiconfig/ui/spellmenu.ui +++ b/editeng/uiconfig/ui/spellmenu.ui @@ -2,7 +2,7 @@ - + True False diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx index 935fc68eac11..4feef6025ddb 100644 --- a/include/vcl/menu.hxx +++ b/include/vcl/menu.hxx @@ -500,8 +500,6 @@ class VCL_DLLPUBLIC PopupMenu : public Menu friend struct MenuItemData; private: - const vcl::ILibreOfficeKitNotifier* mpLOKNotifier; ///< To emit the LOK callbacks eg. for dialog tunneling. - SAL_DLLPRIVATE MenuFloatingWindow * ImplGetFloatingWindow() const; protected: @@ -538,12 +536,6 @@ public: static bool IsInExecute(); static PopupMenu* GetActivePopupMenu(); - /// Interface to register for dialog / window tunneling. - void SetLOKNotifier(const vcl::ILibreOfficeKitNotifier* pNotifier) - { - mpLOKNotifier = pNotifier; - } - PopupMenu& operator=( const PopupMenu& rMenu ); }; diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx index 5fa5e99e034a..f14056057aa5 100644 --- a/vcl/source/window/menu.cxx +++ b/vcl/source/window/menu.cxx @@ -2714,14 +2714,12 @@ MenuFloatingWindow * PopupMenu::ImplGetFloatingWindow() const { } PopupMenu::PopupMenu() - : mpLOKNotifier(nullptr) { mpSalMenu = ImplGetSVData()->mpDefInst->CreateMenu(false, this); } PopupMenu::PopupMenu( const PopupMenu& rMenu ) - : Menu(), - mpLOKNotifier(nullptr) + : Menu() { mpSalMenu = ImplGetSVData()->mpDefInst->CreateMenu(false, this); *this = rMenu; @@ -2922,8 +2920,12 @@ sal_uInt16 PopupMenu::ImplExecute( const VclPtr& pW, const tools::R } VclPtrInstance pWin( this, pW, WB_BORDER | WB_SYSTEMWINDOW ); - if (comphelper::LibreOfficeKit::isActive() && mpLOKNotifier) - pWin->SetLOKNotifier(mpLOKNotifier); + if (comphelper::LibreOfficeKit::isActive() && get_id() == "editviewspellmenu") + { + VclPtr xNotifierParent = pW->GetParentWithLOKNotifier(); + assert(xNotifierParent && xNotifierParent->GetLOKNotifier() && "editview menu without LOKNotifier"); + pWin->SetLOKNotifier(xNotifierParent->GetLOKNotifier()); + } if( pSVData->maNWFData.mbFlatMenu ) pWin->SetBorderStyle( WindowBorderStyle::NOBORDER );