summaryrefslogtreecommitdiff
path: root/gtk/gtkclipboard.c
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2007-12-28 19:55:37 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2007-12-28 19:55:37 +0000
commit88fa693540116691b485a36e01c07d8a8abe90d0 (patch)
treef41755f76ac5f11f5752b4930a893f6a461bf4e6 /gtk/gtkclipboard.c
parent2227e2993aa889b05986427ae583854e50e6743d (diff)
downloadgtk+-88fa693540116691b485a36e01c07d8a8abe90d0.tar.gz
Make finalizer more robust
svn path=/trunk/; revision=19283
Diffstat (limited to 'gtk/gtkclipboard.c')
-rw-r--r--gtk/gtkclipboard.c33
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);