[gtk+] Improve the layout of the mount operation dialog
- From: William Jon McCann <mccann src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Improve the layout of the mount operation dialog
- Date: Fri, 24 Aug 2012 22:13:15 +0000 (UTC)
commit e296bff85f120c1c0a0c67480ed869d9dd9963a5
Author: William Jon McCann <jmccann redhat com>
Date: Thu Aug 23 12:04:23 2012 -0400
Improve the layout of the mount operation dialog
This improves the layout of the mount operations dialog to:
* Make primary labels bold in all cases
* Lay out the widgets in a grid
* Put space between the two radio groups to distinguish them
https://bugzilla.gnome.org/show_bug.cgi?id=682552
gtk/gtkmountoperation.c | 152 ++++++++++++++++++++++++----------------------
1 files changed, 79 insertions(+), 73 deletions(-)
---
diff --git a/gtk/gtkmountoperation.c b/gtk/gtkmountoperation.c
index 9b1d544..fa61746 100644
--- a/gtk/gtkmountoperation.c
+++ b/gtk/gtkmountoperation.c
@@ -124,11 +124,12 @@ struct _GtkMountOperationPrivate {
gboolean handler_showing;
/* for the ask-password dialog */
- GtkWidget *entry_container;
+ GtkWidget *grid;
GtkWidget *username_entry;
GtkWidget *domain_entry;
GtkWidget *password_entry;
GtkWidget *anonymous_toggle;
+ GList *user_widgets;
GAskPasswordFlags ask_flags;
GPasswordSave password_save;
@@ -208,6 +209,9 @@ gtk_mount_operation_finalize (GObject *object)
GtkMountOperation *operation = GTK_MOUNT_OPERATION (object);
GtkMountOperationPrivate *priv = operation->priv;
+ if (priv->user_widgets)
+ g_list_free (priv->user_widgets);
+
if (priv->parent_window)
g_object_unref (priv->parent_window);
@@ -401,6 +405,7 @@ pw_dialog_anonymous_toggled (GtkWidget *widget,
{
GtkMountOperationPrivate *priv = operation->priv;
gboolean is_valid;
+ GList *l;
priv->anonymous = widget == priv->anonymous_toggle;
@@ -409,7 +414,11 @@ pw_dialog_anonymous_toggled (GtkWidget *widget,
else
is_valid = pw_dialog_input_is_valid (operation);
- gtk_widget_set_sensitive (priv->entry_container, priv->anonymous == FALSE);
+ for (l = priv->user_widgets; l != NULL; l = l->next)
+ {
+ gtk_widget_set_sensitive (GTK_WIDGET (l->data), !priv->anonymous);
+ }
+
gtk_dialog_set_response_sensitive (GTK_DIALOG (priv->dialog),
GTK_RESPONSE_OK,
is_valid);
@@ -442,28 +451,31 @@ pw_dialog_cycle_focus (GtkWidget *widget,
}
static GtkWidget *
-table_add_entry (GtkWidget *table,
- int row,
- const char *label_text,
- const char *value,
- gpointer user_data)
+table_add_entry (GtkMountOperation *operation,
+ int row,
+ const char *label_text,
+ const char *value,
+ gpointer user_data)
{
GtkWidget *entry;
GtkWidget *label;
label = gtk_label_new_with_mnemonic (label_text);
- gtk_widget_set_halign (label, GTK_ALIGN_START);
+ gtk_widget_set_halign (label, GTK_ALIGN_END);
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
- gtk_widget_set_hexpand (label, TRUE);
+ gtk_widget_set_hexpand (label, FALSE);
+ operation->priv->user_widgets = g_list_prepend (operation->priv->user_widgets, label);
entry = gtk_entry_new ();
+ gtk_widget_set_hexpand (entry, TRUE);
if (value)
gtk_entry_set_text (GTK_ENTRY (entry), value);
- gtk_grid_attach (GTK_GRID (table), label, 0, row, 1, 1);
- gtk_grid_attach (GTK_GRID (table), entry, 1, row, 1, 1);
+ gtk_grid_attach (GTK_GRID (operation->priv->grid), label, 0, row, 1, 1);
+ gtk_grid_attach (GTK_GRID (operation->priv->grid), entry, 1, row, 1, 1);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
+ operation->priv->user_widgets = g_list_prepend (operation->priv->user_widgets, entry);
g_signal_connect (entry, "changed",
G_CALLBACK (pw_dialog_verify_input), user_data);
@@ -484,13 +496,15 @@ gtk_mount_operation_ask_password_do_gtk (GtkMountOperation *operation,
GtkWidget *widget;
GtkDialog *dialog;
GtkWindow *window;
- GtkWidget *hbox, *main_vbox, *vbox, *icon;
- GtkWidget *table;
- GtkWidget *message_label;
+ GtkWidget *hbox, *main_vbox, *icon;
+ GtkWidget *grid;
+ GtkWidget *label;
GtkWidget *content_area, *action_area;
gboolean can_anonymous;
guint rows;
+ gchar *primary;
const gchar *secondary;
+ PangoAttrList *attrs;
priv = operation->priv;
@@ -542,38 +556,46 @@ gtk_mount_operation_ask_password_do_gtk (GtkMountOperation *operation,
secondary = strstr (message, "\n");
if (secondary != NULL)
{
- gchar *s;
- gchar *primary;
-
primary = g_strndup (message, secondary - message + 1);
- s = g_strdup_printf ("<big><b>%s</b></big>%s", primary, secondary);
-
- message_label = gtk_label_new (NULL);
- gtk_label_set_markup (GTK_LABEL (message_label), s);
- gtk_widget_set_halign (message_label, GTK_ALIGN_START);
- gtk_widget_set_valign (message_label, GTK_ALIGN_CENTER);
- gtk_label_set_line_wrap (GTK_LABEL (message_label), TRUE);
- gtk_box_pack_start (GTK_BOX (main_vbox), GTK_WIDGET (message_label),
- FALSE, TRUE, 0);
-
- g_free (s);
- g_free (primary);
}
else
{
- message_label = gtk_label_new (message);
- gtk_widget_set_halign (message_label, GTK_ALIGN_START);
- gtk_widget_set_valign (message_label, GTK_ALIGN_CENTER);
- gtk_label_set_line_wrap (GTK_LABEL (message_label), TRUE);
- gtk_box_pack_start (GTK_BOX (main_vbox), GTK_WIDGET (message_label),
+ primary = g_strdup (message);
+ }
+
+ label = gtk_label_new (primary);
+ gtk_widget_set_halign (label, GTK_ALIGN_START);
+ gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_box_pack_start (GTK_BOX (main_vbox), GTK_WIDGET (label),
+ FALSE, TRUE, 0);
+ g_free (primary);
+ attrs = pango_attr_list_new ();
+ pango_attr_list_insert (attrs, pango_attr_weight_new (PANGO_WEIGHT_BOLD));
+ gtk_label_set_attributes (GTK_LABEL (label), attrs);
+ pango_attr_list_unref (attrs);
+
+ if (secondary != NULL)
+ {
+ label = gtk_label_new (secondary);
+ gtk_widget_set_halign (label, GTK_ALIGN_START);
+ gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_box_pack_start (GTK_BOX (main_vbox), GTK_WIDGET (label),
FALSE, FALSE, 0);
}
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0);
+ grid = gtk_grid_new ();
+ operation->priv->grid = grid;
+ gtk_grid_set_row_spacing (GTK_GRID (grid), 12);
+ gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
+ gtk_widget_set_margin_bottom (grid, 12);
+ gtk_box_pack_start (GTK_BOX (main_vbox), grid, FALSE, FALSE, 0);
can_anonymous = priv->ask_flags & G_ASK_PASSWORD_ANONYMOUS_SUPPORTED;
+ rows = 0;
+
priv->anonymous_toggle = NULL;
if (can_anonymous)
{
@@ -581,11 +603,16 @@ gtk_mount_operation_ask_password_do_gtk (GtkMountOperation *operation,
GtkWidget *choice;
GSList *group;
- anon_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_box_pack_start (GTK_BOX (vbox), anon_box,
- FALSE, FALSE, 0);
+ label = gtk_label_new (_("Connect As"));
+ gtk_widget_set_halign (label, GTK_ALIGN_END);
+ gtk_widget_set_valign (label, GTK_ALIGN_START);
+ gtk_widget_set_hexpand (label, FALSE);
+ gtk_grid_attach (GTK_GRID (grid), label, 0, rows, 1, 1);
+
+ anon_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_grid_attach (GTK_GRID (grid), anon_box, 1, rows++, 1, 1);
- choice = gtk_radio_button_new_with_mnemonic (NULL, _("Connect _anonymously"));
+ choice = gtk_radio_button_new_with_mnemonic (NULL, _("_Anonymous"));
gtk_box_pack_start (GTK_BOX (anon_box),
choice,
FALSE, FALSE, 0);
@@ -594,7 +621,7 @@ gtk_mount_operation_ask_password_do_gtk (GtkMountOperation *operation,
priv->anonymous_toggle = choice;
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (choice));
- choice = gtk_radio_button_new_with_mnemonic (group, _("Connect as u_ser:"));
+ choice = gtk_radio_button_new_with_mnemonic (group, _("Registered U_ser"));
gtk_box_pack_start (GTK_BOX (anon_box),
choice,
FALSE, FALSE, 0);
@@ -602,63 +629,42 @@ gtk_mount_operation_ask_password_do_gtk (GtkMountOperation *operation,
G_CALLBACK (pw_dialog_anonymous_toggled), operation);
}
- rows = 0;
-
- if (priv->ask_flags & G_ASK_PASSWORD_NEED_PASSWORD)
- rows++;
-
- if (priv->ask_flags & G_ASK_PASSWORD_NEED_USERNAME)
- rows++;
-
- if (priv->ask_flags &G_ASK_PASSWORD_NEED_DOMAIN)
- rows++;
-
- /* The table that holds the entries */
- table = gtk_grid_new ();
- gtk_grid_set_row_spacing (GTK_GRID (table), 6);
- gtk_grid_set_column_spacing (GTK_GRID (table), 6);
-
- if (can_anonymous)
- gtk_widget_set_margin_left (table, 12);
-
- gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
- priv->entry_container = table;
-
- rows = 0;
-
priv->username_entry = NULL;
if (priv->ask_flags & G_ASK_PASSWORD_NEED_USERNAME)
- priv->username_entry = table_add_entry (table, rows++, _("_Username:"),
+ priv->username_entry = table_add_entry (operation, rows++, _("_Username"),
default_user, operation);
priv->domain_entry = NULL;
if (priv->ask_flags & G_ASK_PASSWORD_NEED_DOMAIN)
- priv->domain_entry = table_add_entry (table, rows++, _("_Domain:"),
+ priv->domain_entry = table_add_entry (operation, rows++, _("_Domain"),
default_domain, operation);
priv->password_entry = NULL;
if (priv->ask_flags & G_ASK_PASSWORD_NEED_PASSWORD)
{
- priv->password_entry = table_add_entry (table, rows++, _("_Password:"),
+ priv->password_entry = table_add_entry (operation, rows++, _("_Password"),
NULL, operation);
gtk_entry_set_visibility (GTK_ENTRY (priv->password_entry), FALSE);
}
if (priv->ask_flags & G_ASK_PASSWORD_SAVING_SUPPORTED)
{
- GtkWidget *choice;
GtkWidget *remember_box;
+ GtkWidget *choice;
GSList *group;
GPasswordSave password_save;
- remember_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_box_pack_start (GTK_BOX (vbox), remember_box,
- FALSE, FALSE, 0);
+ remember_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_grid_attach (GTK_GRID (grid), remember_box, 0, rows++, 2, 1);
+ priv->user_widgets = g_list_prepend (priv->user_widgets, remember_box);
+
+ label = gtk_label_new ("");
+ gtk_container_add (GTK_CONTAINER (remember_box), label);
password_save = g_mount_operation_get_password_save (G_MOUNT_OPERATION (operation));
priv->password_save = password_save;
-
+
choice = gtk_radio_button_new_with_mnemonic (NULL, _("Forget password _immediately"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (choice),
password_save == G_PASSWORD_SAVE_NEVER);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]