[vinagre] Enable the username field for SSH connections.
- From: Jonh Wendell <jwendell src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [vinagre] Enable the username field for SSH connections.
- Date: Mon, 1 Feb 2010 19:28:43 +0000 (UTC)
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]