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-28 08:54:20 +0000
commit538ea31c992acb9d47ffd783543e50e149272aac (patch)
tree74712f9afb17a6dd8cbafae0dd67a0326440910d
parentfa1b59710863b797d32273c58f6ab116d3ab5ad6 (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>
-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 58139a53c50d..37cf7e2dff42 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);