summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Cameron <brian.cameron@sun.com>2007-04-10 03:34:24 +0000
committerBrian Cameron <bcameron@src.gnome.org>2007-04-10 03:34:24 +0000
commite05bfea92121f6b7fa62887572dc7962868bf64b (patch)
tree8842b9a2fae5f1a63207b77d7307376877114540
parent17e42e712a6fec636e457930b085b5a09dbd203f (diff)
downloadgdm-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--ChangeLog7
-rw-r--r--gui/gdmlanguages.c74
-rw-r--r--gui/gdmlanguages.h6
-rw-r--r--gui/greeter/greeter_item_customlist.c27
4 files changed, 75 insertions, 39 deletions
diff --git a/ChangeLog b/ChangeLog
index bdcf689e..baa8399c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
{