diff options
author | Brian Cameron <brian.cameron@sun.com> | 2007-04-10 03:34:24 +0000 |
---|---|---|
committer | Brian Cameron <bcameron@src.gnome.org> | 2007-04-10 03:34:24 +0000 |
commit | e05bfea92121f6b7fa62887572dc7962868bf64b (patch) | |
tree | 8842b9a2fae5f1a63207b77d7307376877114540 | |
parent | 17e42e712a6fec636e457930b085b5a09dbd203f (diff) | |
download | gdm-e05bfea92121f6b7fa62887572dc7962868bf64b.tar.gz |
Fix language restart dialog so it works properly with the gdmgreeter
2007-04-09 Brian Cameron <brian.cameron@sun.com>
* gui/gdmlanguages.[ch], gui/greeter/greeter_item_customlist.c:
Fix language restart dialog so it works properly with the
gdmgreeter language combo/list style selection, not just
with the language dialog that pops up from the menu.
svn path=/trunk/; revision=4817
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | gui/gdmlanguages.c | 74 | ||||
-rw-r--r-- | gui/gdmlanguages.h | 6 | ||||
-rw-r--r-- | gui/greeter/greeter_item_customlist.c | 27 |
4 files changed, 75 insertions, 39 deletions
@@ -1,5 +1,12 @@ 2007-04-09 Brian Cameron <brian.cameron@sun.com> + * gui/gdmlanguages.[ch], gui/greeter/greeter_item_customlist.c: + Fix language restart dialog so it works properly with the + gdmgreeter language combo/list style selection, not just + with the language dialog that pops up from the menu. + +2007-04-09 Brian Cameron <brian.cameron@sun.com> + * gui/gdmlanguages.c: When the user changes language, GDM pops up a dialog asking if the user wants to restart GDM. If the user picks "No", the new language should still be applied for when the diff --git a/gui/gdmlanguages.c b/gui/gdmlanguages.c index 0366a9f3..117d152d 100644 --- a/gui/gdmlanguages.c +++ b/gui/gdmlanguages.c @@ -725,13 +725,13 @@ gdm_lang_initialize_model (gchar * locale_file) } gint -gdm_lang_get_save_language (void) +gdm_lang_get_savelang_setting (void) { return savelang; } gchar * -gdm_lang_get_language (const char *old_language) +gdm_lang_check_language (const char *old_language) { gchar *retval = NULL; @@ -917,7 +917,7 @@ gdm_lang_setup_treeview (void) } } -static gint +gint gdm_lang_ask_restart (gchar *language) { GtkWidget *dialog; @@ -965,6 +965,47 @@ gdm_lang_restart_handler (GtkMenuItem *menu_item, gpointer user_data) always_restart = FALSE; } +static gchar * +gdm_lang_get (void) +{ + return (current_language); +} + +void +gdm_lang_set_restart_dialog (char *language) +{ + /* + * Don't do anything if the language is already set to + * this value. + */ +printf ("got here %s\n", language); +if (current_language != NULL) +printf ("current lang is %s\n", current_language); + if (current_language == NULL || + (current_language != NULL && + strcmp (current_language, language) != 0)) + { + gint response = GTK_RESPONSE_YES; + + if (strcmp (language, LAST_LANGUAGE)) + response = gdm_lang_ask_restart (language); + + gdm_lang_set (language); + + if (strcmp (language, LAST_LANGUAGE) && + (response == GTK_RESPONSE_YES)) + { + printf ("%c%c%c%c%s\n", STX, + BEL, + GDM_INTERRUPT_SELECT_LANG, + response == GTK_RESPONSE_YES ? 1 : 0, + language); + fflush (stdout); + + } + } +} + void gdm_lang_set (char *language) { @@ -1039,25 +1080,8 @@ gdm_lang_handler (gpointer user_data) { case GTK_RESPONSE_OK: if (dialog_selected_language) - { - gint response = GTK_RESPONSE_YES; - - if (strcmp (dialog_selected_language, LAST_LANGUAGE)) - response = gdm_lang_ask_restart (dialog_selected_language); - - gdm_lang_set ((char *) dialog_selected_language); - - if (strcmp (dialog_selected_language, LAST_LANGUAGE) - && (response == GTK_RESPONSE_YES)) - { - printf ("%c%c%c%c%s\n", STX, - BEL, - GDM_INTERRUPT_SELECT_LANG, - response == GTK_RESPONSE_YES ? 1 : 0, - dialog_selected_language); - fflush (stdout); - } - } + gdm_lang_set_restart_dialog (dialog_selected_language); + break; case GTK_RESPONSE_CANCEL: default: @@ -1073,9 +1097,9 @@ gdm_lang_handler (gpointer user_data) int gdm_lang_op_lang (const gchar *args) { - gchar *language = gdm_lang_get_language (args); + gchar *language = gdm_lang_check_language (args); - if (gdm_lang_get_save_language () == GTK_RESPONSE_CANCEL) + if (gdm_lang_get_savelang_setting () == GTK_RESPONSE_CANCEL) printf ("%c%s\n", STX, GDM_RESPONSE_CANCEL); else printf ("%c%s\n", STX, language); @@ -1088,7 +1112,7 @@ gdm_lang_op_lang (const gchar *args) int gdm_lang_op_slang (const gchar *args) { - if (gdm_lang_get_save_language () == GTK_RESPONSE_YES) + if (gdm_lang_get_savelang_setting () == GTK_RESPONSE_YES) printf ("%cY\n", STX); else printf ("%c\n", STX); diff --git a/gui/gdmlanguages.h b/gui/gdmlanguages.h index 9d6ee31f..65479a0b 100644 --- a/gui/gdmlanguages.h +++ b/gui/gdmlanguages.h @@ -56,13 +56,15 @@ GList * gdm_lang_read_locale_file (const char *file); GtkListStore * gdm_lang_get_model (void); void gdm_lang_initialize_model (gchar *locale_file); -gint gdm_lang_get_save_language (void); -gchar * gdm_lang_get_language (const char *old_language); +gchar * gdm_lang_check_language (const char *old_language); void gdm_lang_set (char *language); +void gdm_lang_set_restart_dialog (char *language); +gint gdm_lang_get_savelang_setting (void); void gdm_lang_handler (gpointer user_data); int gdm_lang_op_lang (const gchar *args); int gdm_lang_op_slang (const gchar *args); int gdm_lang_op_setlang (const gchar *args); int gdm_lang_op_always_restart (const gchar *args); +gint gdm_lang_ask_restart (gchar *language); #endif /* GDM_LANGUAGES_H */ diff --git a/gui/greeter/greeter_item_customlist.c b/gui/greeter/greeter_item_customlist.c index 4b56120c..6ab9cccd 100644 --- a/gui/greeter/greeter_item_customlist.c +++ b/gui/greeter/greeter_item_customlist.c @@ -30,6 +30,7 @@ #include "gdm-common.h" #include "gdm-daemon-config-keys.h" +#include "gdm-socket-protocol.h" #include "greeter_item.h" #include "greeter_configuration.h" @@ -37,6 +38,8 @@ #include "greeter_parser.h" #include "greeter_session.h" +#define LAST_LANGUAGE "Last" + /* * Keep track of the session/language widgets so we can * set their values when the session/language dialogs are @@ -317,7 +320,7 @@ populate_language (GObject *object) { GtkListStore *lang_model = gdm_lang_get_model (); GtkTreeIter iter; - char *name, *untranslated, *display_name, *locale_name; + char *name, *untranslated, *lang_display_name, *locale_name; gboolean valid; valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (lang_model), @@ -330,12 +333,12 @@ populate_language (GObject *object) LOCALE_COLUMN, &locale_name, -1); if (untranslated) - display_name = g_strdup_printf ("%s (%s)", name, untranslated); + lang_display_name = g_strdup_printf ("%s (%s)", name, untranslated); else - display_name = g_strdup (name); + lang_display_name = g_strdup (name); if (GTK_IS_COMBO_BOX (object)) - gtk_combo_box_append_text (GTK_COMBO_BOX (object), display_name); + gtk_combo_box_append_text (GTK_COMBO_BOX (object), lang_display_name); else if (GTK_IS_TREE_MODEL (object)) { GtkTreeIter loopiter; @@ -343,7 +346,7 @@ populate_language (GObject *object) gtk_list_store_append (GTK_LIST_STORE (tm), &loopiter); gtk_list_store_set (GTK_LIST_STORE (tm), &loopiter, - GREETER_LIST_TEXT, display_name, + GREETER_LIST_TEXT, lang_display_name, GREETER_LIST_ID, locale_name, -1); } @@ -414,7 +417,7 @@ combo_selected (GtkComboBox *combo, GreeterItemInfo *item) */ GtkListStore *lang_model = gdm_lang_get_model (); GtkTreeIter iter; - char *name, *untranslated, *display_name, *locale_name; + char *name, *untranslated, *lang_display_name, *locale_name; gboolean valid; valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (lang_model), @@ -427,16 +430,16 @@ combo_selected (GtkComboBox *combo, GreeterItemInfo *item) LOCALE_COLUMN, &locale_name, -1); if (untranslated) - display_name = g_strdup_printf ("%s (%s)", name, untranslated); + lang_display_name = g_strdup_printf ("%s (%s)", name, untranslated); else - display_name = g_strdup (name); + lang_display_name = g_strdup (name); - if (strcmp (display_name, active) == 0) + if (strcmp (lang_display_name, active) == 0) { - gdm_lang_set (locale_name); + gdm_lang_set_restart_dialog (locale_name); break; } - g_free (display_name); + g_free (lang_display_name); valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (lang_model), &iter); } } @@ -523,7 +526,7 @@ list_selected (GtkTreeSelection *selection, GreeterItemInfo *item) else if (strcmp (item->id, "language") == 0) { if (id != NULL) - gdm_lang_set (id); + gdm_lang_set_restart_dialog (id); } else { |