diff options
author | Jan Holesovsky <kendy@collabora.com> | 2016-12-05 22:45:43 +0100 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2016-12-06 08:05:33 +0000 |
commit | fe87a31885dc870a9a8e4c4dcb105a4a5627164f (patch) | |
tree | f5e7ab265ccddd5ca9fb225530bdceb8acfa5c57 | |
parent | da54ed01e4814290299ebf6a0c5d472cb827f77d (diff) |
Invalidate the entire sheet after having inserted the image.cp-5.1-14
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 <kendy@collabora.com>
Tested-by: Jan Holesovsky <kendy@collabora.com>
-rw-r--r-- | sc/source/ui/drawfunc/fuins1.cxx | 27 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwsh4.cxx | 25 |
2 files changed, 51 insertions, 1 deletions
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 <svx/svdpage.hxx> #include <svx/svdpagv.hxx> #include <svx/svdview.hxx> +#include <svx/svdundo.hxx> #include <svx/linkwarn.hxx> #include <vcl/graphicfilter.hxx> #include <svl/stritem.hxx> @@ -41,6 +42,10 @@ #include "sc.hrc" #include "globstr.hrc" +#include <LibreOfficeKit/LibreOfficeKitEnums.h> +#include <comphelper/lok.hxx> +#include <sfx2/lokhelper.hxx> + 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() |