vinagre r519 - in trunk: . src
- From: jwendell svn gnome org
- To: svn-commits-list gnome org
- Subject: vinagre r519 - in trunk: . src
- Date: Sun, 16 Nov 2008 12:10:13 +0000 (UTC)
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]