diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-07-28 09:52:25 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-07-29 10:09:40 +0200 |
commit | d42992ac86e1feb5412ab7c496a8f717d5dd8225 (patch) | |
tree | ad14523079f66fa10a68dffb96eb370e76a41574 /libreofficekit | |
parent | f223b686b7014995c95619c9c0680d6cb0c89da1 (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)
Diffstat (limited to 'libreofficekit')
-rw-r--r-- | libreofficekit/qa/gtktiledviewer/gtktiledviewer.cxx | 17 |
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); |