From fe87a31885dc870a9a8e4c4dcb105a4a5627164f Mon Sep 17 00:00:00 2001 From: Jan Holesovsky Date: Mon, 5 Dec 2016 22:45:43 +0100 Subject: Invalidate the entire sheet after having inserted the image. This is a hack; but the ViewObjectContacts are unreliable with tiled rendering, and we are missing invalidates due to that. Change-Id: Ia2475d4a042be1db0ea6f170cf66f271397ee299 Reviewed-on: https://gerrit.libreoffice.org/31659 Reviewed-by: Jan Holesovsky Tested-by: Jan Holesovsky --- sc/source/ui/drawfunc/fuins1.cxx | 27 +++++++++++++++++++++++++++ sc/source/ui/view/tabvwsh4.cxx | 25 ++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/sc/source/ui/drawfunc/fuins1.cxx b/sc/source/ui/drawfunc/fuins1.cxx index c7fd4c96c8ae..9dc65bf03c61 100644 --- a/sc/source/ui/drawfunc/fuins1.cxx +++ b/sc/source/ui/drawfunc/fuins1.cxx @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -41,6 +42,10 @@ #include "sc.hrc" #include "globstr.hrc" +#include +#include +#include + using namespace ::com::sun::star; void ScLimitSizeOnDrawPage( Size& rSize, Point& rPos, const Size& rPage ) @@ -251,6 +256,28 @@ FuInsertGraphic::FuInsertGraphic( ScTabViewShell* pViewSh, if ( nError == GRFILTER_OK ) { lcl_InsertGraphic( aGraphic, aFileName, aFilterName, bAsLink, true, pViewSh, pWindow, pView ); + + // FIXME HACK: The ViewObjectContact sdr thing is not set up well + // enough for the invalidate to work here automagically, because + // we set it up for each tile, and it does not survive for too + // long. Luckily for inserting an image, we can live with a full + // invalidate, so let's just do it for now. + if (comphelper::LibreOfficeKit::isActive()) + { + std::stringstream ss; + ss << "EMPTY"; + if (comphelper::LibreOfficeKit::isPartInInvalidation()) + ss << ", " << pViewSh->getPart(); + OString aPayload = ss.str().c_str(); + + SfxViewShell* pCurView = SfxViewShell::GetFirst(); + while (pCurView) + { + pCurView->libreOfficeKitViewCallback(LOK_CALLBACK_INVALIDATE_TILES, aPayload.getStr()); + + pCurView = SfxViewShell::GetNext(*pCurView); + } + } } } else diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx index 4ef54ad4bce0..aa6f7634fc8f 100644 --- a/sc/source/ui/view/tabvwsh4.cxx +++ b/sc/source/ui/view/tabvwsh4.cxx @@ -572,7 +572,30 @@ void ScTabViewShell::UpdateDrawShell() SdrView* pDrView = GetSdrView(); if ( pDrView && !pDrView->AreObjectsMarked() && !IsDrawSelMode() ) - SetDrawShell( false ); + { + SetDrawShell(false); + + // FIXME HACK: The ViewObjectContact sdr thing is not set up well + // enough for the invalidate to work here automagically, because + // we set it up for each tile, and it does not survive for too + // long. + if (comphelper::LibreOfficeKit::isActive()) + { + std::stringstream ss; + ss << "EMPTY"; + if (comphelper::LibreOfficeKit::isPartInInvalidation()) + ss << ", " << getPart(); + OString aPayload = ss.str().c_str(); + + SfxViewShell* pCurView = SfxViewShell::GetFirst(); + while (pCurView) + { + pCurView->libreOfficeKitViewCallback(LOK_CALLBACK_INVALIDATE_TILES, aPayload.getStr()); + + pCurView = SfxViewShell::GetNext(*pCurView); + } + } + } } void ScTabViewShell::SetDrawShellOrSub() -- cgit