diff options
author | Matthias Clasen <matthiasc@src.gnome.org> | 2007-12-28 19:55:37 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2007-12-28 19:55:37 +0000 |
commit | 88fa693540116691b485a36e01c07d8a8abe90d0 (patch) | |
tree | f41755f76ac5f11f5752b4930a893f6a461bf4e6 /gtk/gtkclipboard.c | |
parent | 2227e2993aa889b05986427ae583854e50e6743d (diff) | |
download | gtk+-88fa693540116691b485a36e01c07d8a8abe90d0.tar.gz |
Make finalizer more robust
svn path=/trunk/; revision=19283
Diffstat (limited to 'gtk/gtkclipboard.c')
-rw-r--r-- | gtk/gtkclipboard.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/gtk/gtkclipboard.c b/gtk/gtkclipboard.c index 920aad923a..2bc781afbd 100644 --- a/gtk/gtkclipboard.c +++ b/gtk/gtkclipboard.c @@ -193,26 +193,31 @@ static void gtk_clipboard_finalize (GObject *object) { GtkClipboard *clipboard; - GtkWidget *clipboard_widget; - GSList *clipboards; + GtkWidget *clipboard_widget = NULL; + GSList *clipboards = NULL; clipboard = GTK_CLIPBOARD (object); - clipboards = g_object_get_data (G_OBJECT (clipboard->display), "gtk-clipboard-list"); - if (g_slist_index (clipboards, clipboard) >= 0) - g_warning ("GtkClipboard prematurely finalized"); + if (clipboard->display) + { + clipboards = g_object_get_data (G_OBJECT (clipboard->display), "gtk-clipboard-list"); + + if (g_slist_index (clipboards, clipboard) >= 0) + g_warning ("GtkClipboard prematurely finalized"); - /* don't use get_clipboard_widget() here because it would create the - * widget if it doesn't exist. - */ - clipboard_widget = g_object_get_data (G_OBJECT (clipboard->display), - "gtk-clipboard-widget"); + clipboards = g_slist_remove (clipboards, clipboard); + + g_object_set_data (G_OBJECT (clipboard->display), "gtk-clipboard-list", + clipboards); + + /* don't use get_clipboard_widget() here because it would create the + * widget if it doesn't exist. + */ + clipboard_widget = g_object_get_data (G_OBJECT (clipboard->display), + "gtk-clipboard-widget"); + } clipboard_unset (clipboard); - - clipboards = g_object_get_data (G_OBJECT (clipboard->display), "gtk-clipboard-list"); - clipboards = g_slist_remove (clipboards, clipboard); - g_object_set_data (G_OBJECT (clipboard->display), I_("gtk-clipboard-list"), clipboards); if (clipboard->store_loop && g_main_loop_is_running (clipboard->store_loop)) g_main_loop_quit (clipboard->store_loop); |