summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-07-28 09:52:25 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-07-29 10:09:40 +0200
commitd42992ac86e1feb5412ab7c496a8f717d5dd8225 (patch)
treead14523079f66fa10a68dffb96eb370e76a41574
parentf223b686b7014995c95619c9c0680d6cb0c89da1 (diff)
gtktiledviewer: quit after the last view is destroyed
To allow debugging crash-on-exit problems. Change-Id: Ie54a8391e721c3ba8034b4618dd30733bac97a27 Reviewed-on: https://gerrit.libreoffice.org/27605 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org> (cherry picked from commit 538ea31c992acb9d47ffd783543e50e149272aac)
-rw-r--r--libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx17
1 files changed, 16 insertions, 1 deletions
diff --git a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
index 5aeea199541d..034e15fd6f99 100644
--- a/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
+++ b/libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx
@@ -1210,13 +1210,28 @@ static void openDocumentCallback (GObject* source_object, GAsyncResult* res, gpo
gtk_widget_hide(rWindow.m_pProgressBar);
}
+/**
+ * Wrapper around gtk_widget_destroy() that quits when the last tiled window is
+ * destroyed.
+ */
+static void destroyWindow(GtkWidget* pWidget)
+{
+ gtk_widget_destroy(pWidget);
+ auto it = g_aWindows.find(pWidget);
+ if (it != g_aWindows.end())
+ g_aWindows.erase(it);
+
+ if (g_aWindows.empty())
+ gtk_main_quit();
+}
+
/// Creates the GtkWindow that has main widget as children and registers it in the window map.
static GtkWidget* createWindow(TiledWindow& rWindow)
{
GtkWidget *pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(pWindow), "LibreOfficeKit GTK Tiled Viewer");
gtk_window_set_default_size(GTK_WINDOW(pWindow), 1024, 768);
- g_signal_connect(pWindow, "destroy", G_CALLBACK(gtk_widget_destroy), pWindow);
+ g_signal_connect(pWindow, "destroy", G_CALLBACK(destroyWindow), pWindow);
rWindow.m_pVBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(pWindow), rWindow.m_pVBox);