summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamás Zolnai <tamas.zolnai@collabora.com>2019-09-14 13:22:45 +0200
committerTamás Zolnai <tamas.zolnai@collabora.com>2019-09-26 19:43:54 +0200
commitfac47ae957e893ea050e38bca3f5a25d83798bfd (patch)
treef76ef1b4c15baedc71c0d9ebad84601dc93179cb
parent30a10a422003f87d761351606fd2158703b073f3 (diff)
lok: send an invalidation by document size change
It was sent by the kit code earlier. Now we move it to the LO core code, so we can optimize it later. co-author: Michael Meeks <michael.meeks@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/79491 Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com> Tested-by: Tamás Zolnai <tamas.zolnai@collabora.com> (cherry picked from commit cd7ff1797d754018db1d47888781c9d7ecb24dcf) Change-Id: Id0a8991016dbe8d13891071e2d5b4c9250720da9 Reviewed-on: https://gerrit.libreoffice.org/79617 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com>
-rw-r--r--include/LibreOfficeKit/LibreOfficeKitEnums.h4
-rw-r--r--include/sfx2/lokhelper.hxx3
-rw-r--r--sc/qa/unit/tiledrendering/tiledrendering.cxx8
-rw-r--r--sc/source/core/data/document.cxx13
-rw-r--r--sc/source/ui/docshell/docsh3.cxx4
-rw-r--r--sc/source/ui/view/tabview.cxx7
-rw-r--r--sc/source/ui/view/tabview3.cxx3
-rw-r--r--sc/source/ui/view/tabview5.cxx3
-rw-r--r--sd/qa/unit/tiledrendering/tiledrendering.cxx2
-rw-r--r--sd/source/core/drawdoc2.cxx8
-rw-r--r--sd/source/ui/sidebar/SlideBackground.cxx5
-rw-r--r--sfx2/source/view/lokhelper.cxx20
-rw-r--r--sw/qa/extras/tiledrendering/tiledrendering.cxx2
-rw-r--r--sw/source/core/view/viewsh.cxx12
14 files changed, 74 insertions, 20 deletions
diff --git a/include/LibreOfficeKit/LibreOfficeKitEnums.h b/include/LibreOfficeKit/LibreOfficeKitEnums.h
index b28b51b0f19a..aea463909da3 100644
--- a/include/LibreOfficeKit/LibreOfficeKitEnums.h
+++ b/include/LibreOfficeKit/LibreOfficeKitEnums.h
@@ -262,6 +262,10 @@ typedef enum
*
* Payload format is "width, height", i.e. clients get the new size without
* having to do an explicit lok::Document::getDocumentSize() call.
+ *
+ * A size change is always preceeded by a series of
+ * LOK_CALLBACK_INVALIDATE_TILES events invalidating any areas
+ * need re-rendering to adapt.
*/
LOK_CALLBACK_DOCUMENT_SIZE_CHANGED = 13,
diff --git a/include/sfx2/lokhelper.hxx b/include/sfx2/lokhelper.hxx
index 62c024508de1..44664a43041b 100644
--- a/include/sfx2/lokhelper.hxx
+++ b/include/sfx2/lokhelper.hxx
@@ -11,6 +11,7 @@
#define INCLUDED_SFX2_LOKHELPER_HXX
#include <vcl/IDialogRenderable.hxx>
+#include <vcl/ITiledRenderable.hxx>
#include <sfx2/dllapi.h>
#include <sfx2/viewsh.hxx>
#include <cstddef>
@@ -47,6 +48,8 @@ public:
vcl::LOKWindowId nWindowId,
const OUString& rAction,
const std::vector<vcl::LOKPayloadItem>& rPayload = std::vector<vcl::LOKPayloadItem>());
+ /// Emits a LOK_CALLBACK_DOCUMENT_SIZE_CHANGED - if @bInvalidateAll - first invalidates all parts
+ static void notifyDocumentSizeChanged(SfxViewShell const* pThisView, const OString& rPayload, vcl::ITiledRenderable* pDoc, bool bInvalidateAll = true);
/// Emits a LOK_CALLBACK_INVALIDATE_TILES, but tweaks it according to setOptionalFeatures() if needed.
static void notifyInvalidation(SfxViewShell const* pThisView, const OString& rPayload);
/// Emits a LOK_CALLBACK_INVALIDATE_VISIBLE_CURSOR, but tweaks it according to setOptionalFeatures() if needed.
diff --git a/sc/qa/unit/tiledrendering/tiledrendering.cxx b/sc/qa/unit/tiledrendering/tiledrendering.cxx
index 1eb5d28159f1..df43e49b8192 100644
--- a/sc/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sc/qa/unit/tiledrendering/tiledrendering.cxx
@@ -513,7 +513,7 @@ public:
else
{
uno::Sequence<OUString> aSeq = comphelper::string::convertCommaSeparated(OUString::createFromAscii(pPayload));
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), aSeq.getLength());
+ CPPUNIT_ASSERT(aSeq.getLength() == 4 || aSeq.getLength() == 5);
tools::Rectangle aInvalidationRect;
aInvalidationRect.setX(aSeq[0].toInt32());
aInvalidationRect.setY(aSeq[1].toInt32());
@@ -1045,7 +1045,7 @@ void ScTiledRenderingTest::testInvalidateOnInserRowCol()
comphelper::dispatchCommand(".uno:InsertRows", aArgs);
Scheduler::ProcessEventsToIdle();
CPPUNIT_ASSERT(aView.m_bInvalidateTiles);
- CPPUNIT_ASSERT_EQUAL(size_t(1), aView.m_aInvalidations.size());
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aView.m_aInvalidations.size());
CPPUNIT_ASSERT_EQUAL(tools::Rectangle(-75, 50985, 32212230, 63990), aView.m_aInvalidations[0]);
// move on the right
@@ -1062,7 +1062,7 @@ void ScTiledRenderingTest::testInvalidateOnInserRowCol()
comphelper::dispatchCommand(".uno:InsertColumns", aArgs);
Scheduler::ProcessEventsToIdle();
CPPUNIT_ASSERT(aView.m_bInvalidateTiles);
- CPPUNIT_ASSERT_EQUAL(size_t(1), aView.m_aInvalidations.size());
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aView.m_aInvalidations.size());
CPPUNIT_ASSERT_EQUAL(tools::Rectangle(253650, -15, 32212230, 63990), aView.m_aInvalidations[0]);
}
@@ -1739,7 +1739,7 @@ void ScTiledRenderingTest::testSheetChangeInvalidation()
pModelObj->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, awt::Key::PAGEDOWN | KEY_MOD1);
Scheduler::ProcessEventsToIdle();
CPPUNIT_ASSERT(aView1.m_bInvalidateTiles);
- CPPUNIT_ASSERT_EQUAL(size_t(1), aView1.m_aInvalidations.size());
+ CPPUNIT_ASSERT_EQUAL(size_t(3), aView1.m_aInvalidations.size());
CPPUNIT_ASSERT_EQUAL(tools::Rectangle(0, 0, 1310720, 268435456), aView1.m_aInvalidations[0]);
}
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index b54ef92a1410..41ee707ae31e 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -95,6 +95,7 @@
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#include <mtvelements.hxx>
+#include <sfx2/lokhelper.hxx>
using ::editeng::SvxBorderLine;
using namespace ::com::sun::star;
@@ -569,7 +570,8 @@ bool ScDocument::InsertTab(
SfxViewShell* pViewShell = SfxViewShell::GetFirst();
while (pViewShell)
{
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, "");
+ ScModelObj* pModel = ScModelObj::getImplementation(pViewShell->GetCurrentDocument());
+ SfxLokHelper::notifyDocumentSizeChanged(pViewShell, "", pModel);
pViewShell = SfxViewShell::GetNext(*pViewShell);
}
}
@@ -739,7 +741,8 @@ bool ScDocument::DeleteTab( SCTAB nTab )
SfxViewShell* pViewShell = SfxViewShell::GetFirst();
while (pViewShell)
{
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, "");
+ ScModelObj* pModel = ScModelObj::getImplementation(pViewShell->GetCurrentDocument());
+ SfxLokHelper::notifyDocumentSizeChanged(pViewShell, "", pModel);
pViewShell = SfxViewShell::GetNext(*pViewShell);
}
}
@@ -835,7 +838,8 @@ bool ScDocument::DeleteTabs( SCTAB nTab, SCTAB nSheets )
SfxViewShell* pViewShell = SfxViewShell::GetFirst();
while (pViewShell)
{
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, "");
+ ScModelObj* pModel = ScModelObj::getImplementation(pViewShell->GetCurrentDocument());
+ SfxLokHelper::notifyDocumentSizeChanged(pViewShell, "", pModel);
pViewShell = SfxViewShell::GetNext(*pViewShell);
}
}
@@ -886,7 +890,8 @@ bool ScDocument::RenameTab( SCTAB nTab, const OUString& rName, bool bExternalDoc
SfxViewShell* pViewShell = SfxViewShell::GetFirst();
while (pViewShell)
{
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, "");
+ ScModelObj* pModel = ScModelObj::getImplementation(pViewShell->GetCurrentDocument());
+ SfxLokHelper::notifyDocumentSizeChanged(pViewShell, "", pModel);
pViewShell = SfxViewShell::GetNext(*pViewShell);
}
}
diff --git a/sc/source/ui/docshell/docsh3.cxx b/sc/source/ui/docshell/docsh3.cxx
index c57c0ecb52b8..be2eb7bf0cbc 100644
--- a/sc/source/ui/docshell/docsh3.cxx
+++ b/sc/source/ui/docshell/docsh3.cxx
@@ -68,6 +68,7 @@
#include <comphelper/lok.hxx>
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
+#include <sfx2/lokhelper.hxx>
// Redraw - Notifications
@@ -173,7 +174,8 @@ void ScDocShell::PostPaint( const ScRangeList& rRanges, PaintPartFlags nPart, sa
SfxViewShell* pViewShell = SfxViewShell::GetFirst();
while (pViewShell)
{
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, "");
+ ScModelObj* pModel = ScModelObj::getImplementation(pViewShell->GetCurrentDocument());
+ SfxLokHelper::notifyDocumentSizeChanged(pViewShell, "", pModel);
pViewShell = SfxViewShell::GetNext(*pViewShell);
}
}
diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx
index ba97e144f19e..0e1ac5ec747b 100644
--- a/sc/source/ui/view/tabview.cxx
+++ b/sc/source/ui/view/tabview.cxx
@@ -2563,7 +2563,8 @@ OUString ScTabView::getRowColumnHeaders(const tools::Rectangle& rRectangle)
std::stringstream ss;
ss << aNewSize.Width() << ", " << aNewSize.Height();
OString sSize = ss.str().c_str();
- aViewData.GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, sSize.getStr());
+ ScModelObj* pModel = ScModelObj::getImplementation(aViewData.GetViewShell()->GetCurrentDocument());
+ SfxLokHelper::notifyDocumentSizeChanged(aViewData.GetViewShell(), sSize, pModel);
// New area extended to the bottom of the sheet after last row
// excluding overlapping area with aNewColArea
@@ -2706,8 +2707,8 @@ OUString ScTabView::getRowColumnHeaders(const tools::Rectangle& rRectangle)
std::stringstream ss;
ss << aNewSize.Width() << ", " << aNewSize.Height();
OString sSize = ss.str().c_str();
- aViewData.GetViewShell()->libreOfficeKitViewCallback(
- LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, sSize.getStr());
+ ScModelObj* pModel = ScModelObj::getImplementation(aViewData.GetViewShell()->GetCurrentDocument());
+ SfxLokHelper::notifyDocumentSizeChanged(aViewData.GetViewShell(), sSize, pModel);
}
// New area extended to the right of the sheet after last column
diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx
index ca9c6238dd8e..bfb776964f56 100644
--- a/sc/source/ui/view/tabview3.cxx
+++ b/sc/source/ui/view/tabview3.cxx
@@ -410,7 +410,8 @@ void ScTabView::SetCursor( SCCOL nPosX, SCROW nPosY, bool bNew )
std::stringstream ss;
ss << aNewSize.Width() << ", " << aNewSize.Height();
OString sSize = ss.str().c_str();
- aViewData.GetViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, sSize.getStr());
+ ScModelObj* pModel = ScModelObj::getImplementation(aViewData.GetViewShell()->GetCurrentDocument());
+ SfxLokHelper::notifyDocumentSizeChanged(aViewData.GetViewShell(), sSize, pModel);
// New area extended to the right of the sheet after last column
// including overlapping area with aNewRowArea
diff --git a/sc/source/ui/view/tabview5.cxx b/sc/source/ui/view/tabview5.cxx
index 3aabb1bb9f34..d98716d57aad 100644
--- a/sc/source/ui/view/tabview5.cxx
+++ b/sc/source/ui/view/tabview5.cxx
@@ -332,7 +332,8 @@ void ScTabView::TabChanged( bool bSameTabButMoved )
ss << aDocSize.Width() << ", " << aDocSize.Height();
OString sRect = ss.str().c_str();
ScTabViewShell* pViewShell = aViewData.GetViewShell();
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, sRect.getStr());
+ ScModelObj* pModel = ScModelObj::getImplementation(pViewShell->GetCurrentDocument());
+ SfxLokHelper::notifyDocumentSizeChanged(pViewShell, sRect, pModel);
}
}
}
diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx
index 0f2cf7bb309b..d9797587ae21 100644
--- a/sd/qa/unit/tiledrendering/tiledrendering.cxx
+++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx
@@ -255,7 +255,7 @@ static std::vector<OUString> lcl_convertSeparated(const OUString& rString, sal_U
static void lcl_convertRectangle(const OUString& rString, ::tools::Rectangle& rRectangle)
{
uno::Sequence<OUString> aSeq = comphelper::string::convertCommaSeparated(rString);
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), aSeq.getLength());
+ CPPUNIT_ASSERT(aSeq.getLength() == 4 || aSeq.getLength() == 5);
rRectangle.setX(aSeq[0].toInt32());
rRectangle.setY(aSeq[1].toInt32());
rRectangle.setWidth(aSeq[2].toInt32());
diff --git a/sd/source/core/drawdoc2.cxx b/sd/source/core/drawdoc2.cxx
index 91613f50c961..e4053d5afff4 100644
--- a/sd/source/core/drawdoc2.cxx
+++ b/sd/source/core/drawdoc2.cxx
@@ -61,6 +61,8 @@
#include <imapinfo.hxx>
#include <cusshow.hxx>
#include <undo/undomanager.hxx>
+#include <sfx2/lokhelper.hxx>
+#include <unomodel.hxx>
#include <DrawDocShell.hxx>
#include <FrameView.hxx>
@@ -414,7 +416,8 @@ void SdDrawDocument::InsertPage(SdrPage* pPage, sal_uInt16 nPos)
SfxViewShell* pViewShell = SfxViewShell::GetFirst();
while (pViewShell)
{
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, "");
+ SdXImpressDocument* pModel = SdXImpressDocument::getImplementation(this->getUnoModel());
+ SfxLokHelper::notifyDocumentSizeChanged(pViewShell, "", pModel);
pViewShell = SfxViewShell::GetNext(*pViewShell);
}
}
@@ -447,7 +450,8 @@ SdrPage* SdDrawDocument::RemovePage(sal_uInt16 nPgNum)
SfxViewShell* pViewShell = SfxViewShell::GetFirst();
while (pViewShell)
{
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, "");
+ SdXImpressDocument* pModel = SdXImpressDocument::getImplementation(this->getUnoModel());
+ SfxLokHelper::notifyDocumentSizeChanged(pViewShell, "", pModel);
pViewShell = SfxViewShell::GetNext(*pViewShell);
}
}
diff --git a/sd/source/ui/sidebar/SlideBackground.cxx b/sd/source/ui/sidebar/SlideBackground.cxx
index efa6defc1495..fb4d58008cbb 100644
--- a/sd/source/ui/sidebar/SlideBackground.cxx
+++ b/sd/source/ui/sidebar/SlideBackground.cxx
@@ -74,6 +74,8 @@
#include <svl/itemset.hxx>
#include <comphelper/lok.hxx>
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
+#include <unomodel.hxx>
+#include <sfx2/lokhelper.hxx>
using namespace ::com::sun::star;
@@ -1026,7 +1028,8 @@ IMPL_LINK_NOARG(SlideBackground, PaperSizeModifyHdl, ListBox&, void)
SfxViewShell* pViewShell = SfxViewShell::GetFirst();
while (pViewShell)
{
- pViewShell->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, "");
+ SdXImpressDocument* pModel = SdXImpressDocument::getImplementation(pViewShell->GetCurrentDocument());
+ SfxLokHelper::notifyDocumentSizeChanged(pViewShell, "", pModel);
pViewShell = SfxViewShell::GetNext(*pViewShell);
}
}
diff --git a/sfx2/source/view/lokhelper.cxx b/sfx2/source/view/lokhelper.cxx
index 664b2fb16afa..96b41737425c 100644
--- a/sfx2/source/view/lokhelper.cxx
+++ b/sfx2/source/view/lokhelper.cxx
@@ -221,6 +221,26 @@ void SfxLokHelper::notifyInvalidation(SfxViewShell const* pThisView, const OStri
pThisView->libreOfficeKitViewCallback(LOK_CALLBACK_INVALIDATE_TILES, aBuf.makeStringAndClear().getStr());
}
+void SfxLokHelper::notifyDocumentSizeChanged(SfxViewShell const* pThisView, const OString& rPayload, vcl::ITiledRenderable* pDoc, bool bInvalidateAll)
+{
+ if (!comphelper::LibreOfficeKit::isActive())
+ return;
+
+ if (!pDoc)
+ return;
+
+ if (bInvalidateAll)
+ {
+ for (int i = 0; i < pDoc->getParts(); ++i)
+ {
+ tools::Rectangle aRectangle(0, 0, 1000000000, 1000000000);
+ OString sPayload = aRectangle.toString() + OString(", ") + OString::number(i);
+ pThisView->libreOfficeKitViewCallback(LOK_CALLBACK_INVALIDATE_TILES, sPayload.getStr());
+ }
+ }
+ pThisView->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, rPayload.getStr());
+}
+
void SfxLokHelper::notifyVisCursorInvalidation(OutlinerViewShell const* pThisView, const OString& rRectangle)
{
OString sPayload;
diff --git a/sw/qa/extras/tiledrendering/tiledrendering.cxx b/sw/qa/extras/tiledrendering/tiledrendering.cxx
index a9ca888840eb..16373bbf2a67 100644
--- a/sw/qa/extras/tiledrendering/tiledrendering.cxx
+++ b/sw/qa/extras/tiledrendering/tiledrendering.cxx
@@ -259,7 +259,7 @@ void SwTiledRenderingTest::callbackImpl(int nType, const char* pPayload)
uno::Sequence<OUString> aSeq = comphelper::string::convertCommaSeparated(OUString::createFromAscii(pPayload));
if (OString("EMPTY") == pPayload)
return;
- CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), aSeq.getLength());
+ CPPUNIT_ASSERT(aSeq.getLength() == 4 || aSeq.getLength() == 5);
m_aInvalidation.setX(aSeq[0].toInt32());
m_aInvalidation.setY(aSeq[1].toInt32());
m_aInvalidation.setWidth(aSeq[2].toInt32());
diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx
index c0268da684d9..01757e3d4240 100644
--- a/sw/source/core/view/viewsh.cxx
+++ b/sw/source/core/view/viewsh.cxx
@@ -20,6 +20,7 @@
#include <config_features.h>
#include <com/sun/star/accessibility/XAccessible.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <sfx2/viewfrm.hxx>
#include <sfx2/progress.hxx>
#include <svx/srchdlg.hxx>
@@ -74,6 +75,7 @@
#include <wrtsh.hxx>
#include <DocumentSettingManager.hxx>
+#include <unotxdoc.hxx>
#include <view.hxx>
#include <PostItMgr.hxx>
#include <unotools/configmgr.hxx>
@@ -85,6 +87,7 @@
#include <LibreOfficeKit/LibreOfficeKitEnums.h>
#include <comphelper/lok.hxx>
#include <prevwpage.hxx>
+#include <sfx2/lokhelper.hxx>
#if !HAVE_FEATURE_DESKTOP
#include <vcl/sysdata.hxx>
@@ -1073,7 +1076,14 @@ void SwViewShell::SizeChgNotify()
std::stringstream ss;
ss << aDocSize.Width() + 2 * DOCUMENTBORDER << ", " << aDocSize.Height() + 2 * DOCUMENTBORDER;
OString sSize = ss.str().c_str();
- GetSfxViewShell()->libreOfficeKitViewCallback(LOK_CALLBACK_DOCUMENT_SIZE_CHANGED, sSize.getStr());
+
+ uno::Reference< css::lang::XUnoTunnel > xTunnel(GetSfxViewShell()->GetCurrentDocument(), uno::UNO_QUERY);
+ if(xTunnel.is())
+ {
+ SwXTextDocument* pXDoc = reinterpret_cast< SwXTextDocument * >(
+ sal::static_int_cast< sal_IntPtr >(xTunnel->getSomething(SwXTextDocument::getUnoTunnelId())));
+ SfxLokHelper::notifyDocumentSizeChanged(GetSfxViewShell(), sSize, pXDoc);
+ }
}
}
}