diff --git a/thunar/thunar-clipboard-manager.c b/thunar/thunar-clipboard-manager.c index f5dceca..0d7e92c 100644 --- a/thunar/thunar-clipboard-manager.c +++ b/thunar/thunar-clipboard-manager.c @@ -59,6 +59,7 @@ enum static void thunar_clipboard_manager_finalize (GObject *object); +static void thunar_clipboard_manager_dispose (GObject *object); static void thunar_clipboard_manager_get_property (GObject *object, guint prop_id, GValue *value, @@ -136,6 +137,7 @@ thunar_clipboard_manager_class_init (ThunarClipboardManagerClass *klass) GObjectClass *gobject_class; gobject_class = G_OBJECT_CLASS (klass); + gobject_class->dispose = thunar_clipboard_manager_dispose; gobject_class->finalize = thunar_clipboard_manager_finalize; gobject_class->get_property = thunar_clipboard_manager_get_property; @@ -180,6 +182,27 @@ thunar_clipboard_manager_init (ThunarClipboardManager *manager) static void +thunar_clipboard_manager_dispose (GObject *object) +{ + ThunarClipboardManager *manager = THUNAR_CLIPBOARD_MANAGER (object); + + /* store the clipboard if we still own it and a clipboard + * manager is running (gtk_clipboard_store checks this) */ + if (gtk_clipboard_get_owner (manager->clipboard) == object + && manager->files != NULL) + { + gtk_clipboard_set_can_store (manager->clipboard, clipboard_targets, + G_N_ELEMENTS (clipboard_targets)); + + gtk_clipboard_store (manager->clipboard); + } + + (*G_OBJECT_CLASS (thunar_clipboard_manager_parent_class)->dispose) (object); +} + + + +static void thunar_clipboard_manager_finalize (GObject *object) { ThunarClipboardManager *manager = THUNAR_CLIPBOARD_MANAGER (object); @@ -533,6 +556,9 @@ thunar_clipboard_manager_get_for_display (GdkDisplay *display) g_signal_connect (G_OBJECT (manager->clipboard), "owner-change", G_CALLBACK (thunar_clipboard_manager_owner_changed), manager); + /* look for usable data on the clipboard */ + thunar_clipboard_manager_owner_changed (manager->clipboard, NULL, manager); + return manager; }