lokdialog: Tunnel the spell-checking context menu with recommendations.
Change-Id: I1a7952e88a3f89346c97d2516628b4a7a0423de6 Reviewed-on: https://gerrit.libreoffice.org/51062 Reviewed-by: pranavk <pranavk@collabora.co.uk> Tested-by: pranavk <pranavk@collabora.co.uk> Reviewed-on: https://gerrit.libreoffice.org/51166 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Jan Holesovsky <kendy@collabora.com>
This commit is contained in:
@@ -1025,7 +1025,7 @@ void EditView::ExecuteSpellPopup( const Point& rPosPixel, Link<SpellCallbackInfo
|
|||||||
EPaM aP = pImpEditView->pEditEngine->pImpEditEngine->CreateEPaM(aPaM);
|
EPaM aP = pImpEditView->pEditEngine->pImpEditEngine->CreateEPaM(aPaM);
|
||||||
EPaM aP2 = pImpEditView->pEditEngine->pImpEditEngine->CreateEPaM(aPaM2);
|
EPaM aP2 = pImpEditView->pEditEngine->pImpEditEngine->CreateEPaM(aPaM2);
|
||||||
|
|
||||||
sal_uInt16 nId = aPopupMenu->Execute( pImpEditView->GetWindow(), aTempRect, PopupMenuFlags::NoMouseUpClose );
|
sal_uInt16 nId = aPopupMenu->Execute(pImpEditView->GetWindow(), aTempRect, PopupMenuFlags::NoMouseUpClose);
|
||||||
|
|
||||||
aPaM2 = pImpEditView->pEditEngine->pImpEditEngine->CreateEditPaM(aP2);
|
aPaM2 = pImpEditView->pEditEngine->pImpEditEngine->CreateEditPaM(aP2);
|
||||||
aPaM = pImpEditView->pEditEngine->pImpEditEngine->CreateEditPaM(aP);
|
aPaM = pImpEditView->pEditEngine->pImpEditEngine->CreateEditPaM(aP);
|
||||||
|
@@ -60,6 +60,7 @@ namespace vcl
|
|||||||
class Window;
|
class Window;
|
||||||
struct MenuLayoutData;
|
struct MenuLayoutData;
|
||||||
typedef OutputDevice RenderContext; // same as in include/vcl/outdev.hxx
|
typedef OutputDevice RenderContext; // same as in include/vcl/outdev.hxx
|
||||||
|
class ILibreOfficeKitNotifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MENU_APPEND (sal_uInt16(0xFFFF))
|
#define MENU_APPEND (sal_uInt16(0xFFFF))
|
||||||
@@ -483,6 +484,8 @@ class VCL_DLLPUBLIC PopupMenu : public Menu
|
|||||||
friend struct MenuItemData;
|
friend struct MenuItemData;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
const vcl::ILibreOfficeKitNotifier* mpLOKNotifier; ///< To emit the LOK callbacks eg. for dialog tunneling.
|
||||||
|
|
||||||
SAL_DLLPRIVATE MenuFloatingWindow * ImplGetFloatingWindow() const;
|
SAL_DLLPRIVATE MenuFloatingWindow * ImplGetFloatingWindow() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -517,6 +520,12 @@ public:
|
|||||||
static bool IsInExecute();
|
static bool IsInExecute();
|
||||||
static PopupMenu* GetActivePopupMenu();
|
static PopupMenu* GetActivePopupMenu();
|
||||||
|
|
||||||
|
/// Interface to register for dialog / window tunneling.
|
||||||
|
void SetLOKNotifier(const vcl::ILibreOfficeKitNotifier* pNotifier)
|
||||||
|
{
|
||||||
|
mpLOKNotifier = pNotifier;
|
||||||
|
}
|
||||||
|
|
||||||
PopupMenu& operator=( const PopupMenu& rMenu );
|
PopupMenu& operator=( const PopupMenu& rMenu );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -128,7 +128,7 @@ public:
|
|||||||
|
|
||||||
~SwSpellPopup();
|
~SwSpellPopup();
|
||||||
|
|
||||||
Menu& GetMenu()
|
PopupMenu& GetMenu()
|
||||||
{
|
{
|
||||||
return *m_xPopupMenu.get();
|
return *m_xPopupMenu.get();
|
||||||
}
|
}
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
#include <com/sun/star/linguistic2/ProofreadingResult.hpp>
|
#include <com/sun/star/linguistic2/ProofreadingResult.hpp>
|
||||||
#include <com/sun/star/i18n/TextConversionOption.hpp>
|
#include <com/sun/star/i18n/TextConversionOption.hpp>
|
||||||
#include <linguistic/lngprops.hxx>
|
#include <linguistic/lngprops.hxx>
|
||||||
|
#include <comphelper/lok.hxx>
|
||||||
#include <comphelper/processfactory.hxx>
|
#include <comphelper/processfactory.hxx>
|
||||||
#include <comphelper/propertyvalue.hxx>
|
#include <comphelper/propertyvalue.hxx>
|
||||||
#include <comphelper/propertysequence.hxx>
|
#include <comphelper/propertysequence.hxx>
|
||||||
@@ -710,11 +711,10 @@ bool SwView::ExecSpellPopup(const Point& rPt)
|
|||||||
aEvent.ExecutePosition.Y = aPixPos.Y();
|
aEvent.ExecutePosition.Y = aPixPos.Y();
|
||||||
ScopedVclPtr<Menu> pMenu;
|
ScopedVclPtr<Menu> pMenu;
|
||||||
|
|
||||||
OUString sMenuName = bUseGrammarContext ?
|
OUString sMenuName = bUseGrammarContext ?
|
||||||
OUString("private:resource/GrammarContextMenu") : OUString("private:resource/SpellContextMenu");
|
OUString("private:resource/GrammarContextMenu") : OUString("private:resource/SpellContextMenu");
|
||||||
if (TryContextMenuInterception(xPopup->GetMenu(), sMenuName, pMenu, aEvent))
|
if (TryContextMenuInterception(xPopup->GetMenu(), sMenuName, pMenu, aEvent))
|
||||||
{
|
{
|
||||||
|
|
||||||
//! happy hacking for context menu modifying extensions of this
|
//! happy hacking for context menu modifying extensions of this
|
||||||
//! 'custom made' menu... *sigh* (code copied from sfx2 and framework)
|
//! 'custom made' menu... *sigh* (code copied from sfx2 and framework)
|
||||||
if ( pMenu )
|
if ( pMenu )
|
||||||
@@ -762,6 +762,9 @@ bool SwView::ExecSpellPopup(const Point& rPt)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (comphelper::LibreOfficeKit::isActive())
|
||||||
|
xPopup->GetMenu().SetLOKNotifier(SfxViewShell::Current());
|
||||||
|
|
||||||
xPopup->Execute(aToFill.SVRect(), m_pEditWin);
|
xPopup->Execute(aToFill.SVRect(), m_pEditWin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#include <tools/diagnose_ex.h>
|
#include <tools/diagnose_ex.h>
|
||||||
#include <tools/stream.hxx>
|
#include <tools/stream.hxx>
|
||||||
|
|
||||||
|
#include <comphelper/lok.hxx>
|
||||||
#include <vcl/svapp.hxx>
|
#include <vcl/svapp.hxx>
|
||||||
#include <vcl/mnemonic.hxx>
|
#include <vcl/mnemonic.hxx>
|
||||||
#include <vcl/image.hxx>
|
#include <vcl/image.hxx>
|
||||||
@@ -40,6 +41,7 @@
|
|||||||
#include <vcl/dockingarea.hxx>
|
#include <vcl/dockingarea.hxx>
|
||||||
#include <vcl/settings.hxx>
|
#include <vcl/settings.hxx>
|
||||||
#include <vcl/commandinfoprovider.hxx>
|
#include <vcl/commandinfoprovider.hxx>
|
||||||
|
#include <vcl/IDialogRenderable.hxx>
|
||||||
|
|
||||||
#include <salinst.hxx>
|
#include <salinst.hxx>
|
||||||
#include <svdata.hxx>
|
#include <svdata.hxx>
|
||||||
@@ -2672,12 +2674,14 @@ MenuFloatingWindow * PopupMenu::ImplGetFloatingWindow() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PopupMenu::PopupMenu()
|
PopupMenu::PopupMenu()
|
||||||
|
: mpLOKNotifier(nullptr)
|
||||||
{
|
{
|
||||||
mpSalMenu = ImplGetSVData()->mpDefInst->CreateMenu(false, this);
|
mpSalMenu = ImplGetSVData()->mpDefInst->CreateMenu(false, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
PopupMenu::PopupMenu( const PopupMenu& rMenu )
|
PopupMenu::PopupMenu( const PopupMenu& rMenu )
|
||||||
: Menu()
|
: Menu(),
|
||||||
|
mpLOKNotifier(nullptr)
|
||||||
{
|
{
|
||||||
mpSalMenu = ImplGetSVData()->mpDefInst->CreateMenu(false, this);
|
mpSalMenu = ImplGetSVData()->mpDefInst->CreateMenu(false, this);
|
||||||
*this = rMenu;
|
*this = rMenu;
|
||||||
@@ -2878,6 +2882,9 @@ sal_uInt16 PopupMenu::ImplExecute( const VclPtr<vcl::Window>& pW, const tools::R
|
|||||||
}
|
}
|
||||||
|
|
||||||
VclPtrInstance<MenuFloatingWindow> pWin( this, pW, WB_BORDER | WB_SYSTEMWINDOW );
|
VclPtrInstance<MenuFloatingWindow> pWin( this, pW, WB_BORDER | WB_SYSTEMWINDOW );
|
||||||
|
if (comphelper::LibreOfficeKit::isActive() && mpLOKNotifier)
|
||||||
|
pWin->SetLOKNotifier(mpLOKNotifier);
|
||||||
|
|
||||||
if( pSVData->maNWFData.mbFlatMenu )
|
if( pSVData->maNWFData.mbFlatMenu )
|
||||||
pWin->SetBorderStyle( WindowBorderStyle::NOBORDER );
|
pWin->SetBorderStyle( WindowBorderStyle::NOBORDER );
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user