diff options
author | Vincent Sanders <vince@kyllikki.org> | 2019-10-13 01:52:22 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2019-10-13 01:52:22 +0100 |
commit | 6e31dcaec4a88ec1da3ae60e114fa256b77e5597 (patch) | |
tree | 01cdaa728e05ee8ca8e217707eee5c10c3bc804d /frontends/gtk/scaffolding.c | |
parent | c82049eb84250330b28b29fc327d12a4b5f8a77f (diff) | |
download | netsurf-6e31dcaec4a88ec1da3ae60e114fa256b77e5597.tar.gz netsurf-6e31dcaec4a88ec1da3ae60e114fa256b77e5597.tar.bz2 |
ensure gtk scaffolding destruction does not create memory errors
Diffstat (limited to 'frontends/gtk/scaffolding.c')
-rw-r--r-- | frontends/gtk/scaffolding.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c index 001cb91fc..ccf3fcb45 100644 --- a/frontends/gtk/scaffolding.c +++ b/frontends/gtk/scaffolding.c @@ -75,6 +75,9 @@ struct nsgtk_scaffolding { /** tab widget holding displayed pages */ GtkNotebook *notebook; + /** handler id for tabs remove callback */ + gulong tabs_remove_handler_id; + /** menu bar hierarchy */ struct nsgtk_bar_submenu *menu_bar; @@ -171,8 +174,6 @@ popup_menu_show(struct nsgtk_popup_menu *menu, bool nav, bool cnp) } -/* event handlers and support functions for them */ - /** * resource cleanup function for window destruction. * @@ -207,6 +208,8 @@ static void scaffolding_window_destroy(GtkWidget *widget, gpointer data) nsgtk_popup_menu_destroy(gs->popup_menu); nsgtk_link_menu_destroy(gs->link_menu); + g_signal_handler_disconnect(gs->notebook, gs->tabs_remove_handler_id); + free(gs); if (scaf_list == NULL) { @@ -425,6 +428,8 @@ nsgtk_window_tabs_remove(GtkNotebook *notebook, guint page_num, struct nsgtk_scaffolding *gs) { + gboolean visible; + /* if the scaffold is being destroyed it is not useful to * update the state, further many of the widgets may have * already been destroyed. @@ -439,7 +444,7 @@ nsgtk_window_tabs_remove(GtkNotebook *notebook, return; } - gboolean visible = gtk_notebook_get_show_tabs(gs->notebook); + visible = gtk_notebook_get_show_tabs(gs->notebook); g_object_set(gs->menu_bar->view_submenu->tabs_menuitem, "visible", visible, NULL); g_object_set(gs->burger_menu->view_submenu->tabs_menuitem, @@ -1548,7 +1553,7 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel) "page-added", G_CALLBACK(nsgtk_window_tabs_add), gs); - g_signal_connect_after(gs->notebook, + gs->tabs_remove_handler_id = g_signal_connect_after(gs->notebook, "page-removed", G_CALLBACK(nsgtk_window_tabs_remove), gs); |