[vinagre] Enable the username field for SSH connections.



commit e677454de643a73cfbe33fae8ca49b7ebae55ed3
Author: Jonh Wendell <jwendell gnome org>
Date:   Mon Feb 1 16:27:35 2010 -0300

    Enable the username field for SSH connections.
    
    Closes #603736.

 plugins/ssh/vinagre-ssh-connection.c |   21 +++++++++++++++++
 plugins/ssh/vinagre-ssh-plugin.c     |   42 ++++++++++++++++++++++++++++++++++
 plugins/ssh/vinagre-ssh-tab.c        |   26 ++++++++++++++++-----
 3 files changed, 83 insertions(+), 6 deletions(-)
---
diff --git a/plugins/ssh/vinagre-ssh-connection.c b/plugins/ssh/vinagre-ssh-connection.c
index 863468c..e4c0efc 100644
--- a/plugins/ssh/vinagre-ssh-connection.c
+++ b/plugins/ssh/vinagre-ssh-connection.c
@@ -21,6 +21,7 @@
 
 #include <glib/gi18n.h>
 #include <vinagre/vinagre-utils.h>
+#include <vinagre/vinagre-cache-prefs.h>
 #include "vinagre-ssh-connection.h"
 
 struct _VinagreSshConnectionPrivate
@@ -56,6 +57,25 @@ ssh_parse_item (VinagreConnection *conn, xmlNode *root)
 }
 
 static void
+ssh_parse_options_widget (VinagreConnection *conn, GtkWidget *widget)
+{
+  GtkWidget *u_entry;
+
+  u_entry = g_object_get_data (G_OBJECT (widget), "username_entry");
+  if (!u_entry)
+    {
+      g_warning ("Wrong widget passed to ssh_parse_options_widget()");
+      return;
+    }
+
+  vinagre_cache_prefs_set_string  ("ssh-connection", "username", gtk_entry_get_text (GTK_ENTRY (u_entry)));
+
+  g_object_set (conn,
+		"username", gtk_entry_get_text (GTK_ENTRY (u_entry)),
+		NULL);
+}
+
+static void
 vinagre_ssh_connection_class_init (VinagreSshConnectionClass *klass)
 {
   GObjectClass* object_class = G_OBJECT_CLASS (klass);
@@ -67,6 +87,7 @@ vinagre_ssh_connection_class_init (VinagreSshConnectionClass *klass)
 
   parent_class->impl_fill_writer = ssh_fill_writer;
   parent_class->impl_parse_item  = ssh_parse_item;
+  parent_class->impl_parse_options_widget = ssh_parse_options_widget;
 }
 
 VinagreConnection *
diff --git a/plugins/ssh/vinagre-ssh-plugin.c b/plugins/ssh/vinagre-ssh-plugin.c
index 124238f..c75cf9e 100644
--- a/plugins/ssh/vinagre-ssh-plugin.c
+++ b/plugins/ssh/vinagre-ssh-plugin.c
@@ -26,6 +26,7 @@
 #include <gmodule.h>
 
 #include <vinagre/vinagre-debug.h>
+#include <vinagre/vinagre-cache-prefs.h>
 
 #include "vinagre-ssh-plugin.h"
 #include "vinagre-ssh-connection.h"
@@ -115,6 +116,46 @@ vinagre_ssh_plugin_finalize (GObject *object)
   G_OBJECT_CLASS (vinagre_ssh_plugin_parent_class)->finalize (object);
 }
 
+static GtkWidget *
+impl_get_connect_widget (VinagrePlugin *plugin, VinagreConnection *conn)
+{
+  GtkWidget *box, *label, *u_box, *u_entry;
+  gchar     *str;
+
+  box = gtk_vbox_new (FALSE, 0);
+
+  str = g_strdup_printf ("<b>%s</b>", _("SSH Options"));
+  label = gtk_label_new (str);
+  g_free (str);
+  gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+  gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+  gtk_misc_set_padding (GTK_MISC (label), 0, 6);
+  gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
+
+  u_box = gtk_hbox_new (FALSE, 4);
+  label = gtk_label_new ("  ");
+  gtk_box_pack_start (GTK_BOX (u_box), label, FALSE, FALSE, 0);
+
+  label = gtk_label_new_with_mnemonic (_("_Username:"));
+  gtk_box_pack_start (GTK_BOX (u_box), label, FALSE, FALSE, 0);
+
+  u_entry = gtk_entry_new ();
+  /* Translators: This is the tooltip for the username field in a SSH connection */
+  gtk_widget_set_tooltip_text (u_entry, _("Optional. If blank, your username will be used. Also, it can be supplied in the Machine field above, in the form username hostname "));
+  g_object_set_data (G_OBJECT (box), "username_entry", u_entry);
+  gtk_box_pack_start (GTK_BOX (u_box), u_entry, TRUE, TRUE, 5);
+  gtk_label_set_mnemonic_widget (GTK_LABEL (label), u_entry);
+  str = g_strdup (VINAGRE_IS_CONNECTION (conn) ?
+		  vinagre_connection_get_username (conn) :
+		  vinagre_cache_prefs_get_string  ("ssh-connection", "username", ""));
+  gtk_entry_set_text (GTK_ENTRY (u_entry), str);
+  gtk_entry_set_activates_default (GTK_ENTRY (u_entry), TRUE);
+  g_free (str);
+
+  gtk_box_pack_start (GTK_BOX (box), u_box, TRUE, TRUE, 0);
+  return box;
+}
+
 static void
 vinagre_ssh_plugin_class_init (VinagreSshPluginClass *klass)
 {
@@ -132,5 +173,6 @@ vinagre_ssh_plugin_class_init (VinagreSshPluginClass *klass)
   plugin_class->get_mdns_service  = impl_get_mdns_service;
   plugin_class->new_tab = impl_new_tab;
   plugin_class->get_default_port = impl_get_default_port;
+  plugin_class->get_connect_widget = impl_get_connect_widget;
 }
 /* vim: set ts=8: */
diff --git a/plugins/ssh/vinagre-ssh-tab.c b/plugins/ssh/vinagre-ssh-tab.c
index fba61b1..63bd901 100644
--- a/plugins/ssh/vinagre-ssh-tab.c
+++ b/plugins/ssh/vinagre-ssh-tab.c
@@ -70,18 +70,32 @@ static void
 vinagre_ssh_tab_constructed (GObject *object)
 {
   gchar **arg;
+  const gchar *username;
+  gint i;
   VinagreSshTab *ssh_tab = VINAGRE_SSH_TAB (object);
   VinagreTab    *tab = VINAGRE_TAB (object);
+  VinagreConnection *conn = vinagre_tab_get_conn (tab);
 
   if (G_OBJECT_CLASS (vinagre_ssh_tab_parent_class)->constructed)
     G_OBJECT_CLASS (vinagre_ssh_tab_parent_class)->constructed (object);
 
-  arg = g_new (gchar *, 5);
-  arg[0] = g_strdup ("ssh");
-  arg[1] = g_strdup (vinagre_connection_get_host (vinagre_tab_get_conn (tab)));
-  arg[2] = g_strdup ("-p");
-  arg[3] = g_strdup_printf ("%d", vinagre_connection_get_port (vinagre_tab_get_conn (tab)));
-  arg[4] = NULL;
+  username = vinagre_connection_get_username (conn);
+  i = 0;
+
+  arg = g_new (gchar *, 7);
+  arg[i++] = g_strdup ("ssh");
+
+  if (username && *username)
+    {
+      arg[i++] = g_strdup ("-l");
+      arg[i++] = g_strdup (username);
+    }
+
+  arg[i++] = g_strdup ("-p");
+  arg[i++] = g_strdup_printf ("%d", vinagre_connection_get_port (conn));
+
+  arg[i++] = g_strdup (vinagre_connection_get_host (conn));
+  arg[i++] = NULL;
 
   vte_terminal_fork_command (VTE_TERMINAL (ssh_tab->priv->vte),
 			     "ssh",



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