summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@collabora.com>2016-12-05 22:45:43 +0100
committerJan Holesovsky <kendy@collabora.com>2016-12-06 08:05:33 +0000
commitfe87a31885dc870a9a8e4c4dcb105a4a5627164f (patch)
treef5e7ab265ccddd5ca9fb225530bdceb8acfa5c57
parentda54ed01e4814290299ebf6a0c5d472cb827f77d (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.cxx27
-rw-r--r--sc/source/ui/view/tabvwsh4.cxx25
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()