Blob Blame History Raw
From 143ffe8df3ee844c4022a8b4d6e3053a8d558f11 Mon Sep 17 00:00:00 2001
From: Mihai Varga <mihai.varga@collabora.com>
Date: Tue, 21 Jul 2015 18:49:21 +0300
Subject: [PATCH 071/398] gtktiledviewer: method for resetting all tiles

[ Miklos Vajna: The point of the change is that without this, part switching in
Calc does not work, as Calc does not invalidate everything after a part switch
(unlike Impress), and we suppose the right fix for this is to let the clients
throw away the tiles, rather than letting Calc send out invalidations, too. ]

Change-Id: Id368b955c54efb87ecf3d59278ddb5cdbb2e7856
Reviewed-on: https://gerrit.libreoffice.org/17267
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
(cherry picked from commit ed9d6ef1e647b574f58ba870d71a4291d958c0ad)
---
 include/LibreOfficeKit/LibreOfficeKitGtk.h          | 3 +++
 libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx | 1 +
 libreofficekit/source/gtk/lokdocview.cxx            | 8 ++++++++
 3 files changed, 12 insertions(+)

diff --git a/include/LibreOfficeKit/LibreOfficeKitGtk.h b/include/LibreOfficeKit/LibreOfficeKitGtk.h
index 962f9d9265bb..b98a85646e0e 100644
--- a/include/LibreOfficeKit/LibreOfficeKitGtk.h
+++ b/include/LibreOfficeKit/LibreOfficeKitGtk.h
@@ -63,6 +63,9 @@ char*                          lok_doc_view_get_part_name          (LOKDocView*
                                                                     int nPart);
 void                           lok_doc_view_set_partmode           (LOKDocView* pDocView,
                                                                     int nPartMode);
+
+void                           lok_doc_view_reset_view             (LOKDocView* pDocView);
+
 /// Sets if the viewer is actually an editor or not.
 void                           lok_doc_view_set_edit               (LOKDocView* pDocView,
                                                                     gboolean bEdit);
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index d40cceb291ed..8c43e9d68092 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -356,6 +356,7 @@ static void changePart( GtkWidget* pSelector, gpointer /* pItem */ )
     if (g_bPartSelectorBroadcast && pDocView)
     {
         lok_doc_view_set_part( LOK_DOC_VIEW(pDocView), nPart );
+        lok_doc_view_reset_view( LOK_DOC_VIEW(pDocView) );
     }
 }
 
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
index 5de795a1a961..27d597ae57e3 100644
--- a/libreofficekit/source/gtk/lokdocview.cxx
+++ b/libreofficekit/source/gtk/lokdocview.cxx
@@ -1529,6 +1529,14 @@ lok_doc_view_set_partmode(LOKDocView* pDocView,
     priv->m_pDocument->pClass->setPartMode( priv->m_pDocument, nPartMode );
 }
 
+SAL_DLLPUBLIC_EXPORT void
+lok_doc_view_reset_view(LOKDocView* pDocView)
+{
+    LOKDocViewPrivate *priv = static_cast<LOKDocViewPrivate*>(lok_doc_view_get_instance_private (pDocView));
+    priv->m_aTileBuffer.resetAllTiles();
+    gtk_widget_queue_draw(GTK_WIDGET(pDocView));
+}
+
 /**
  * lok_doc_view_set_edit:
  * @pDocView: The #LOKDocView instance
-- 
2.12.0