region: And remember to show the logout button if launched again

https://bugzilla.gnome.org/show_bug.cgi?id=647373
This commit is contained in:
Bastien Nocera 2012-11-23 18:51:21 +01:00
parent 3eb6cdd1bc
commit 96247c6187

View file

@ -93,6 +93,30 @@ is_old_locale (const char *new_locale)
return ret; return ret;
} }
static void
update_logout_button (GtkBuilder *builder,
const char *locale)
{
GtkWidget *widget;
char *old_lang;
/* Offer log out in the new language, unless it is
* the original session language */
widget = (GtkWidget *)gtk_builder_get_object (builder, "logout_button");
if (is_old_locale (locale) == FALSE) {
old_lang = g_strdup (setlocale (LC_MESSAGES, NULL));
setlocale (LC_MESSAGES, locale);
gtk_button_set_label (GTK_BUTTON (widget), _("Log out for changes to take effect"));
setlocale (LC_MESSAGES, old_lang);
g_free (old_lang);
gtk_widget_show (widget);
} else {
gtk_widget_hide (widget);
}
}
static void static void
selection_changed (GtkTreeSelection *selection, selection_changed (GtkTreeSelection *selection,
GtkBuilder *builder) GtkBuilder *builder)
@ -104,8 +128,6 @@ selection_changed (GtkTreeSelection *selection,
GVariant *variant; GVariant *variant;
GError *error = NULL; GError *error = NULL;
char *object_path; char *object_path;
GtkWidget *widget;
char *old_lang;
if (gtk_tree_selection_get_selected (selection, &model, &iter) == FALSE) { if (gtk_tree_selection_get_selected (selection, &model, &iter) == FALSE) {
g_warning ("No selected languages, this shouldn't happen"); g_warning ("No selected languages, this shouldn't happen");
@ -174,21 +196,7 @@ selection_changed (GtkTreeSelection *selection,
formats_update_language (builder, locale); formats_update_language (builder, locale);
system_update_language (builder, locale); system_update_language (builder, locale);
/* Offer log out in the new language, unless it is update_logout_button (builder, locale);
* the original session language */
widget = (GtkWidget *)gtk_builder_get_object (builder, "logout_button");
if (is_old_locale (locale) == FALSE) {
old_lang = g_strdup (setlocale (LC_MESSAGES, NULL));
setlocale (LC_MESSAGES, locale);
gtk_button_set_label (GTK_BUTTON (widget), _("Log out for changes to take effect"));
setlocale (LC_MESSAGES, old_lang);
g_free (old_lang);
gtk_widget_show (widget);
} else {
gtk_widget_hide (widget);
}
bail: bail:
if (variant != NULL) if (variant != NULL)
@ -268,6 +276,7 @@ setup_language (GtkBuilder *builder)
GtkWidget *widget; GtkWidget *widget;
GtkStyleContext *context; GtkStyleContext *context;
GtkTreeSelection *selection; GtkTreeSelection *selection;
char *locale;
/* Setup junction between toolbar and treeview */ /* Setup junction between toolbar and treeview */
widget = (GtkWidget *)gtk_builder_get_object (builder, "language-swindow"); widget = (GtkWidget *)gtk_builder_get_object (builder, "language-swindow");
@ -328,6 +337,10 @@ setup_language (GtkBuilder *builder)
/* And select the current language */ /* And select the current language */
cc_common_language_select_current_language (GTK_TREE_VIEW (treeview)); cc_common_language_select_current_language (GTK_TREE_VIEW (treeview));
/* Show the logout button if necessary */
locale = cc_common_language_get_current_language ();
update_logout_button (builder, locale);
/* And now listen for changes */ /* And now listen for changes */
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
g_signal_connect (G_OBJECT (selection), "changed", g_signal_connect (G_OBJECT (selection), "changed",