diff options
-rw-r--r-- | editeng/source/editeng/editview.cxx | 5 | ||||
-rw-r--r-- | editeng/source/editeng/impedit.cxx | 19 | ||||
-rw-r--r-- | editeng/source/editeng/impedit.hxx | 9 | ||||
-rw-r--r-- | editeng/source/outliner/outlvw.cxx | 5 | ||||
-rw-r--r-- | include/editeng/editview.hxx | 5 | ||||
-rw-r--r-- | include/editeng/outliner.hxx | 15 | ||||
-rw-r--r-- | include/sfx2/viewsh.hxx | 5 | ||||
-rw-r--r-- | svx/source/svdraw/svdedxv.cxx | 6 |
8 files changed, 62 insertions, 7 deletions
diff --git a/editeng/source/editeng/editview.cxx b/editeng/source/editeng/editview.cxx index e9a36bf7144a..51f3b6adf8cd 100644 --- a/editeng/source/editeng/editview.cxx +++ b/editeng/source/editeng/editview.cxx @@ -583,6 +583,11 @@ void EditView::registerLibreOfficeKitCallback(OutlinerSearchable *pSearchable) pImpEditView->registerLibreOfficeKitCallback(pSearchable); } +void EditView::registerLibreOfficeKitViewCallback(OutlinerViewCallable *pCallable) +{ + pImpEditView->registerLibreOfficeKitViewCallback(pCallable); +} + void EditView::SetControlWord( EVControlBits nWord ) { pImpEditView->nControl = nWord; diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index c3b605810c96..c95aed4d4e4b 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -80,6 +80,7 @@ ImpEditView::ImpEditView( EditView* pView, EditEngine* pEng, vcl::Window* pWindo pPointer = nullptr; pBackgroundColor = nullptr; mpLibreOfficeKitSearchable = nullptr; + mpLibreOfficeKitViewCallable = nullptr; nScrollDiffX = 0; nExtraCursorFlags = 0; nCursorBidiLevel = CURSOR_BIDILEVEL_DONTKNOW; @@ -119,6 +120,8 @@ void ImpEditView::SetBackgroundColor( const Color& rColor ) void ImpEditView::registerLibreOfficeKitCallback(OutlinerSearchable* pSearchable) { + // Per-view callbacks should always invoke ImpEditView::registerLibreOfficeKitViewCallback(). + assert(!comphelper::LibreOfficeKit::isViewCallback()); mpLibreOfficeKitSearchable = pSearchable; } @@ -128,6 +131,17 @@ void ImpEditView::libreOfficeKitCallback(int nType, const char* pPayload) const mpLibreOfficeKitSearchable->libreOfficeKitCallback(nType, pPayload); } +void ImpEditView::registerLibreOfficeKitViewCallback(OutlinerViewCallable* pCallable) +{ + mpLibreOfficeKitViewCallable = pCallable; +} + +void ImpEditView::libreOfficeKitViewCallback(int nType, const char* pPayload) const +{ + if (mpLibreOfficeKitViewCallable) + mpLibreOfficeKitViewCallable->libreOfficeKitViewCallback(nType, pPayload); +} + void ImpEditView::SetEditSelection( const EditSelection& rEditSelection ) { // set state before notification @@ -1002,7 +1016,10 @@ void ImpEditView::ShowCursor( bool bGotoCursor, bool bForceVisCursor ) aRect.setWidth(0); OString sRect = aRect.toString(); - libreOfficeKitCallback(LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR, sRect.getStr()); + if (comphelper::LibreOfficeKit::isViewCallback()) + libreOfficeKitViewCallback(LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR, sRect.getStr()); + else + libreOfficeKitCallback(LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR, sRect.getStr()); } CursorDirection nCursorDir = CursorDirection::NONE; diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx index 15a433901933..6c1c9f4e7d6d 100644 --- a/editeng/source/editeng/impedit.hxx +++ b/editeng/source/editeng/impedit.hxx @@ -221,7 +221,10 @@ private: EditView* pEditView; vcl::Cursor* pCursor; Color* pBackgroundColor; + /// Model callback. OutlinerSearchable* mpLibreOfficeKitSearchable; + /// Per-view callback. + OutlinerViewCallable* mpLibreOfficeKitViewCallable; EditEngine* pEditEngine; VclPtr<vcl::Window> pOutWin; Pointer* pPointer; @@ -368,8 +371,12 @@ public: /// @see vcl::ITiledRenderable::registerCallback(). void registerLibreOfficeKitCallback(OutlinerSearchable* pSearchable); - /// Invokes the registered callback, if there are any. + /// Invokes the registered model callback, if there are any. void libreOfficeKitCallback(int nType, const char* pPayload) const; + /// @see vcl::ITiledRenderable::registerCallback(). + void registerLibreOfficeKitViewCallback(OutlinerViewCallable* pCallable); + /// Invokes the registered view callback, if there are any. + void libreOfficeKitViewCallback(int nType, const char* pPayload) const; bool IsWrongSpelledWord( const EditPaM& rPaM, bool bMarkIfWrong ); OUString SpellIgnoreWord(); diff --git a/editeng/source/outliner/outlvw.cxx b/editeng/source/outliner/outlvw.cxx index a64d85bc74e2..eec3ec9f0c76 100644 --- a/editeng/source/outliner/outlvw.cxx +++ b/editeng/source/outliner/outlvw.cxx @@ -1426,6 +1426,11 @@ void OutlinerView::registerLibreOfficeKitCallback(OutlinerSearchable* pSearchabl pEditView->registerLibreOfficeKitCallback(pSearchable); } +void OutlinerView::registerLibreOfficeKitViewCallback(OutlinerViewCallable* pCallable) +{ + pEditView->registerLibreOfficeKitViewCallback(pCallable); +} + Color OutlinerView::GetBackgroundColor() { return pEditView->GetBackgroundColor(); diff --git a/include/editeng/editview.hxx b/include/editeng/editview.hxx index 163ea7c6653c..909b656594c5 100644 --- a/include/editeng/editview.hxx +++ b/include/editeng/editview.hxx @@ -36,6 +36,7 @@ class EditEngine; class ImpEditEngine; class ImpEditView; class OutlinerSearchable; +class OutlinerViewCallable; class SvxSearchItem; class SvxFieldItem; namespace vcl { class Window; } @@ -182,8 +183,10 @@ public: void SetBackgroundColor( const Color& rColor ); Color GetBackgroundColor() const; - /// @see vcl::ITiledRenderable::registerCallback(). + /// Register a LOK model callback. void registerLibreOfficeKitCallback(OutlinerSearchable *pSearchable); + /// Register a LOK view callback. + void registerLibreOfficeKitViewCallback(OutlinerViewCallable *pCallable); void SetControlWord( EVControlBits nWord ); EVControlBits GetControlWord() const; diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx index 8b71ae12805b..0220397a0df3 100644 --- a/include/editeng/outliner.hxx +++ b/include/editeng/outliner.hxx @@ -73,6 +73,7 @@ class SvxForbiddenCharactersTable; class OverflowingText; class NonOverflowingText; class OutlinerSearchable; +class OutlinerViewCallable; namespace svl { @@ -269,8 +270,10 @@ public: void SetBackgroundColor( const Color& rColor ); Color GetBackgroundColor(); - /// @see vcl::ITiledRenderable::registerCallback(). + /// Registers a LOK model callback. void registerLibreOfficeKitCallback(OutlinerSearchable* pSearchable); + /// Registers a LOK view callback. + void registerLibreOfficeKitViewCallback(OutlinerViewCallable* pCallable); SfxItemSet GetAttribs(); @@ -381,6 +384,16 @@ public: virtual void libreOfficeKitCallback(int nType, const char* pPayload) const = 0; }; +/// Interface class to not depend on SfxViewShell in editeng, meant to replace OutlinerSearchable at the end. +class SAL_NO_VTABLE SAL_DLLPUBLIC_RTTI OutlinerViewCallable +{ +public: + virtual void libreOfficeKitViewCallback(int nType, const char* pPayload) const = 0; + +protected: + ~OutlinerViewCallable() throw () {} +}; + // some thesaurus functionality to avoid code duplication in different projects... bool EDITENG_DLLPUBLIC GetStatusValueForThesaurusFromContext( OUString &rStatusVal, LanguageType &rLang, const EditView &rEditView ); void EDITENG_DLLPUBLIC ReplaceTextWithSynonym( EditView &rEditView, const OUString &rSynonmText ); diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx index 936df3814cdf..7ed08c11c11c 100644 --- a/include/sfx2/viewsh.hxx +++ b/include/sfx2/viewsh.hxx @@ -40,6 +40,7 @@ #include <vcl/vclptr.hxx> #include <sfx2/tabdlg.hxx> #include <LibreOfficeKit/LibreOfficeKitTypes.h> +#include <editeng/outliner.hxx> #include <functional> class SfxBaseController; @@ -140,7 +141,7 @@ template<class T> bool checkSfxViewShell(const SfxViewShell* pShell) return dynamic_cast<const T*>(pShell) != nullptr; } -class SFX2_DLLPUBLIC SfxViewShell: public SfxShell, public SfxListener +class SFX2_DLLPUBLIC SfxViewShell: public SfxShell, public SfxListener, public OutlinerViewCallable { #ifdef INCLUDED_SFX2_VIEWSH_HXX friend class SfxViewFrame; @@ -325,7 +326,7 @@ public: /// The actual per-view implementation of lok::Document::registerCallback(). void registerLibreOfficeKitViewCallback(LibreOfficeKitCallback pCallback, void* pLibreOfficeKitData); /// Invokes the registered callback, if there are any. - void libreOfficeKitViewCallback(int nType, const char* pPayload) const; + void libreOfficeKitViewCallback(int nType, const char* pPayload) const override; }; diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index 2c7bd27a0b8c..cb88a6c79a88 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -63,6 +63,7 @@ #include <svx/sdr/table/tablecontroller.hxx> #include <drawinglayer/processor2d/processor2dtools.hxx> #include <comphelper/lok.hxx> +#include <sfx2/viewsh.hxx> #include <memory> @@ -460,7 +461,10 @@ OutlinerView* SdrObjEditView::ImpMakeOutlinerView(vcl::Window* pWin, bool /*bNoP } pOutlView->SetControlWord(nStat); pOutlView->SetBackgroundColor( aBackground ); - pOutlView->registerLibreOfficeKitCallback(GetModel()); + if (comphelper::LibreOfficeKit::isViewCallback()) + pOutlView->registerLibreOfficeKitViewCallback(SfxViewShell::Current()); + else + pOutlView->registerLibreOfficeKitCallback(GetModel()); if (pText!=nullptr) { pOutlView->SetAnchorMode((EVAnchorMode)(pText->GetOutlinerViewAnchorMode())); |