Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 299f70e2888d4b47da7430219e127274 > files > 1

seahorse-plugins-2.30.1-5.fc14.src.rpm

diff -up seahorse-plugins-2.30.1/plugins/applet/seahorse-applet.c.clipboard seahorse-plugins-2.30.1/plugins/applet/seahorse-applet.c
--- seahorse-plugins-2.30.1/plugins/applet/seahorse-applet.c.clipboard	2010-04-16 21:00:34.000000000 -0400
+++ seahorse-plugins-2.30.1/plugins/applet/seahorse-applet.c	2010-11-03 21:10:16.471241996 -0400
@@ -151,6 +151,9 @@ typedef struct _SeahorseAppletPrivate {
     GtkClipboard        *board;
     GtkWidget           *menu;
     SeahorseTextType    clipboard_contents;
+
+    gulong clipboard_owner_change_id;
+    gulong primary_owner_change_id;
 } SeahorseAppletPrivate;
 
 #define SEAHORSE_APPLET_GET_PRIVATE(obj)  (G_TYPE_INSTANCE_GET_PRIVATE ((obj), SEAHORSE_TYPE_APPLET, SeahorseAppletPrivate))
@@ -873,6 +876,7 @@ seahorse_applet_init (SeahorseApplet *ap
 {
     SeahorseAppletPrivate *priv;
     GdkAtom atom;
+    GdkDisplay *display;
     GtkClipboard *board;
     
     priv = SEAHORSE_APPLET_GET_PRIVATE (applet);
@@ -896,16 +900,18 @@ seahorse_applet_init (SeahorseApplet *ap
 
     /* Setup Clipboard Handling */
     atom = gdk_atom_intern ("CLIPBOARD", FALSE);
-    board = gtk_clipboard_get (atom);
+    display = gtk_widget_get_display (GTK_WIDGET (applet));
+    board = gtk_clipboard_get_for_display (display, atom);
     handle_clipboard_owner_change (board, NULL, applet);
-    g_signal_connect (board, "owner-change",
-                      G_CALLBACK (handle_clipboard_owner_change), applet);
+    priv->clipboard_owner_change_id =
+      g_signal_connect (board, "owner-change",
+                        G_CALLBACK (handle_clipboard_owner_change), applet);
     
     atom = gdk_atom_intern ("PRIMARY", FALSE);
-    board = gtk_clipboard_get (atom);
-    g_signal_connect (board, "owner-change",
-                      G_CALLBACK (handle_clipboard_owner_change), applet);
-                      
+    board = gtk_clipboard_get_for_display (display, atom);
+    priv->primary_owner_change_id =
+      g_signal_connect (board, "owner-change",
+                        G_CALLBACK (handle_clipboard_owner_change), applet);
 }
 
 static void
@@ -944,6 +950,20 @@ static void
 seahorse_applet_finalize (GObject *object)
 {
     SeahorseAppletPrivate *priv = SEAHORSE_APPLET_GET_PRIVATE (object);
+    GtkClipboard *board;
+    GdkDisplay *display;
+
+    display = gtk_widget_get_display (GTK_WIDGET (object));
+
+    if (priv->clipboard_owner_change_id) {
+        g_signal_handler_disconnect (gtk_clipboard_get_for_display (display, GDK_SELECTION_CLIPBOARD),
+                                     priv->clipboard_owner_change_id);
+    }
+
+    if (priv->primary_owner_change_id) {
+        g_signal_handler_disconnect (gtk_clipboard_get_for_display (display, GDK_SELECTION_PRIMARY),
+                                     priv->primary_owner_change_id);
+    }
 
     if (priv) {
         if (priv->menu)