[vinagre] Fixed clipboard



commit de6bdee50572f135f69f9cae1742127af3e9ea8e
Author: Jonh Wendell <jwendell gnome org>
Date:   Thu May 28 14:09:23 2009 -0300

    Fixed clipboard
---
 src/vinagre-vnc-tab.c        |   39 ++++++++++++++++++++++++++++++++++++++
 src/vinagre-window-private.h |    2 -
 src/vinagre-window.c         |   43 ------------------------------------------
 3 files changed, 39 insertions(+), 45 deletions(-)

diff --git a/src/vinagre-vnc-tab.c b/src/vinagre-vnc-tab.c
index 6f30579..f731340 100644
--- a/src/vinagre-vnc-tab.c
+++ b/src/vinagre-vnc-tab.c
@@ -40,6 +40,7 @@ struct _VinagreVncTabPrivate
   GSList     *connected_actions, *initialized_actions;
   GtkWidget  *viewonly_button, *scaling_button;
   GtkAction  *scaling_action, *viewonly_action, *original_size_action;
+  gulong     signal_clipboard;
 };
 
 G_DEFINE_TYPE (VinagreVncTab, vinagre_vnc_tab, VINAGRE_TYPE_TAB)
@@ -169,6 +170,15 @@ vinagre_vnc_tab_dispose (GObject *object)
       vnc_tab->priv->initialized_actions = NULL;
     }
 
+  if (vnc_tab->priv->signal_clipboard != 0)
+    {
+      GtkClipboard  *cb = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+
+      g_signal_handler_disconnect (cb,
+				   vnc_tab->priv->signal_clipboard);
+      vnc_tab->priv->signal_clipboard = 0;
+    }
+
   G_OBJECT_CLASS (vinagre_vnc_tab_parent_class)->dispose (object);
 }
 
@@ -743,9 +753,30 @@ setup_toolbar (VinagreVncTab *vnc_tab)
 }
 
 static void
+vnc_tab_clipboard_cb (GtkClipboard *cb, GdkEvent *event, VinagreVncTab *vnc_tab)
+{
+  VinagreTab *tab = VINAGRE_TAB (vnc_tab);
+  gchar *text;
+
+  if (vinagre_notebook_get_active_tab (vinagre_tab_get_notebook (tab)) != tab)
+    return;
+
+  if (VINAGRE_IS_TAB (gtk_clipboard_get_owner (cb)))
+    return;
+
+  text = gtk_clipboard_wait_for_text (cb);
+  if (!text)
+    return;
+
+  vinagre_vnc_tab_paste_text (vnc_tab, text);
+  g_free (text);
+}
+
+static void
 vinagre_vnc_tab_init (VinagreVncTab *vnc_tab)
 {
   GtkAction *action;
+  GtkClipboard *cb;
 
   vnc_tab->priv = VINAGRE_VNC_TAB_GET_PRIVATE (vnc_tab);
   vnc_tab->priv->clipboard_str = NULL;
@@ -813,6 +844,14 @@ vinagre_vnc_tab_init (VinagreVncTab *vnc_tab)
 		    G_CALLBACK (vnc_desktop_resize_cb),
 		    vnc_tab);
 
+  /* Setup the clipboard */
+  cb = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+  vnc_tab->priv->signal_clipboard =  g_signal_connect (cb,
+						       "owner-change",
+						       G_CALLBACK (vnc_tab_clipboard_cb),
+						       vnc_tab);
+
+
   gtk_widget_show_all (GTK_WIDGET (vnc_tab));
 }
 
diff --git a/src/vinagre-window-private.h b/src/vinagre-window-private.h
index aaa2ed5..549fdce 100644
--- a/src/vinagre-window-private.h
+++ b/src/vinagre-window-private.h
@@ -67,8 +67,6 @@ struct _VinagreWindowPrivate
   gboolean        toolbar_visible;
   gboolean        statusbar_visible;
   gboolean        fav_panel_visible;
-
-  gulong	  signal_clipboard;
 };
 
 
diff --git a/src/vinagre-window.c b/src/vinagre-window.c
index f880718..00d6295 100644
--- a/src/vinagre-window.c
+++ b/src/vinagre-window.c
@@ -66,15 +66,6 @@ vinagre_window_dispose (GObject *object)
       window->priv->manager = NULL;
     }
 
-  if (window->priv->signal_clipboard != 0)
-    {
-      GtkClipboard  *cb = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
-
-      g_signal_handler_disconnect (cb,
-				   window->priv->signal_clipboard);
-      window->priv->signal_clipboard = 0;
-    }
-
   if (window->priv->update_recents_menu_ui_id != 0)
     {
       GtkRecentManager *recent_manager = gtk_recent_manager_get_default ();
@@ -769,39 +760,6 @@ create_notebook (VinagreWindow *window)
   gtk_widget_show (GTK_WIDGET (window->priv->notebook));
 }
 
-/*
-static void
-vinagre_window_clipboard_cb (GtkClipboard *cb, GdkEvent *event, VinagreWindow *window)
-{
-  gchar *text;
-
-  if (!window->priv->active_tab)
-    return;
-
-  if (gtk_clipboard_get_owner (cb) == G_OBJECT (window->priv->active_tab))
-    return;
-
-  text = gtk_clipboard_wait_for_text (cb);
-  if (!text)
-    return;
-
-//  vinagre_tab_paste_text (VINAGRE_TAB (window->priv->active_tab), text);
-  g_free (text);
-}
-
-static void
-vinagre_window_init_clipboard (VinagreWindow *window)
-{
-  GtkClipboard *cb;
-
-  cb = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
-  window->priv->signal_clipboard = g_signal_connect (cb,
-						     "owner-change",
-						     G_CALLBACK (vinagre_window_clipboard_cb),
-						     window);
-}
-*/
-
 static void
 vinagre_window_init (VinagreWindow *window)
 {
@@ -855,7 +813,6 @@ vinagre_window_init (VinagreWindow *window)
                             G_CALLBACK (vinagre_window_update_bookmarks_list_menu),
                             window);
 #endif
-  //vinagre_window_init_clipboard (window);
 }
 
 VinagreNotebook *



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]