From: <ne...@se...> - 2006-11-19 18:12:08
|
Author: dsilvers Date: Sun Nov 19 18:11:58 2006 New Revision: 3062 URL: http://svn.semichrome.net?rev=3D3062&view=3Drev Log: Destruction of gui_window and gtk_scaffold stand a better chance of cleanin= g up some more Modified: branches/dsilvers/gtk-frames/gtk/gtk_scaffolding.c branches/dsilvers/gtk-frames/gtk/gtk_scaffolding.h branches/dsilvers/gtk-frames/gtk/gtk_window.c Modified: branches/dsilvers/gtk-frames/gtk/gtk_scaffolding.c URL: http://svn.semichrome.net/branches/dsilvers/gtk-frames/gtk/gtk_scaffol= ding.c?rev=3D3062&r1=3D3061&r2=3D3062&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- branches/dsilvers/gtk-frames/gtk/gtk_scaffolding.c (original) +++ branches/dsilvers/gtk-frames/gtk/gtk_scaffolding.c Sun Nov 19 18:11:58 = 2006 @@ -62,6 +62,7 @@ =20 int throb_frame; struct gui_window *top_level; + int being_destroyed; }; =20 struct gtk_history_window { @@ -182,15 +183,28 @@ void nsgtk_window_destroy_event(GtkWidget *widget, gpointer data) { struct gtk_scaffolding *g =3D data; - =20 + LOG(("Being Destroyed =3D %d", g->being_destroyed)); gtk_widget_destroy(GTK_WIDGET(g->history_window->window)); gtk_widget_destroy(GTK_WIDGET(g->window)); =20 if (--open_windows =3D=3D 0) netsurf_quit =3D true; - - gui_window_destroy(g->top_level); -} + =20 + if (!g->being_destroyed) { + g->being_destroyed =3D 1; + gui_window_destroy(g->top_level); + } +} + +void nsgtk_scaffolding_destroy(nsgtk_scaffolding *scaffold) +{ + /* Our top_level has asked us to die */ + LOG(("Being Destroyed =3D %d", scaffold->being_destroyed)); + if (scaffold->being_destroyed) return; + scaffold->being_destroyed =3D 1; + nsgtk_window_destroy_event(0, scaffold); +} + =20 void nsgtk_window_update_back_forward(struct gtk_scaffolding *g) { @@ -683,7 +697,9 @@ =20 /* set up the menu signal handlers */ nsgtk_attach_menu_handlers(g->xml, g); - + =20 + g->being_destroyed =3D 0; + =20 /* finally, show the window. */ gtk_widget_show(GTK_WIDGET(g->window)); =20 Modified: branches/dsilvers/gtk-frames/gtk/gtk_scaffolding.h URL: http://svn.semichrome.net/branches/dsilvers/gtk-frames/gtk/gtk_scaffol= ding.h?rev=3D3062&r1=3D3061&r2=3D3062&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- branches/dsilvers/gtk-frames/gtk/gtk_scaffolding.h (original) +++ branches/dsilvers/gtk-frames/gtk/gtk_scaffolding.h Sun Nov 19 18:11:58 = 2006 @@ -20,4 +20,6 @@ =20 void nsgtk_attach_toplevel_viewport(nsgtk_scaffolding *g, GtkViewport *vp); =20 +void nsgtk_scaffolding_destroy(nsgtk_scaffolding *scaffold); + #endif /* NETSURF_GTK_SCAFFOLDING_H */ Modified: branches/dsilvers/gtk-frames/gtk/gtk_window.c URL: http://svn.semichrome.net/branches/dsilvers/gtk-frames/gtk/gtk_window.= c?rev=3D3062&r1=3D3061&r2=3D3062&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- branches/dsilvers/gtk-frames/gtk/gtk_window.c (original) +++ branches/dsilvers/gtk-frames/gtk/gtk_window.c Sun Nov 19 18:11:58 2006 @@ -332,6 +332,10 @@ =20 LOG(("Destroy")); =20 + /* If we're a top-level gui_window, destroy our scaffold */ + if (g->scrolledwindow =3D=3D 0) + nsgtk_scaffolding_destroy(g->scaffold); + =20 free(g); =20 } |