user-accounts: simplify language changing thru users panel

Do not show combo box with common languages and show the language
chooser immediately as it is done in the region panel.

https://bugzilla.gnome.org/show_bug.cgi?id=738077
This commit is contained in:
Ondrej Holy 2014-10-15 12:41:51 +02:00
parent 2640a9dfd7
commit 96c0c0a838
2 changed files with 50 additions and 80 deletions

View file

@ -383,7 +383,7 @@
<property name="xalign">1</property> <property name="xalign">1</property>
<property name="label" translatable="yes">_Language</property> <property name="label" translatable="yes">_Language</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="mnemonic_widget">account-language-combo</property> <property name="mnemonic_widget">account-language-button</property>
<style> <style>
<class name="dim-label"/> <class name="dim-label"/>
</style> </style>
@ -396,10 +396,8 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="UmEditableCombo" id="account-language-combo"> <object class="UmEditableButton" id="account-language-button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="model">language-model</property>
<property name="text-column">1</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
</object> </object>
<packing> <packing>
@ -510,7 +508,7 @@
<property name="mode">both</property> <property name="mode">both</property>
<widgets> <widgets>
<widget name="account-fingerprint-button"/> <widget name="account-fingerprint-button"/>
<widget name="account-language-combo"/> <widget name="account-language-button"/>
<widget name="account-password-button"/> <widget name="account-password-button"/>
<widget name="account-type-combo"/> <widget name="account-type-combo"/>
<widget name="autologin-box"/> <widget name="autologin-box"/>

View file

@ -665,10 +665,8 @@ show_user (ActUser *user, CcUserPanelPrivate *d)
GtkWidget *image; GtkWidget *image;
GtkWidget *label; GtkWidget *label;
GdkPixbuf *pixbuf; GdkPixbuf *pixbuf;
gchar *lang, *text; gchar *lang, *text, *name;
GtkWidget *widget; GtkWidget *widget;
GtkTreeModel *model;
GtkTreeIter iter;
gboolean show, enable; gboolean show, enable;
ActUser *current; ActUser *current;
@ -699,22 +697,21 @@ show_user (ActUser *user, CcUserPanelPrivate *d)
g_signal_handlers_unblock_by_func (widget, autologin_changed, d); g_signal_handlers_unblock_by_func (widget, autologin_changed, d);
gtk_widget_set_sensitive (widget, get_autologin_possible (user)); gtk_widget_set_sensitive (widget, get_autologin_possible (user));
widget = get_widget (d, "account-language-combo"); widget = get_widget (d, "account-language-button");
model = um_editable_combo_get_model (UM_EDITABLE_COMBO (widget));
cc_common_language_add_user_languages (model);
name = NULL;
lang = g_strdup (act_user_get_language (user)); lang = g_strdup (act_user_get_language (user));
if ((!lang || *lang == '\0') && act_user_get_uid (user) == getuid ()) { if ((!lang || *lang == '\0') && act_user_get_uid (user) == getuid ()) {
lang = cc_common_language_get_current_language (); lang = cc_common_language_get_current_language ();
act_user_set_language (user, lang); act_user_set_language (user, lang);
} }
if (cc_common_language_get_iter_for_language (model, lang, &iter)) { if (lang && *lang != '\0') {
um_editable_combo_set_active_iter (UM_EDITABLE_COMBO (widget), &iter); name = gnome_get_language_from_locale (lang, NULL);
} else {
um_editable_combo_set_active_iter (UM_EDITABLE_COMBO (widget), NULL);
} }
um_editable_button_set_text (UM_EDITABLE_BUTTON (widget), name);
g_free (lang); g_free (lang);
g_free (name);
/* Fingerprint: show when self, possible, and local account */ /* Fingerprint: show when self, possible, and local account */
widget = get_widget (d, "account-fingerprint-button"); widget = get_widget (d, "account-fingerprint-button");
@ -813,48 +810,6 @@ account_type_changed (UmEditableCombo *combo,
g_object_unref (user); g_object_unref (user);
} }
static void
language_response (GtkDialog *dialog,
gint response_id,
CcUserPanelPrivate *d)
{
GtkWidget *combo;
ActUser *user;
gchar *lang = NULL;
GtkTreeModel *model;
GtkTreeIter iter;
user = get_selected_user (d);
combo = get_widget (d, "account-language-combo");
model = um_editable_combo_get_model (UM_EDITABLE_COMBO (combo));
if (response_id == GTK_RESPONSE_OK) {
lang = g_strdup (cc_language_chooser_get_language (GTK_WIDGET (dialog)));
}
if (lang != NULL) {
act_user_set_language (user, lang);
}
else {
lang = g_strdup (act_user_get_language (user));
}
if (cc_common_language_get_iter_for_language (model, lang, &iter)) {
um_editable_combo_set_active_iter (UM_EDITABLE_COMBO (combo), &iter);
}
else {
um_editable_combo_set_active_iter (UM_EDITABLE_COMBO (combo), NULL);
}
g_free (lang);
gtk_widget_hide (GTK_WIDGET (dialog));
gtk_widget_set_sensitive (combo, TRUE);
g_object_unref (user);
}
static void static void
restart_now (CcUserPanelPrivate *d) restart_now (CcUserPanelPrivate *d)
{ {
@ -875,7 +830,7 @@ restart_now (CcUserPanelPrivate *d)
} }
static void static void
show_restart_notification (CcUserPanelPrivate *d, gchar *locale) show_restart_notification (CcUserPanelPrivate *d, const gchar *locale)
{ {
GtkWidget *box; GtkWidget *box;
GtkWidget *label; GtkWidget *label;
@ -919,27 +874,26 @@ show_restart_notification (CcUserPanelPrivate *d, gchar *locale)
} }
static void static void
language_changed (UmEditableCombo *combo, language_response (GtkDialog *dialog,
CcUserPanelPrivate *d) gint response_id,
CcUserPanelPrivate *d)
{ {
GtkTreeModel *model; GtkWidget *button;
GtkTreeIter iter;
gchar *lang;
const gchar *current_language;
ActUser *user; ActUser *user;
const gchar *lang, *current_language;
gchar *name = NULL;
gboolean self_selected; gboolean self_selected;
if (!um_editable_combo_get_active_iter (combo, &iter)) if (response_id != GTK_RESPONSE_OK) {
return; gtk_widget_hide (GTK_WIDGET (dialog));
return;
}
user = get_selected_user (d); user = get_selected_user (d);
current_language = act_user_get_language (user); current_language = act_user_get_language (user);
self_selected = act_user_get_uid (user) == geteuid (); self_selected = act_user_get_uid (user) == geteuid ();
model = um_editable_combo_get_model (combo); lang = cc_language_chooser_get_language (GTK_WIDGET (dialog));
gtk_tree_model_get (model, &iter, 0, &lang, -1);
if (lang) { if (lang) {
if (g_strcmp0 (lang, current_language) != 0) { if (g_strcmp0 (lang, current_language) != 0) {
act_user_set_language (user, lang); act_user_set_language (user, lang);
@ -947,10 +901,30 @@ language_changed (UmEditableCombo *combo,
if (self_selected) if (self_selected)
show_restart_notification (d, lang); show_restart_notification (d, lang);
} }
g_free (lang);
goto out; act_user_set_language (user, lang);
button = get_widget (d, "account-language-button");
name = gnome_get_language_from_locale (lang, NULL);
um_editable_button_set_text (UM_EDITABLE_BUTTON (button), name);
g_free (name);
} }
g_object_unref (user);
gtk_widget_hide (GTK_WIDGET (dialog));
}
static void
change_language (GtkButton *button,
CcUserPanelPrivate *d)
{
const gchar *current_language;
ActUser *user;
user = get_selected_user (d);
current_language = act_user_get_language (user);
if (d->language_chooser) { if (d->language_chooser) {
cc_language_chooser_clear_filter (d->language_chooser); cc_language_chooser_clear_filter (d->language_chooser);
cc_language_chooser_set_language (d->language_chooser, NULL); cc_language_chooser_set_language (d->language_chooser, NULL);
@ -969,9 +943,7 @@ language_changed (UmEditableCombo *combo,
if (current_language && *current_language != '\0') if (current_language && *current_language != '\0')
cc_language_chooser_set_language (d->language_chooser, current_language); cc_language_chooser_set_language (d->language_chooser, current_language);
gtk_window_present (GTK_WINDOW (d->language_chooser)); gtk_window_present (GTK_WINDOW (d->language_chooser));
gtk_widget_set_sensitive (GTK_WIDGET (combo), FALSE);
out:
g_object_unref (user); g_object_unref (user);
} }
@ -1248,8 +1220,8 @@ on_permission_changed (GPermission *permission,
gtk_widget_show (get_widget (d, "user-icon-button")); gtk_widget_show (get_widget (d, "user-icon-button"));
gtk_widget_hide (get_widget (d, "user-icon-nonbutton")); gtk_widget_hide (get_widget (d, "user-icon-nonbutton"));
um_editable_combo_set_editable (UM_EDITABLE_COMBO (get_widget (d, "account-language-combo")), TRUE); um_editable_button_set_editable (UM_EDITABLE_BUTTON (get_widget (d, "account-language-button")), TRUE);
remove_unlock_tooltip (get_widget (d, "account-language-combo")); remove_unlock_tooltip (get_widget (d, "account-language-button"));
um_editable_button_set_editable (UM_EDITABLE_BUTTON (get_widget (d, "account-password-button")), TRUE); um_editable_button_set_editable (UM_EDITABLE_BUTTON (get_widget (d, "account-password-button")), TRUE);
remove_unlock_tooltip (get_widget (d, "account-password-button")); remove_unlock_tooltip (get_widget (d, "account-password-button"));
@ -1261,8 +1233,8 @@ on_permission_changed (GPermission *permission,
gtk_widget_hide (get_widget (d, "user-icon-button")); gtk_widget_hide (get_widget (d, "user-icon-button"));
gtk_widget_show (get_widget (d, "user-icon-nonbutton")); gtk_widget_show (get_widget (d, "user-icon-nonbutton"));
um_editable_combo_set_editable (UM_EDITABLE_COMBO (get_widget (d, "account-language-combo")), FALSE); um_editable_button_set_editable (UM_EDITABLE_BUTTON (get_widget (d, "account-language-button")), FALSE);
add_unlock_tooltip (get_widget (d, "account-language-combo")); add_unlock_tooltip (get_widget (d, "account-language-button"));
um_editable_button_set_editable (UM_EDITABLE_BUTTON (get_widget (d, "account-password-button")), FALSE); um_editable_button_set_editable (UM_EDITABLE_BUTTON (get_widget (d, "account-password-button")), FALSE);
add_unlock_tooltip (get_widget (d, "account-password-button")); add_unlock_tooltip (get_widget (d, "account-password-button"));
@ -1454,8 +1426,8 @@ setup_main_window (CcUserPanelPrivate *d)
button = get_widget (d, "account-password-button"); button = get_widget (d, "account-password-button");
g_signal_connect (button, "start-editing", G_CALLBACK (change_password), d); g_signal_connect (button, "start-editing", G_CALLBACK (change_password), d);
button = get_widget (d, "account-language-combo"); button = get_widget (d, "account-language-button");
g_signal_connect (button, "editing-done", G_CALLBACK (language_changed), d); g_signal_connect (button, "start-editing", G_CALLBACK (change_language), d);
button = get_widget (d, "autologin-switch"); button = get_widget (d, "autologin-switch");
g_signal_connect (button, "notify::active", G_CALLBACK (autologin_changed), d); g_signal_connect (button, "notify::active", G_CALLBACK (autologin_changed), d);