vinagre r519 - in trunk: . src



Author: jwendell
Date: Sun Nov 16 12:10:12 2008
New Revision: 519
URL: http://svn.gnome.org/viewvc/vinagre?rev=519&view=rev

Log:
2008-11-16  Jonh Wendell <jwendell gnome org>

	* lots of files: Drag and drop ability: Bookmark can be added by dragging
	and dropping an tab into it. Closes #536896.



Modified:
   trunk/ChangeLog
   trunk/src/vinagre-bacon.c
   trunk/src/vinagre-commands.c
   trunk/src/vinagre-connect.c
   trunk/src/vinagre-connection.c
   trunk/src/vinagre-connection.h
   trunk/src/vinagre-fav.c
   trunk/src/vinagre-main.c
   trunk/src/vinagre-notebook.c
   trunk/src/vinagre-utils.h
   trunk/src/vinagre-window.c

Modified: trunk/src/vinagre-bacon.c
==============================================================================
--- trunk/src/vinagre-bacon.c	(original)
+++ trunk/src/vinagre-bacon.c	Sun Nov 16 12:10:12 2008
@@ -119,9 +119,12 @@
 
 	  for (j = 0; j < n_uris; j++)
 	    {
-	      conn = vinagre_connection_new_from_string (uris[j], &error);
+	      conn = vinagre_connection_new_from_string (uris[j], &error, TRUE);
 	      if (conn)
 		servers = g_slist_prepend (servers, conn);
+	      else
+		/*FIXME: Show a dialog error?*/
+		g_free (error);
 	    }
 
 	  g_strfreev (uris);

Modified: trunk/src/vinagre-commands.c
==============================================================================
--- trunk/src/vinagre-commands.c	(original)
+++ trunk/src/vinagre-commands.c	Sun Nov 16 12:10:12 2008
@@ -130,7 +130,7 @@
       for (l = files; l; l = l->next)
         {
 	  uri = (gchar *)l->data;
-	  conn = vinagre_connection_new_from_file (uri, &error);
+	  conn = vinagre_connection_new_from_file (uri, &error, FALSE);
 
 	  if (conn)
 	    {

Modified: trunk/src/vinagre-connect.c
==============================================================================
--- trunk/src/vinagre-connect.c	(original)
+++ trunk/src/vinagre-connect.c	Sun Nov 16 12:10:12 2008
@@ -261,7 +261,7 @@
 
       save_history (dialog.host_entry);
 
-      conn = vinagre_connection_new_from_string (host, &error_msg);
+      conn = vinagre_connection_new_from_string (host, &error_msg, TRUE);
       if (conn)
 	{
 	  g_object_set (conn,

Modified: trunk/src/vinagre-connection.c
==============================================================================
--- trunk/src/vinagre-connection.c	(original)
+++ trunk/src/vinagre-connection.c	Sun Nov 16 12:10:12 2008
@@ -642,18 +642,19 @@
 }
 
 VinagreConnection *
-vinagre_connection_new_from_string (const gchar *uri, gchar **error_msg)
+vinagre_connection_new_from_string (const gchar *uri, gchar **error_msg, gboolean use_bookmarks)
 {
-  VinagreConnection *conn;
+  VinagreConnection *conn = NULL;
   gint    port;
   gchar  *host;
 
   if (!vinagre_connection_split_string (uri, &host, &port, error_msg))
     return NULL;
 
-  conn = vinagre_bookmarks_exists (vinagre_bookmarks_get_default (),
-                                   host,
-                                   port);
+  if (use_bookmarks)
+    conn = vinagre_bookmarks_exists (vinagre_bookmarks_get_default (),
+				     host,
+				     port);
   if (!conn)
     {
       conn = vinagre_connection_new ();
@@ -666,7 +667,7 @@
 }
 
 VinagreConnection *
-vinagre_connection_new_from_file (const gchar *uri, gchar **error_msg)
+vinagre_connection_new_from_file (const gchar *uri, gchar **error_msg, gboolean use_bookmarks)
 {
   GKeyFile          *file;
   GError            *error;
@@ -683,6 +684,7 @@
   conn = NULL;
   error = NULL;
   file = NULL;
+  conn = NULL;
 
   file_a = g_file_new_for_commandline_arg (uri);
   loaded = g_file_load_contents (file_a,
@@ -736,7 +738,8 @@
 	  host = actual_host;
 	}
 
-      conn = vinagre_bookmarks_exists (vinagre_bookmarks_get_default (), host, port);
+      if (use_bookmarks)
+        conn = vinagre_bookmarks_exists (vinagre_bookmarks_get_default (), host, port);
       if (!conn)
 	{
 	  gchar *username, *password;
@@ -857,12 +860,12 @@
   if (has_protocol)
     {
       uri = g_string_new (vinagre_connection_protos [conn->priv->protocol-1]);
-      g_string_append_printf (uri, "%s", "://");
+      g_string_append (uri, "://");
     }
   else
     uri = g_string_new (NULL);
 
-  g_string_append_printf (uri, "%s", conn->priv->host);
+  g_string_append (uri, conn->priv->host);
 
   if (vinagre_connection_default_port [conn->priv->protocol-1] != conn->priv->port)
     g_string_append_printf (uri, "::%d", conn->priv->port);

Modified: trunk/src/vinagre-connection.h
==============================================================================
--- trunk/src/vinagre-connection.h	(original)
+++ trunk/src/vinagre-connection.h	Sun Nov 16 12:10:12 2008
@@ -91,8 +91,8 @@
 
 VinagreConnection*  vinagre_connection_clone		(VinagreConnection *conn);
 
-VinagreConnection*  vinagre_connection_new_from_string	(const gchar *url, gchar **error_msg);
-VinagreConnection*  vinagre_connection_new_from_file	(const gchar *uri, gchar **error_msg);
+VinagreConnection*  vinagre_connection_new_from_string	(const gchar *url, gchar **error_msg, gboolean use_bookmarks);
+VinagreConnection*  vinagre_connection_new_from_file	(const gchar *uri, gchar **error_msg, gboolean use_bookmarks);
 
 GdkPixbuf*          vinagre_connection_get_icon	(VinagreConnection *conn);
 

Modified: trunk/src/vinagre-fav.c
==============================================================================
--- trunk/src/vinagre-fav.c	(original)
+++ trunk/src/vinagre-fav.c	Sun Nov 16 12:10:12 2008
@@ -714,6 +714,96 @@
 }
 
 static void
+drag_data_received_handl (GtkWidget *widget,
+			  GdkDragContext *context,
+			  gint x,
+			  gint y,
+			  GtkSelectionData *selection_data,
+			  guint target_type,
+			  guint time,
+			  VinagreFav *fav)
+{
+  gchar *_sdata;
+  gboolean success = FALSE;
+
+  if ((selection_data != NULL) && (selection_data->length >= 0))
+    {
+      switch (target_type)
+	{
+	  case TARGET_VINAGRE:
+	    _sdata = (gchar*)selection_data-> data;
+	    success = TRUE;
+	   break;
+
+	  default:
+	    g_print ("nothing good");
+	}
+    }
+
+  gtk_drag_finish (context, success, FALSE, time);
+
+  if (success)
+    {
+      VinagreConnection *conn;
+      gchar **info;
+      gchar *error = NULL;
+
+      info = g_strsplit (_sdata, "||", 2);
+      if (g_strv_length (info) != 2)
+	{
+	  vinagre_utils_show_error (_("Invalid operation"),
+				    _("Data received from drag&drop operation is invalid."),
+				    GTK_WINDOW (fav->priv->window));
+	  return;
+	}
+
+      conn = vinagre_connection_new_from_string (info[1], &error, FALSE);
+      if (!conn)
+	{
+	  g_strfreev (info);
+	  vinagre_utils_show_error (NULL,
+				    error ? error : _("Unknown error"),
+				    GTK_WINDOW (fav->priv->window));
+	  return;
+	}
+
+      vinagre_connection_set_name (conn, info[0]);
+      vinagre_bookmarks_add (vinagre_bookmarks_get_default (),
+			     conn,
+			     GTK_WINDOW (fav->priv->window));
+
+      g_strfreev (info);
+      g_object_unref (conn);
+    }
+}
+
+static gboolean
+drag_drop_handl (GtkWidget *widget,
+		 GdkDragContext *context,
+		 gint x,
+		 gint y,
+		 guint time,
+		 gpointer user_data)
+{
+  gboolean is_valid_drop_site;
+  GdkAtom  target_type;
+
+  is_valid_drop_site = FALSE;
+
+  if (context->targets)
+    {
+      target_type = GDK_POINTER_TO_ATOM (g_list_nth_data (context->targets, TARGET_VINAGRE));
+      gtk_drag_get_data (widget,
+			 context,
+			 target_type,
+			 time);
+      is_valid_drop_site = TRUE;
+    }
+
+  return  is_valid_drop_site;
+}
+
+static void
 vinagre_fav_init (VinagreFav *fav)
 {
   GtkWidget *label_box, *label, *close_button;
@@ -723,6 +813,21 @@
   /* setup the tree */
   vinagre_fav_create_tree (fav);
 
+  gtk_drag_dest_set (fav->priv->tree,
+		     GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT,
+		     vinagre_target_list,
+		     vinagre_n_targets,
+		     GDK_ACTION_COPY);
+
+  g_signal_connect (fav->priv->tree,
+		    "drag-data-received",
+		    G_CALLBACK(drag_data_received_handl),
+		    fav);
+  g_signal_connect (fav->priv->tree,
+		    "drag-drop",
+		    G_CALLBACK (drag_drop_handl),
+		    NULL);
+
   g_signal_connect_swapped (vinagre_bookmarks_get_default (),
                             "changed",
                             G_CALLBACK (vinagre_fav_update_list),

Modified: trunk/src/vinagre-main.c
==============================================================================
--- trunk/src/vinagre-main.c	(original)
+++ trunk/src/vinagre-main.c	Sun Nov 16 12:10:12 2008
@@ -73,7 +73,7 @@
     {
       for (i = 0; files[i]; i++) 
 	{
-	  conn = vinagre_connection_new_from_file (files[i], &error);
+	  conn = vinagre_connection_new_from_file (files[i], &error, FALSE);
 	  if (conn)
 	    servers = g_slist_prepend (servers, conn);
 	  else
@@ -93,7 +93,7 @@
     {
       for (i = 0; remaining_args[i]; i++) 
 	{
-	  conn = vinagre_connection_new_from_string (remaining_args[i], &error);
+	  conn = vinagre_connection_new_from_string (remaining_args[i], &error, TRUE);
 	  if (conn)
 	    servers = g_slist_prepend (servers, conn);
 	  else

Modified: trunk/src/vinagre-notebook.c
==============================================================================
--- trunk/src/vinagre-notebook.c	(original)
+++ trunk/src/vinagre-notebook.c	Sun Nov 16 12:10:12 2008
@@ -73,6 +73,47 @@
 }
 
 static void
+drag_data_get_handl (GtkWidget *widget,
+		     GdkDragContext *context,
+		     GtkSelectionData *selection_data,
+		     guint target_type,
+		     guint time,
+		     VinagreTab *tab)
+{
+  gchar *uri, *name, *data;
+  VinagreConnection *conn;
+
+  g_assert (selection_data != NULL);
+
+  switch (target_type)
+    {
+      case TARGET_VINAGRE:
+	conn = vinagre_tab_get_conn (tab);
+	uri = vinagre_connection_get_string_rep (conn, TRUE);
+	name = vinagre_connection_get_best_name (conn);
+	data = g_strdup_printf ("%s||%s", name, uri);
+
+	gtk_selection_data_set (selection_data,
+				selection_data->target,
+				8,
+				(guchar*) data,
+				strlen (data));
+
+	g_free (data);
+	g_free (name);
+	g_free (uri);
+	break;
+
+      case TARGET_STRING:
+	/*FIXME: Create a .VNC file*/
+	break;
+
+      default:
+	g_assert_not_reached ();
+    }
+}
+
+static void
 vinagre_notebook_init (VinagreNotebook *notebook)
 {
   notebook->priv = VINAGRE_NOTEBOOK_GET_PRIVATE (notebook);
@@ -226,6 +267,16 @@
 		    G_CALLBACK (tab_disconnected_cb),
 		    nb);
 
+  gtk_drag_source_set ( GTK_WIDGET (hbox),
+			GDK_BUTTON1_MASK,
+			vinagre_target_list,
+			vinagre_n_targets,
+			GDK_ACTION_COPY );
+  g_signal_connect (hbox,
+		    "drag-data-get",
+		    G_CALLBACK (drag_data_get_handl),
+		    tab);
+
   return hbox;
 }
 

Modified: trunk/src/vinagre-utils.h
==============================================================================
--- trunk/src/vinagre-utils.h	(original)
+++ trunk/src/vinagre-utils.h	Sun Nov 16 12:10:12 2008
@@ -29,6 +29,17 @@
 #define GPOINTER_TO_BOOLEAN(i) ((gboolean) ((((gint)(i)) == 2) ? TRUE : FALSE))
 #define IS_VALID_BOOLEAN(v) (((v == TRUE) || (v == FALSE)) ? TRUE : FALSE)
 
+enum {
+  TARGET_VINAGRE,
+  TARGET_STRING
+};
+
+static GtkTargetEntry vinagre_target_list[] = {
+  { "VINAGRE", 0, TARGET_VINAGRE },
+  { "text/plain", 0, TARGET_STRING }
+};
+static guint vinagre_n_targets = G_N_ELEMENTS (vinagre_target_list);
+
 enum { VINAGRE_ALL_WORKSPACES = 0xffffffff };
 
 GtkWidget	*vinagre_utils_create_small_close_button (void);

Modified: trunk/src/vinagre-window.c
==============================================================================
--- trunk/src/vinagre-window.c	(original)
+++ trunk/src/vinagre-window.c	Sun Nov 16 12:10:12 2008
@@ -274,7 +274,8 @@
   gchar             *error;
 
   conn = vinagre_connection_new_from_string (gtk_recent_chooser_get_current_uri (action),
-					     &error);
+					     &error,
+					     TRUE);
   if (conn)
     {
       vinagre_cmd_open_bookmark (window, conn);



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