summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/caja-connect-server-dialog-main.c23
-rw-r--r--src/caja-connect-server-dialog.c1000
-rw-r--r--src/caja-connect-server-dialog.h3
3 files changed, 317 insertions, 709 deletions
diff --git a/src/caja-connect-server-dialog-main.c b/src/caja-connect-server-dialog-main.c
index 44c57980..c73b0df4 100644
--- a/src/caja-connect-server-dialog-main.c
+++ b/src/caja-connect-server-dialog-main.c
@@ -171,20 +171,12 @@ main (int argc, char *argv[])
{
GtkWidget *dialog;
GOptionContext *context;
- const char **args;
- GFile *location;
GError *error;
- const GOptionEntry options[] =
- {
- { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &args, NULL, N_("[URI]") },
- { NULL }
- };
bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
- args = NULL;
error = NULL;
/* Translators: This is the --help description for the connect to server app,
the initial newlines are between the command line arg and the description */
@@ -208,20 +200,7 @@ main (int argc, char *argv[])
gtk_window_set_default_icon_name (CAJA_ICON_FOLDER);
-
- /* command line arguments, null terminated array */
- location = NULL;
- if (args)
- {
- location = g_file_new_for_commandline_arg (*args);
- }
-
- dialog = caja_connect_server_dialog_new (NULL, location);
-
- if (location)
- {
- g_object_unref (location);
- }
+ dialog = caja_connect_server_dialog_new (NULL);
open_dialogs = 0;
g_signal_connect (dialog, "destroy",
diff --git a/src/caja-connect-server-dialog.c b/src/caja-connect-server-dialog.c
index 2a855eb4..38531856 100644
--- a/src/caja-connect-server-dialog.c
+++ b/src/caja-connect-server-dialog.c
@@ -49,13 +49,14 @@ struct _CajaConnectServerDialogDetails
{
CajaApplication *application;
+ GtkWidget *user_details;
+ GtkWidget *port_spinbutton;
+
GtkWidget *table;
GtkWidget *type_combo;
- GtkWidget *uri_entry;
GtkWidget *server_entry;
GtkWidget *share_entry;
- GtkWidget *port_entry;
GtkWidget *folder_entry;
GtkWidget *domain_entry;
GtkWidget *user_entry;
@@ -76,107 +77,71 @@ struct MethodInfo
{
const char *scheme;
guint flags;
+ guint default_port;
};
/* A collection of flags for MethodInfo.flags */
enum
{
- DEFAULT_METHOD = 0x00000001,
+ DEFAULT_METHOD = (1 << 0),
/* Widgets to display in setup_for_type */
- SHOW_SHARE = 0x00000010,
- SHOW_PORT = 0x00000020,
- SHOW_USER = 0x00000040,
- SHOW_DOMAIN = 0x00000080,
+ SHOW_SHARE = (1 << 1),
+ SHOW_PORT = (1 << 2),
+ SHOW_USER = (1 << 3),
+ SHOW_DOMAIN = (1 << 4),
- IS_ANONYMOUS = 0x00001000
+ IS_ANONYMOUS = (1 << 5)
};
/* Remember to fill in descriptions below */
static struct MethodInfo methods[] =
{
/* FIXME: we need to alias ssh to sftp */
- { "sftp", SHOW_PORT | SHOW_USER },
- { "ftp", SHOW_PORT | SHOW_USER },
- { "ftp", DEFAULT_METHOD | IS_ANONYMOUS | SHOW_PORT},
- { "smb", SHOW_SHARE | SHOW_USER | SHOW_DOMAIN },
- { "dav", SHOW_PORT | SHOW_USER },
+ { "sftp", SHOW_PORT | SHOW_USER, 22 },
+ { "ftp", SHOW_PORT | SHOW_USER, 21 },
+ { "ftp", DEFAULT_METHOD | IS_ANONYMOUS | SHOW_PORT, 21 },
+ { "smb", SHOW_SHARE | SHOW_USER | SHOW_DOMAIN, 0 },
+ { "dav", SHOW_PORT | SHOW_USER, 80 },
/* FIXME: hrm, shouldn't it work? */
- { "davs", SHOW_PORT | SHOW_USER },
- { NULL, 0 }, /* Custom URI method */
+ { "davs", SHOW_PORT | SHOW_USER, 443 },
};
/* To get around non constant gettext strings */
static const char*
get_method_description (struct MethodInfo *meth)
{
- if (!meth->scheme)
- {
- return _("Custom Location");
- }
- else if (strcmp (meth->scheme, "sftp") == 0)
- {
+ if (strcmp (meth->scheme, "sftp") == 0) {
return _("SSH");
- }
- else if (strcmp (meth->scheme, "ftp") == 0)
- {
- if (meth->flags & IS_ANONYMOUS)
- {
+ } else if (strcmp (meth->scheme, "ftp") == 0) {
+ if (meth->flags & IS_ANONYMOUS) {
return _("Public FTP");
- }
- else
- {
+ } else {
return _("FTP (with login)");
}
- }
- else if (strcmp (meth->scheme, "smb") == 0)
- {
+ } else if (strcmp (meth->scheme, "smb") == 0) {
return _("Windows share");
- }
- else if (strcmp (meth->scheme, "dav") == 0)
- {
+ } else if (strcmp (meth->scheme, "dav") == 0) {
return _("WebDAV (HTTP)");
- }
- else if (strcmp (meth->scheme, "davs") == 0)
- {
+ } else if (strcmp (meth->scheme, "davs") == 0) {
return _("Secure WebDAV (HTTPS)");
/* No descriptive text */
- }
- else
- {
+ } else {
return meth->scheme;
}
}
static void
-caja_connect_server_dialog_finalize (GObject *object)
-{
- CajaConnectServerDialog *dialog;
-
- dialog = CAJA_CONNECT_SERVER_DIALOG (object);
-
- g_object_unref (dialog->details->uri_entry);
- g_object_unref (dialog->details->server_entry);
- g_object_unref (dialog->details->share_entry);
- g_object_unref (dialog->details->port_entry);
- g_object_unref (dialog->details->folder_entry);
- g_object_unref (dialog->details->domain_entry);
- g_object_unref (dialog->details->user_entry);
- g_object_unref (dialog->details->bookmark_check);
- g_object_unref (dialog->details->name_entry);
-
- G_OBJECT_CLASS (caja_connect_server_dialog_parent_class)->finalize (object);
-}
-
-static void
connect_to_server (CajaConnectServerDialog *dialog)
{
struct MethodInfo *meth;
- char *uri;
GFile *location;
int index;
GtkTreeIter iter;
+ char *user, *initial_path, *server, *folder, *domain, *port_str;
+ char *t, *join, *uri;
+ double port;
/* Get our method info */
gtk_combo_box_get_active_iter (GTK_COMBO_BOX (dialog->details->type_combo), &iter);
@@ -185,142 +150,94 @@ connect_to_server (CajaConnectServerDialog *dialog)
g_assert (index < G_N_ELEMENTS (methods) && index >= 0);
meth = &(methods[index]);
- uri = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->server_entry), 0, -1);
- if (strlen (uri) == 0)
- {
- eel_show_error_dialog (_("Cannot Connect to Server. You must enter a name for the server."),
- _("Please enter a name and try again."),
- GTK_WINDOW (dialog));
- g_free (uri);
- return;
- }
+ server = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->server_entry), 0, -1);
- if (meth->scheme == NULL)
- {
- uri = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->uri_entry), 0, -1);
- /* FIXME: we should validate it in some way? */
- }
- else
- {
- char *user, *port, *initial_path, *server, *folder, *domain;
- char *t, *join;
- gboolean free_initial_path, free_user, free_domain, free_port;
-
- server = uri;
- uri = NULL;
-
- user = "";
- port = "";
- initial_path = "";
- domain = "";
- free_initial_path = FALSE;
- free_user = FALSE;
- free_domain = FALSE;
- free_port = FALSE;
-
- /* FTP special case */
- if (meth->flags & IS_ANONYMOUS)
- {
- user = "anonymous";
+ user = NULL;
+ initial_path = NULL;
+ domain = NULL;
+ folder = NULL;
- /* SMB special case */
- }
- else if (strcmp (meth->scheme, "smb") == 0)
- {
- t = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->share_entry), 0, -1);
- initial_path = g_strconcat ("/", t, NULL);
- free_initial_path = TRUE;
- g_free (t);
- }
+ /* FTP special case */
+ if (meth->flags & IS_ANONYMOUS) {
+ user = g_strdup ("anonymous");
- if (gtk_widget_get_parent (dialog->details->port_entry) != NULL)
- {
- free_port = TRUE;
- port = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->port_entry), 0, -1);
- }
- folder = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->folder_entry), 0, -1);
- if (gtk_widget_get_parent (dialog->details->user_entry) != NULL)
- {
- free_user = TRUE;
+ /* SMB special case */
+ } else if (strcmp (meth->scheme, "smb") == 0) {
+ t = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->share_entry), 0, -1);
+ initial_path = g_strconcat ("/", t, NULL);
- t = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->user_entry), 0, -1);
-
- user = g_uri_escape_string (t, G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO, FALSE);
+ g_free (t);
+ }
- g_free (t);
- }
- if (gtk_widget_get_parent (dialog->details->domain_entry) != NULL)
- {
- free_domain = TRUE;
+ /* port */
+ port = gtk_spin_button_get_value (GTK_SPIN_BUTTON (dialog->details->port_spinbutton));
- domain = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->domain_entry), 0, -1);
+ /* username */
+ if (!user) {
+ t = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->user_entry), 0, -1);
+ user = g_uri_escape_string (t, G_URI_RESERVED_CHARS_ALLOWED_IN_USERINFO, FALSE);
+ g_free (t);
+ }
- if (strlen (domain) != 0)
- {
- t = user;
+ /* domain */
+ domain = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->domain_entry), 0, -1);
- user = g_strconcat (domain , ";" , t, NULL);
+ if (strlen (domain) != 0) {
+ t = user;
- if (free_user)
- {
- g_free (t);
- }
+ user = g_strconcat (domain , ";" , t, NULL);
+ g_free (t);
+ }
- free_user = TRUE;
- }
- }
+ /* folder */
+ folder = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->folder_entry), 0, -1);
- if (folder[0] != 0 &&
- folder[0] != '/')
- {
- join = "/";
- }
- else
- {
- join = "";
- }
+ if (folder[0] != 0 &&
+ folder[0] != '/') {
+ join = "/";
+ } else {
+ join = "";
+ }
+ if (initial_path != NULL) {
t = folder;
folder = g_strconcat (initial_path, join, t, NULL);
g_free (t);
+ }
- t = folder;
- folder = g_uri_escape_string (t, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, FALSE);
- g_free (t);
-
- uri = g_strdup_printf ("%s://%s%s%s%s%s%s",
- meth->scheme,
- user, (user[0] != 0) ? "@" : "",
- server,
- (port[0] != 0) ? ":" : "", port,
- folder);
+ t = folder;
+ folder = g_uri_escape_string (t, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, FALSE);
+ g_free (t);
- if (free_initial_path)
- {
- g_free (initial_path);
- }
- g_free (server);
- if (free_port)
- {
- g_free (port);
- }
- g_free (folder);
- if (free_user)
- {
- g_free (user);
- }
- if (free_domain)
- {
- g_free (domain);
- }
+ /* port */
+ if (port != 0 && port != meth->default_port) {
+ port_str = g_strdup_printf ("%d", (int) port);
+ } else {
+ port_str = NULL;
}
+ /* final uri */
+ uri = g_strdup_printf ("%s://%s%s%s%s%s%s",
+ meth->scheme,
+ (user != NULL) ? user : "",
+ (user[0] != 0) ? "@" : "",
+ server,
+ (port_str != NULL) ? ":" : "",
+ (port_str != NULL) ? port_str : "",
+ (folder != NULL) ? folder : "");
+
+ g_free (initial_path);
+ g_free (server);
+ g_free (folder);
+ g_free (user);
+ g_free (domain);
+ g_free (port_str);
+
gtk_widget_hide (GTK_WIDGET (dialog));
location = g_file_new_for_uri (uri);
g_free (uri);
- /* FIXME: sensitivity */
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->details->bookmark_check)))
{
char *name;
@@ -386,20 +303,14 @@ response_callback (CajaConnectServerDialog *dialog,
static void
caja_connect_server_dialog_class_init (CajaConnectServerDialogClass *class)
{
- GObjectClass *gobject_class;
-
g_type_class_add_private (class, sizeof (CajaConnectServerDialogDetails));
-
- gobject_class = G_OBJECT_CLASS (class);
- gobject_class->finalize = caja_connect_server_dialog_finalize;
}
static void
setup_for_type (CajaConnectServerDialog *dialog)
{
struct MethodInfo *meth;
- int index, i;
- GtkWidget *label, *table;
+ int index;
GtkTreeIter iter;
/* Get our method info */
@@ -409,483 +320,155 @@ setup_for_type (CajaConnectServerDialog *dialog)
g_assert (index < G_N_ELEMENTS (methods) && index >= 0);
meth = &(methods[index]);
- if (gtk_widget_get_parent (dialog->details->uri_entry) != NULL)
- {
- gtk_container_remove (GTK_CONTAINER (dialog->details->table),
- dialog->details->uri_entry);
- }
- if (gtk_widget_get_parent (dialog->details->server_entry) != NULL)
- {
- gtk_container_remove (GTK_CONTAINER (dialog->details->table),
- dialog->details->server_entry);
- }
- if (gtk_widget_get_parent (dialog->details->share_entry) != NULL)
- {
- gtk_container_remove (GTK_CONTAINER (dialog->details->table),
- dialog->details->share_entry);
- }
- if (gtk_widget_get_parent (dialog->details->port_entry) != NULL)
- {
- gtk_container_remove (GTK_CONTAINER (dialog->details->table),
- dialog->details->port_entry);
- }
- if (gtk_widget_get_parent (dialog->details->folder_entry) != NULL)
- {
- gtk_container_remove (GTK_CONTAINER (dialog->details->table),
- dialog->details->folder_entry);
- }
- if (gtk_widget_get_parent (dialog->details->user_entry) != NULL)
- {
- gtk_container_remove (GTK_CONTAINER (dialog->details->table),
- dialog->details->user_entry);
- }
- if (gtk_widget_get_parent (dialog->details->domain_entry) != NULL)
- {
- gtk_container_remove (GTK_CONTAINER (dialog->details->table),
- dialog->details->domain_entry);
- }
- if (gtk_widget_get_parent (dialog->details->bookmark_check) != NULL)
- {
- gtk_container_remove (GTK_CONTAINER (dialog->details->table),
- dialog->details->bookmark_check);
- }
- if (gtk_widget_get_parent (dialog->details->name_entry) != NULL)
- {
- gtk_container_remove (GTK_CONTAINER (dialog->details->table),
- dialog->details->name_entry);
- }
- /* Destroy all labels */
- gtk_container_foreach (GTK_CONTAINER (dialog->details->table),
- (GtkCallback) gtk_widget_destroy, NULL);
-
-
- i = 1;
- table = dialog->details->table;
-
- if (meth->scheme == NULL)
- {
- label = gtk_label_new_with_mnemonic (_("_Location (URI):"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1,
- i, i+1,
- GTK_FILL, GTK_FILL,
- 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->uri_entry);
- gtk_widget_show (dialog->details->uri_entry);
- gtk_table_attach (GTK_TABLE (table), dialog->details->uri_entry,
- 1, 2,
- i, i+1,
- GTK_FILL | GTK_EXPAND, GTK_FILL,
- 0, 0);
-
- i++;
-
- goto connection_name;
- }
-
- label = gtk_label_new_with_mnemonic (_("_Server:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1,
- i, i+1,
- GTK_FILL, GTK_FILL,
- 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->server_entry);
- gtk_widget_show (dialog->details->server_entry);
- gtk_table_attach (GTK_TABLE (table), dialog->details->server_entry,
- 1, 2,
- i, i+1,
- GTK_FILL | GTK_EXPAND, GTK_FILL,
- 0, 0);
-
- i++;
-
- label = gtk_label_new (_("Optional information:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 2,
- i, i+1,
- GTK_FILL, GTK_FILL,
- 0, 0);
-
- i++;
-
- if (meth->flags & SHOW_SHARE)
- {
- label = gtk_label_new_with_mnemonic (_("_Share:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1,
- i, i+1,
- GTK_FILL, GTK_FILL,
- 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->share_entry);
- gtk_widget_show (dialog->details->share_entry);
- gtk_table_attach (GTK_TABLE (table), dialog->details->share_entry,
- 1, 2,
- i, i+1,
- GTK_FILL | GTK_EXPAND, GTK_FILL,
- 0, 0);
-
- i++;
- }
-
- if (meth->flags & SHOW_PORT)
- {
- label = gtk_label_new_with_mnemonic (_("_Port:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1,
- i, i+1,
- GTK_FILL, GTK_FILL,
- 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->port_entry);
- gtk_widget_show (dialog->details->port_entry);
- gtk_table_attach (GTK_TABLE (table), dialog->details->port_entry,
- 1, 2,
- i, i+1,
- GTK_FILL | GTK_EXPAND, GTK_FILL,
- 0, 0);
-
- i++;
- }
-
- label = gtk_label_new_with_mnemonic (_("_Folder:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1,
- i, i+1,
- GTK_FILL, GTK_FILL,
- 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->folder_entry);
- gtk_widget_show (dialog->details->folder_entry);
- gtk_table_attach (GTK_TABLE (table), dialog->details->folder_entry,
- 1, 2,
- i, i+1,
- GTK_FILL | GTK_EXPAND, GTK_FILL,
- 0, 0);
-
- i++;
-
- if (meth->flags & SHOW_USER)
- {
- label = gtk_label_new_with_mnemonic (_("_User Name:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1,
- i, i+1,
- GTK_FILL, GTK_FILL,
- 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->user_entry);
- gtk_widget_show (dialog->details->user_entry);
- gtk_table_attach (GTK_TABLE (table), dialog->details->user_entry,
- 1, 2,
- i, i+1,
- GTK_FILL | GTK_EXPAND, GTK_FILL,
- 0, 0);
-
- i++;
- }
-
- if (meth->flags & SHOW_DOMAIN)
- {
- label = gtk_label_new_with_mnemonic (_("_Domain Name:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1,
- i, i+1,
- GTK_FILL, GTK_FILL,
- 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->domain_entry);
- gtk_widget_show (dialog->details->domain_entry);
- gtk_table_attach (GTK_TABLE (table), dialog->details->domain_entry,
- 1, 2,
- i, i+1,
- GTK_FILL | GTK_EXPAND, GTK_FILL,
- 0, 0);
-
- i++;
- }
-
-
-
-connection_name:
-
- gtk_widget_show (dialog->details->bookmark_check);
- gtk_table_attach (GTK_TABLE (table), dialog->details->bookmark_check,
- 0, 1,
- i, i+1,
- GTK_FILL, GTK_FILL,
- 0, 0);
- i++;
-
- label = gtk_label_new_with_mnemonic (_("Bookmark _name:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_widget_show (label);
- gtk_table_attach (GTK_TABLE (table), label,
- 0, 1,
- i, i+1,
- GTK_FILL, GTK_FILL,
- 0, 0);
-
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->name_entry);
- gtk_widget_show (dialog->details->name_entry);
- gtk_table_attach (GTK_TABLE (table), dialog->details->name_entry,
- 1, 2,
- i, i+1,
- GTK_FILL | GTK_EXPAND, GTK_FILL,
- 0, 0);
-
- i++;
-
+ g_object_set (dialog->details->share_entry,
+ "visible",
+ (meth->flags & SHOW_SHARE) != 0,
+ NULL);
+
+ g_object_set (dialog->details->port_spinbutton,
+ "sensitive",
+ (meth->flags & SHOW_PORT) != 0,
+ "value", (gdouble) meth->default_port,
+ NULL);
+
+ g_object_set (dialog->details->user_details,
+ "visible",
+ (meth->flags & SHOW_USER) != 0 ||
+ (meth->flags & SHOW_DOMAIN) != 0,
+ NULL);
+
+ g_object_set (dialog->details->user_entry,
+ "visible",
+ (meth->flags & SHOW_USER) != 0,
+ NULL);
+
+ g_object_set (dialog->details->domain_entry,
+ "visible",
+ (meth->flags & SHOW_DOMAIN) != 0,
+ NULL);
}
static void
-display_server_location (CajaConnectServerDialog *dialog, GFile *location)
+entry_changed_callback (GtkEditable *editable,
+ GtkWidget *connect_button)
{
-#if 0 /*FIXME */
- struct MethodInfo *meth = NULL;
- char *scheme;
- int i, index = 0;
- char *folder;
- const char *t;
+ guint length;
- /* Find an appropriate method */
- scheme = g_file_get_uri_scheme (location);
- g_return_if_fail (scheme != NULL);
+ length = gtk_entry_get_text_length (GTK_ENTRY (editable));
- for (i = 0; i < G_N_ELEMENTS (methods); i++)
- {
-
- /* The default is 'Custom URI' */
- if (methods[i].scheme == NULL)
- {
- meth = &(methods[i]);
- index = i;
-
- }
- else if (strcmp (methods[i].scheme, scheme) == 0)
- {
-
- /* FTP Special case: If no user keep searching for public ftp */
- if (strcmp (scheme, "ftp") == 0)
- {
- t = mate_vfs_uri_get_user_name (uri);
- if ((!t || !t[0] || strcmp (t, "anonymous") == 0) &&
- (!(methods[i].flags & IS_ANONYMOUS)))
- {
- continue;
- }
- }
-
- meth = &(methods[i]);
- index = i;
- break;
- }
- }
-
- g_free (scheme);
- g_assert (meth);
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->details->type_combo), index);
- setup_for_type (dialog);
-
- /* Custom URI */
- if (meth->scheme == NULL)
- {
- gchar *uri;
-
- /* FIXME: with mate-vfs, we had MATE_VFS_URI_HIDE_PASSWORD |
- * MATE_VFS_URI_HIDE_FRAGMENT_IDENTIFIER */
- uri = g_file_get_uri (location)
- gtk_entry_set_text (GTK_ENTRY (dialog->details->uri_entry), uri);
- g_free (uri);
-
- }
- else
- {
-
- folder = g_file_get_path (location);
- if (!folder)
- {
- folder = "";
- }
- else if (folder[0] == '/')
- {
- folder++;
- }
-
- /* Server */
- t = mate_vfs_uri_get_host_name (uri);
- gtk_entry_set_text (GTK_ENTRY (dialog->details->server_entry),
- t ? t : "");
-
- /* Share */
- if (meth->flags & SHOW_SHARE)
- {
- t = strchr (folder, '/');
- if (t)
- {
- char *share = g_strndup (folder, t - folder);
- gtk_entry_set_text (GTK_ENTRY (dialog->details->share_entry), share);
- g_free (share);
- folder = t + 1;
- }
-
- }
-
- /* Port */
- if (meth->flags & SHOW_PORT)
- {
- guint port = mate_vfs_uri_get_host_port (uri);
- if (port != 0)
- {
- char sport[32];
- g_snprintf (sport, sizeof (sport), "%d", port);
- gtk_entry_set_text (GTK_ENTRY (dialog->details->port_entry), sport);
- }
- }
-
- /* Folder */
- gtk_entry_set_text (GTK_ENTRY (dialog->details->folder_entry), folder);
- g_free (folder);
-
- /* User */
- if (meth->flags & SHOW_USER)
- {
- const char *user = mate_vfs_uri_get_user_name (uri);
- if (user)
- {
- t = strchr (user, ';');
- if (t)
- {
- user = t + 1;
- }
- gtk_entry_set_text (GTK_ENTRY (dialog->details->user_entry), user);
- }
- }
-
- /* Domain */
- if (meth->flags & SHOW_DOMAIN)
- {
- const char *user = mate_vfs_uri_get_user_name (uri);
- if (user)
- {
- t = strchr (user, ';');
- if (t)
- {
- char *domain = g_strndup (user, t - user);
- gtk_entry_set_text (GTK_ENTRY (dialog->details->domain_entry), domain);
- g_free (domain);
- }
- }
- }
- }
-#endif
+ gtk_widget_set_sensitive (connect_button,
+ length > 0);
}
static void
-combo_changed_callback (GtkComboBox *combo_box,
- CajaConnectServerDialog *dialog)
+bind_visibility (CajaConnectServerDialog *dialog,
+ GtkWidget *source,
+ GtkWidget *dest)
{
- setup_for_type (dialog);
-}
-
-static void
-port_insert_text (GtkEditable *editable,
- const gchar *new_text,
- gint new_text_length,
- gint *position)
-{
- int pos;
-
- if (new_text_length < 0)
- {
- new_text_length = strlen (new_text);
- }
-
- /* Only allow digits to be inserted as port number */
- for (pos = 0; pos < new_text_length; pos++)
- {
- if (!g_ascii_isdigit (new_text[pos]))
- {
- GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (editable));
- if (toplevel != NULL)
- {
- gdk_window_beep (gtk_widget_get_window (toplevel));
- }
- g_signal_stop_emission_by_name (editable, "insert_text");
- return;
- }
- }
-}
-
-static void
-bookmark_checkmark_toggled (GtkToggleButton *toggle, CajaConnectServerDialog *dialog)
-{
- gtk_widget_set_sensitive (GTK_WIDGET(dialog->details->name_entry),
- gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (toggle)));
+ g_object_bind_property (source,
+ "visible",
+ dest,
+ "visible",
+ G_BINDING_DEFAULT);
}
static void
caja_connect_server_dialog_init (CajaConnectServerDialog *dialog)
{
GtkWidget *label;
- GtkWidget *table;
- GtkWidget *combo;
- GtkWidget *hbox;
- GtkWidget *vbox;
+ GtkWidget *alignment;
+ GtkWidget *content_area;
+ GtkWidget *combo ,* table;
+ GtkWidget *hbox, *connect_button;
GtkListStore *store;
GtkCellRenderer *renderer;
+ gchar *str;
int i;
dialog->details = G_TYPE_INSTANCE_GET_PRIVATE (dialog, CAJA_TYPE_CONNECT_SERVER_DIALOG,
CajaConnectServerDialogDetails);
+ content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+
+ /* set dialog properties */
gtk_window_set_title (GTK_WINDOW (dialog), _("Connect to Server"));
- gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
- gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), 2);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
+ gtk_box_set_spacing (GTK_BOX (content_area), 2);
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
- vbox, FALSE, TRUE, 0);
- gtk_widget_show (vbox);
+ /* server settings label */
+ label = gtk_label_new (NULL);
+ str = g_strdup_printf ("<b>%s</b>", _("Server Details"));
+ gtk_label_set_markup (GTK_LABEL (label), str);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (content_area), label, FALSE, FALSE, 6);
+ gtk_widget_show (label);
+
+ /* server settings alignment */
+ alignment = gtk_alignment_new (0, 0, 0, 0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment),
+ 0, 0, 12, 0);
+ gtk_box_pack_start (GTK_BOX (content_area), alignment, TRUE, TRUE, 0);
+ gtk_widget_show (alignment);
+
+ table = gtk_table_new (4, 2, FALSE);
+ gtk_container_add (GTK_CONTAINER (alignment), table);
+ gtk_widget_show (table);
+
+ /* first row: server entry + port spinbutton */
+ label = gtk_label_new_with_mnemonic (_("_Server:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_table_attach (GTK_TABLE (table), label,
+ 0, 1,
+ 0, 1,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
+ gtk_widget_show (label);
hbox = gtk_hbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (vbox),
- hbox, FALSE, TRUE, 0);
gtk_widget_show (hbox);
+ gtk_table_attach (GTK_TABLE (table), hbox,
+ 1, 2,
+ 0, 1,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
+
+ dialog->details->server_entry = gtk_entry_new ();
+ gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->server_entry), TRUE);
+ gtk_box_pack_start (GTK_BOX (hbox), dialog->details->server_entry, FALSE, FALSE, 0);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->server_entry);
+ gtk_widget_show (dialog->details->server_entry);
- label = gtk_label_new_with_mnemonic (_("Service _type:"));
+ /* port */
+ label = gtk_label_new_with_mnemonic (_("_Port:"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ dialog->details->port_spinbutton =
+ gtk_spin_button_new_with_range (0.0, 65535.0, 1.0);
+ g_object_set (dialog->details->port_spinbutton,
+ "digits", 0,
+ "numeric", TRUE,
+ "update-policy", GTK_UPDATE_IF_VALID,
+ NULL);
+ gtk_box_pack_start (GTK_BOX (hbox), dialog->details->port_spinbutton,
+ FALSE, FALSE, 0);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), dialog->details->port_spinbutton);
+ gtk_widget_show (dialog->details->port_spinbutton);
+
+ /* second row: type combobox */
+ label = gtk_label_new (_("Type:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_table_attach (GTK_TABLE (table), label,
+ 0, 1,
+ 1, 2,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
gtk_widget_show (label);
- gtk_box_pack_start (GTK_BOX (hbox),
- label, FALSE, FALSE, 0);
dialog->details->type_combo = combo = gtk_combo_box_new ();
/* each row contains: method index, textual description */
store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING);
gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (store));
- g_object_unref (G_OBJECT (store));
+ g_object_unref (store);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
@@ -941,71 +524,123 @@ caja_connect_server_dialog_init (CajaConnectServerDialog *dialog)
gtk_widget_show (combo);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo);
- gtk_box_pack_start (GTK_BOX (hbox),
- combo, TRUE, TRUE, 0);
- g_signal_connect (combo, "changed",
- G_CALLBACK (combo_changed_callback),
- dialog);
+ gtk_table_attach (GTK_TABLE (table), combo,
+ 1, 2,
+ 1, 2,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND, 6, 3);
+ g_signal_connect_swapped (combo, "changed",
+ G_CALLBACK (setup_for_type),
+ dialog);
+
+ /* third row: share entry */
+ label = gtk_label_new (_("Share:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_table_attach (GTK_TABLE (table), label,
+ 0, 1,
+ 2, 3,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
+ dialog->details->share_entry = gtk_entry_new ();
+ gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->share_entry), TRUE);
+ gtk_table_attach (GTK_TABLE (table), dialog->details->share_entry,
+ 1, 2,
+ 2, 3,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
- hbox = gtk_hbox_new (FALSE, 6);
- gtk_box_pack_start (GTK_BOX (vbox),
- hbox, FALSE, TRUE, 0);
- gtk_widget_show (hbox);
+ bind_visibility (dialog, dialog->details->share_entry, label);
- label = gtk_label_new_with_mnemonic (" ");
+ /* fourth row: folder entry */
+ label = gtk_label_new (_("Folder:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_table_attach (GTK_TABLE (table), label,
+ 0, 1,
+ 3, 4,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
gtk_widget_show (label);
- gtk_box_pack_start (GTK_BOX (hbox),
- label, FALSE, FALSE, 0);
+ dialog->details->folder_entry = gtk_entry_new ();
+ gtk_entry_set_text (GTK_ENTRY (dialog->details->folder_entry), "/");
+ gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->folder_entry), TRUE);
+ gtk_table_attach (GTK_TABLE (table), dialog->details->folder_entry,
+ 1, 2,
+ 3, 4,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
+ gtk_widget_show (dialog->details->folder_entry);
+
+ /* user details label */
+ label = gtk_label_new (NULL);
+ str = g_strdup_printf ("<b>%s</b>", _("User Details"));
+ gtk_label_set_markup (GTK_LABEL (label), str);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (content_area), label, FALSE, FALSE, 6);
+ /* user details alignment */
+ alignment = gtk_alignment_new (0, 0, 0, 0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment),
+ 0, 0, 12, 0);
+ gtk_box_pack_start (GTK_BOX (content_area), alignment, TRUE, TRUE, 0);
- dialog->details->table = table = gtk_table_new (5, 2, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 6);
- gtk_table_set_col_spacings (GTK_TABLE (table), 12);
+ bind_visibility (dialog, alignment, label);
+ dialog->details->user_details = alignment;
+
+ table = gtk_table_new (2, 2, FALSE);
+ gtk_container_add (GTK_CONTAINER (alignment), table);
gtk_widget_show (table);
- gtk_box_pack_start (GTK_BOX (hbox),
- table, TRUE, TRUE, 0);
- dialog->details->uri_entry = caja_location_entry_new ();
- /* hide the clean icon, as it doesn't make sense here */
- g_object_set (dialog->details->uri_entry, "secondary-icon-name", NULL, NULL);
- dialog->details->server_entry = gtk_entry_new ();
- dialog->details->share_entry = gtk_entry_new ();
- dialog->details->port_entry = gtk_entry_new ();
- g_signal_connect (dialog->details->port_entry, "insert_text", G_CALLBACK (port_insert_text),
- NULL);
- dialog->details->folder_entry = gtk_entry_new ();
+ /* first row: domain entry */
+ label = gtk_label_new (_("Domain Name:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_table_attach (GTK_TABLE (table), label,
+ 0, 1,
+ 0, 1,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
+
dialog->details->domain_entry = gtk_entry_new ();
+ gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->domain_entry), TRUE);
+ gtk_table_attach (GTK_TABLE (table), dialog->details->domain_entry,
+ 1, 2,
+ 0, 1,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
+
+ bind_visibility (dialog, dialog->details->domain_entry, label);
+
+ /* second row: username entry */
+ label = gtk_label_new (_("User Name:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_table_attach (GTK_TABLE (table), label,
+ 0, 1,
+ 1, 2,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
+
dialog->details->user_entry = gtk_entry_new ();
+ gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->user_entry), TRUE);
+ gtk_table_attach (GTK_TABLE (table), dialog->details->user_entry,
+ 1, 2,
+ 1, 2,
+ GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 6, 3);
+
+ bind_visibility (dialog, dialog->details->user_entry, label);
+
+ /* add as bookmark */
dialog->details->bookmark_check = gtk_check_button_new_with_mnemonic (_("Add _bookmark"));
- dialog->details->name_entry = gtk_entry_new ();
+ gtk_box_pack_start (GTK_BOX (content_area), dialog->details->bookmark_check, TRUE, TRUE, 0);
+ gtk_widget_show (dialog->details->bookmark_check);
- g_signal_connect (dialog->details->bookmark_check, "toggled",
- G_CALLBACK (bookmark_checkmark_toggled), dialog);
+ hbox = gtk_hbox_new (FALSE, 12);
+ gtk_box_pack_start (GTK_BOX (content_area), hbox, TRUE, TRUE, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->details->bookmark_check), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET(dialog->details->name_entry), FALSE);
+ label = gtk_label_new (_("Bookmark Name:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
- gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->uri_entry), TRUE);
- gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->server_entry), TRUE);
- gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->share_entry), TRUE);
- gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->port_entry), TRUE);
- gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->folder_entry), TRUE);
- gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->domain_entry), TRUE);
- gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->user_entry), TRUE);
- gtk_entry_set_activates_default (GTK_ENTRY (dialog->details->name_entry), TRUE);
-
- /* We need an extra ref so we can remove them from the table */
- g_object_ref (dialog->details->uri_entry);
- g_object_ref (dialog->details->server_entry);
- g_object_ref (dialog->details->share_entry);
- g_object_ref (dialog->details->port_entry);
- g_object_ref (dialog->details->folder_entry);
- g_object_ref (dialog->details->domain_entry);
- g_object_ref (dialog->details->user_entry);
- g_object_ref (dialog->details->bookmark_check);
- g_object_ref (dialog->details->name_entry);
+ dialog->details->name_entry = gtk_entry_new ();
+ gtk_box_pack_start (GTK_BOX (hbox), dialog->details->name_entry, TRUE, TRUE, 0);
+ gtk_widget_show_all (hbox);
+
+ g_object_bind_property (dialog->details->bookmark_check, "active",
+ dialog->details->name_entry, "sensitive",
+ G_BINDING_DEFAULT |
+ G_BINDING_SYNC_CREATE);
setup_for_type (dialog);
gtk_dialog_add_button (GTK_DIALOG (dialog),
@@ -1014,21 +649,25 @@ caja_connect_server_dialog_init (CajaConnectServerDialog *dialog)
gtk_dialog_add_button (GTK_DIALOG (dialog),
GTK_STOCK_CANCEL,
GTK_RESPONSE_CANCEL);
- gtk_dialog_add_button (GTK_DIALOG (dialog),
- _("C_onnect"),
- RESPONSE_CONNECT);
+ connect_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
+ _("C_onnect"),
+ RESPONSE_CONNECT);
gtk_dialog_set_default_response (GTK_DIALOG (dialog),
RESPONSE_CONNECT);
+ g_signal_connect (dialog->details->server_entry, "changed",
+ G_CALLBACK (entry_changed_callback),
+ connect_button);
+ entry_changed_callback (GTK_EDITABLE (dialog->details->server_entry),
+ connect_button);
+
g_signal_connect (dialog, "response",
G_CALLBACK (response_callback),
dialog);
-
-
}
GtkWidget *
-caja_connect_server_dialog_new (CajaWindow *window, GFile *location)
+caja_connect_server_dialog_new (CajaWindow *window)
{
CajaConnectServerDialog *conndlg;
GtkWidget *dialog;
@@ -1043,14 +682,5 @@ caja_connect_server_dialog_new (CajaWindow *window, GFile *location)
conndlg->details->application = window->application;
}
- if (location)
- {
- /* If it's a remote URI, then load as the default */
- if (!g_file_is_native (location))
- {
- display_server_location (conndlg, location);
- }
- }
-
return dialog;
}
diff --git a/src/caja-connect-server-dialog.h b/src/caja-connect-server-dialog.h
index 135df55f..65c8c58e 100644
--- a/src/caja-connect-server-dialog.h
+++ b/src/caja-connect-server-dialog.h
@@ -49,8 +49,7 @@ struct _CajaConnectServerDialogClass
};
GType caja_connect_server_dialog_get_type (void);
-GtkWidget* caja_connect_server_dialog_new (CajaWindow *window,
- GFile *location);
+GtkWidget* caja_connect_server_dialog_new (CajaWindow *window);
/* Private internal calls */