comphelper/source/misc/lok.cxx | 12 ++++++++++++ desktop/source/lib/init.cxx | 24 +++++++++++++++++++----- include/comphelper/lok.hxx | 5 +++++ include/sfx2/viewsh.hxx | 7 +++++++ sfx2/source/view/viewimp.hxx | 3 +++ sfx2/source/view/viewsh.cxx | 14 ++++++++++++++ sw/inc/viewsh.hxx | 3 ++- sw/source/core/view/viewsh.cxx | 7 +++++++ sw/source/uibase/docvw/edtwin.cxx | 10 ++++++++-- 9 files changed, 77 insertions(+), 8 deletions(-)
New commits: commit b144edb9667836980ff906987dad24faf2987370 Author: Miklos Vajna <[email protected]> Date: Thu Sep 17 15:39:19 2015 +0200 lok::Document: register callback in the view, if requested With this, a postKeyEvent() in one view properly results in one LOK_CALLBACK_INVALIDATE_TILES per view, at least in Writer. Change-Id: Ia0a9a00ea5a98c38f3d399208b9ef028f3036f79 diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index b30f3de..3d884d5 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -49,6 +49,8 @@ #include <editeng/flstitem.hxx> #include <sfx2/objsh.hxx> #include <sfx2/lokhelper.hxx> +#include <sfx2/viewfrm.hxx> +#include <sfx2/viewsh.hxx> #include <svx/svxids.hrc> #include <vcl/svapp.hxx> #include <vcl/svpforlokit.hxx> @@ -758,14 +760,22 @@ static void doc_registerCallback(LibreOfficeKitDocument* pThis, LibreOfficeKitCallback pCallback, void* pData) { - ITiledRenderable* pDoc = getTiledRenderable(pThis); - if (!pDoc) + if (comphelper::LibreOfficeKit::isViewCallback()) { - gImpl->maLastExceptionMsg = "Document doesn't support tiled rendering"; - return; + if (SfxViewShell* pViewShell = SfxViewFrame::Current()->GetViewShell()) + pViewShell->registerLibreOfficeKitViewCallback(pCallback, pData); } + else + { + ITiledRenderable* pDoc = getTiledRenderable(pThis); + if (!pDoc) + { + gImpl->maLastExceptionMsg = "Document doesn't support tiled rendering"; + return; + } - pDoc->registerCallback(pCallback, pData); + pDoc->registerCallback(pCallback, pData); + } } static void doc_postKeyEvent(LibreOfficeKitDocument* pThis, int nType, int nCharCode, int nKeyCode) commit 8394e3ed3ac59f4740056563148575e6ed4a535b Author: Miklos Vajna <[email protected]> Date: Thu Sep 17 11:44:53 2015 +0200 sw: implement per-view LOK_CALLBACK_INVALIDATE_TILES Change-Id: Id839dc076824e69fe07386c83bf21fc4c7ce2b8e diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx index 09a24d2..c32ec9f 100644 --- a/sw/source/uibase/docvw/edtwin.cxx +++ b/sw/source/uibase/docvw/edtwin.cxx @@ -69,6 +69,7 @@ #include <basegfx/polygon/b2dpolygon.hxx> #include <LibreOfficeKit/LibreOfficeKitEnums.h> +#include <comphelper/lok.hxx> #include <editeng/acorrcfg.hxx> #include <SwSmartTagMgr.hxx> @@ -6224,8 +6225,13 @@ void SwEditWin::LogicInvalidate(const Rectangle* pRectangle) else sRectangle = pRectangle->toString(); - if ( m_rView.GetWrtShellPtr() ) - m_rView.GetWrtShell().libreOfficeKitCallback(LOK_CALLBACK_INVALIDATE_TILES, sRectangle.getStr()); + if (comphelper::LibreOfficeKit::isViewCallback()) + m_rView.libreOfficeKitViewCallback(LOK_CALLBACK_INVALIDATE_TILES, sRectangle.getStr()); + else + { + if (m_rView.GetWrtShellPtr()) + m_rView.GetWrtShell().libreOfficeKitCallback(LOK_CALLBACK_INVALIDATE_TILES, sRectangle.getStr()); + } } void SwEditWin::LogicMouseButtonDown(const MouseEvent& rMouseEvent) commit 934d23bd41ca4231cc2cf4ce71243973c08b7113 Author: Miklos Vajna <[email protected]> Date: Thu Sep 17 10:59:13 2015 +0200 comphelper: add LibreOfficeKit::set/isViewCallback() Change-Id: Iad0b2ee419327daf478f3ddda2378effe0184067 diff --git a/comphelper/source/misc/lok.cxx b/comphelper/source/misc/lok.cxx index a6abd2a..279ec65 100644 --- a/comphelper/source/misc/lok.cxx +++ b/comphelper/source/misc/lok.cxx @@ -17,6 +17,8 @@ namespace LibreOfficeKit static bool g_bActive(false); +static bool g_bViewCallback(false); + void setActive(bool bActive) { g_bActive = bActive; @@ -27,6 +29,16 @@ bool isActive() return g_bActive; } +void setViewCallback(bool bViewCallback) +{ + g_bViewCallback = bViewCallback; +} + +bool isViewCallback() +{ + return g_bViewCallback; +} + static void (*pStatusIndicatorCallback)(void *data, statusIndicatorCallbackType type, int percent)(nullptr); static void *pStatusIndicatorCallbackData(nullptr); diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 4f17cb7..b30f3de 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -1134,6 +1134,10 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char return 1; comphelper::LibreOfficeKit::setActive(); + + static bool bViewCallback = getenv("LOK_VIEW_CALLBACK"); + comphelper::LibreOfficeKit::setViewCallback(bViewCallback); + comphelper::LibreOfficeKit::setStatusIndicatorCallback(lo_status_indicator_callback, pLib); if (pUserProfilePath) diff --git a/include/comphelper/lok.hxx b/include/comphelper/lok.hxx index 79fa115..2cc38c6 100644 --- a/include/comphelper/lok.hxx +++ b/include/comphelper/lok.hxx @@ -36,6 +36,11 @@ COMPHELPER_DLLPUBLIC void setStatusIndicatorCallback(void (*callback)(void *data // Check whether the code is running as invoked through LibreOfficeKit. COMPHELPER_DLLPUBLIC bool isActive(); +/// Check whether clients register a callback for each view. +COMPHELPER_DLLPUBLIC bool isViewCallback(); +/// Set whether clients register a callback for each view. +COMPHELPER_DLLPUBLIC void setViewCallback(bool bViewCallback); + // Status indicator handling. Even if in theory there could be several status indicators active at // the same time, in practice there is only one at a time, so we don't handle any identification of // status indicator in this API. commit 11e9da731bd4d2334dc436e2c1640732df8308e8 Author: Miklos Vajna <[email protected]> Date: Thu Sep 17 10:58:56 2015 +0200 sfx2: add SfxViewShell::libreOfficeKitViewCallback() This is similar to the existing LOK callback, the difference is that the existing one assumes there is only one SfxViewShell instance at the same time. This newer callback is precisely per-view, so model notifications can invoke all view callbacks, while view notifications can invoke only the callback of the relevant view. This is just the framework, all actual client code has to be still ported over (and then the existing callback can be removed). Change-Id: I3d8f27740c69fcf6ffbbdce12db2ea088321493d diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx index e88203d..70f3931 100644 --- a/include/sfx2/viewsh.hxx +++ b/include/sfx2/viewsh.hxx @@ -39,6 +39,8 @@ #include <o3tl/typed_flags_set.hxx> #include <vcl/vclptr.hxx> #include <sfx2/tabdlg.hxx> +#define LOK_USE_UNSTABLE_API +#include <LibreOfficeKit/LibreOfficeKitTypes.h> class SfxBaseController; class Size; @@ -315,6 +317,11 @@ public: SAL_DLLPRIVATE void TakeOwnership_Impl(); SAL_DLLPRIVATE void TakeFrameOwnership_Impl(); SAL_DLLPRIVATE bool ExecKey_Impl(const KeyEvent& aKey); + + /// The actual implementation of the lok::Document::registerViewCallback() API. + void registerLibreOfficeKitViewCallback(LibreOfficeKitCallback pCallback, void* pLibreOfficeKitData); + /// Invokes the registered callback, if there are any. + void libreOfficeKitViewCallback(int nType, const char* pPayload) const; }; diff --git a/sfx2/source/view/viewimp.hxx b/sfx2/source/view/viewimp.hxx index 4900593..b832b15 100644 --- a/sfx2/source/view/viewimp.hxx +++ b/sfx2/source/view/viewimp.hxx @@ -64,6 +64,9 @@ struct SfxViewShell_Impl mutable SfxInPlaceClientList* mpIPClientList; + LibreOfficeKitCallback m_pLibreOfficeKitViewCallback; + void* m_pLibreOfficeKitViewData; + explicit SfxViewShell_Impl(SfxViewShellFlags const nFlags); ~SfxViewShell_Impl(); diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index 62ed8bd..2b9ac3d 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -309,6 +309,8 @@ SfxViewShell_Impl::SfxViewShell_Impl(SfxViewShellFlags const nFlags) , m_nFamily(0xFFFF) // undefined, default set by TemplateDialog , m_pController(0) , mpIPClientList(NULL) +, m_pLibreOfficeKitViewCallback(0) +, m_pLibreOfficeKitViewData(0) {} SfxViewShell_Impl::~SfxViewShell_Impl() @@ -1631,6 +1633,18 @@ bool SfxViewShell::ExecKey_Impl(const KeyEvent& aKey) return pImp->m_xAccExec->execute(aKey.GetKeyCode()); } +void SfxViewShell::registerLibreOfficeKitViewCallback(LibreOfficeKitCallback pCallback, void* pData) +{ + pImp->m_pLibreOfficeKitViewCallback = pCallback; + pImp->m_pLibreOfficeKitViewData = pData; +} + +void SfxViewShell::libreOfficeKitViewCallback(int nType, const char* pPayload) const +{ + if (pImp->m_pLibreOfficeKitViewCallback) + pImp->m_pLibreOfficeKitViewCallback(nType, pPayload, pImp->m_pLibreOfficeKitViewData); +} + bool SfxViewShell::KeyInput( const KeyEvent &rKeyEvent ) /* [Description] commit f2b4227fe0ac8d2a95fdf535e37964abb510e68e Author: Jan Holesovsky <[email protected]> Date: Tue Sep 15 20:22:08 2015 +0200 tdf#94237 tiled rendering: Use the entire document as the visual area. Many places were already adapted for the tiled rendering, and the conditions checking for the VisArea() were changed so that the checks are ignored when tiled rendering is active. Unfortunately there are still some places left, and they are causing that various areas are invalidated only partially. Let's sort it out for good, and report the entire document as the VisArea() when the tiled rendering is active, and if there are performance problems, let's profile that & act accordingly. Change-Id: I53f18915ed0aec898704dd1350a9534cfc3f001b (cherry picked from commit 12e3b51abe883202af09769873f87b27d7de118b) diff --git a/sw/inc/viewsh.hxx b/sw/inc/viewsh.hxx index aed6b40..d0e3d12 100644 --- a/sw/inc/viewsh.hxx +++ b/sw/inc/viewsh.hxx @@ -31,6 +31,7 @@ #include <vcl/mapmod.hxx> #include <vcl/print.hxx> #include <vcl/vclptr.hxx> + #define LOK_USE_UNSTABLE_API #include <LibreOfficeKit/LibreOfficeKitTypes.h> @@ -262,7 +263,7 @@ public: bool SmoothScroll( long lXDiff, long lYDiff, const Rectangle* );//Browser void EnableSmooth( bool b ) { mbEnableSmooth = b; } - const SwRect& VisArea() const { return maVisArea; } + const SwRect& VisArea() const; // If necessary scroll until passed Rect is situated in visible sector. void MakeVisible( const SwRect & ); diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx index cd67637..91bae95 100644 --- a/sw/source/core/view/viewsh.cxx +++ b/sw/source/core/view/viewsh.cxx @@ -575,6 +575,13 @@ void SwViewShell::InvalidateWindows( const SwRect &rRect ) } } +const SwRect& SwViewShell::VisArea() const +{ + // when using the tiled rendering, consider the entire document as our + // visible area + return isTiledRendering()? GetLayout()->Frm(): maVisArea; +} + void SwViewShell::MakeVisible( const SwRect &rRect ) { if ( !VisArea().IsInside( rRect ) || IsScrollMDI( this, rRect ) || GetCareWin(*this) ) _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
