summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editeng/source/editeng/editview.cxx5
-rw-r--r--editeng/source/editeng/impedit.cxx19
-rw-r--r--editeng/source/editeng/impedit.hxx9
-rw-r--r--editeng/source/outliner/outlvw.cxx5
-rw-r--r--include/editeng/editview.hxx5
-rw-r--r--include/editeng/outliner.hxx15
-rw-r--r--include/sfx2/viewsh.hxx5
-rw-r--r--svx/source/svdraw/svdedxv.cxx6
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()));