Blame SOURCES/0003-rhbz-1444437-gnome-documents-finalize-may-not-occur-.patch

dc0b3e
From 19d92c9c354465b40403f6cccd48ce62ea8e7b04 Mon Sep 17 00:00:00 2001
f325b2
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
f325b2
Date: Fri, 5 May 2017 14:34:51 +0100
dc0b3e
Subject: [PATCH 3/5] rhbz#1444437 gnome-documents finalize may not occur
f325b2
 immediately
f325b2
MIME-Version: 1.0
f325b2
Content-Type: text/plain; charset=UTF-8
f325b2
Content-Transfer-Encoding: 8bit
f325b2
f325b2
when LOK Widget is destroyed, it may instead happen during GC of javascript,
f325b2
like in the in gnome-documents case, but "destroy" will be called promptly. So
f325b2
close documents and office in destroy, not finalize
f325b2
dc0b3e
Change-Id: I1dd7b828839894cb2d87f5c087194fe458ca22f0
f325b2
Reviewed-on: https://gerrit.libreoffice.org/37398
f325b2
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
f325b2
Tested-by: Caolán McNamara <caolanm@redhat.com>
f325b2
(cherry picked from commit c45660df336a640f0f9d4290b881548d25c9db9d)
f325b2
---
f325b2
 libreofficekit/source/gtk/lokdocview.cxx | 17 +++++++++++++++--
f325b2
 1 file changed, 15 insertions(+), 2 deletions(-)
f325b2
f325b2
diff --git a/libreofficekit/source/gtk/lokdocview.cxx b/libreofficekit/source/gtk/lokdocview.cxx
dc0b3e
index a08d93e..18985d5 100644
f325b2
--- a/libreofficekit/source/gtk/lokdocview.cxx
f325b2
+++ b/libreofficekit/source/gtk/lokdocview.cxx
dc0b3e
@@ -2574,9 +2574,12 @@ static gboolean lok_doc_view_draw (GtkWidget* pWidget, cairo_t* pCairo)
f325b2
     return FALSE;
f325b2
 }
f325b2
 
f325b2
-static void lok_doc_view_finalize (GObject* object)
f325b2
+//rhbz#1444437 finalize may not occur immediately when this widget is destroyed
f325b2
+//it may happen during GC of javascript, e.g. in gnome-documents but "destroy"
f325b2
+//will be called promptly, so close documents in destroy, not finalize
f325b2
+static void lok_doc_view_destroy (GtkWidget* widget)
f325b2
 {
f325b2
-    LOKDocView* pDocView = LOK_DOC_VIEW (object);
f325b2
+    LOKDocView* pDocView = LOK_DOC_VIEW (widget);
f325b2
     LOKDocViewPrivate& priv = getPrivate(pDocView);
f325b2
 
dc0b3e
     // Ignore notifications sent to this view on shutdown.
dc0b3e
@@ -2599,6 +2602,15 @@ static void lok_doc_view_finalize (GObject* object)
dc0b3e
         if (priv->m_pOffice)
dc0b3e
             priv->m_pOffice->pClass->destroy (priv->m_pOffice);
dc0b3e
     }
f325b2
+
f325b2
+    GTK_WIDGET_CLASS (lok_doc_view_parent_class)->destroy (widget);
f325b2
+}
f325b2
+
f325b2
+static void lok_doc_view_finalize (GObject* object)
f325b2
+{
f325b2
+    LOKDocView* pDocView = LOK_DOC_VIEW (object);
f325b2
+    LOKDocViewPrivate& priv = getPrivate(pDocView);
f325b2
+
f325b2
     delete priv.m_pImpl;
f325b2
     priv.m_pImpl = nullptr;
f325b2
 
dc0b3e
@@ -2649,6 +2661,7 @@ static void lok_doc_view_class_init (LOKDocViewClass* pClass)
f325b2
     pWidgetClass->key_press_event = signalKey;
f325b2
     pWidgetClass->key_release_event = signalKey;
f325b2
     pWidgetClass->motion_notify_event = lok_doc_view_signal_motion;
f325b2
+    pWidgetClass->destroy = lok_doc_view_destroy;
f325b2
 
f325b2
     /**
f325b2
      * LOKDocView:lopath:
f325b2
-- 
f325b2
2.9.3
f325b2