diff options
author | Brian Cameron <brian.cameron@sun.com> | 2006-07-18 19:06:57 +0000 |
---|---|---|
committer | Brian Cameron <bcameron@src.gnome.org> | 2006-07-18 19:06:57 +0000 |
commit | ff5106b12b48d82cf5fe25d2b801809f569cbcbd (patch) | |
tree | 9e23df12f581207d3d31a446222074f8a2def08f /gui | |
parent | 34ea24e5e95a85d0d16d79c3c4f9a0ee5aea4ced (diff) | |
download | gdm-ff5106b12b48d82cf5fe25d2b801809f569cbcbd.tar.gz |
Fix for bug #341619. Now GDM does not save the Failsafe GNOME or Xterm
2006-07-18 Brian Cameron <brian.cameron@sun.com>
* gui/gdmlogin.c, gui/gdmsession.[ch], gui/greeter/greeter.c,
gui/greeter/greeter_session.[ch]: Fix for bug #341619. Now
GDM does not save the Failsafe GNOME or Xterm session as the
user's default. Cleaned up the code and moved duplicate
functions from gdmlogin/gdmgreeter code to gdmsession common
code.
Diffstat (limited to 'gui')
-rw-r--r-- | gui/gdmlogin.c | 140 | ||||
-rw-r--r-- | gui/gdmsession.c | 154 | ||||
-rw-r--r-- | gui/gdmsession.h | 7 | ||||
-rw-r--r-- | gui/greeter/greeter.c | 6 | ||||
-rw-r--r-- | gui/greeter/greeter_session.c | 148 | ||||
-rw-r--r-- | gui/greeter/greeter_session.h | 3 |
6 files changed, 164 insertions, 294 deletions
diff --git a/gui/gdmlogin.c b/gui/gdmlogin.c index 8ff78b3c..b0be6d71 100644 --- a/gui/gdmlogin.c +++ b/gui/gdmlogin.c @@ -73,10 +73,8 @@ static gboolean GdmSetPosition = FALSE; static gint GdmPositionX; static gint GdmPositionY; -#define LAST_SESSION "Last" #define LAST_LANGUAGE "Last" #define DEFAULT_LANGUAGE "Default" -#define SESSION_NAME "SessionName" #define GTK_KEY "gtk-2.0" enum { @@ -130,7 +128,6 @@ static gchar *curuser = NULL; static gchar *session = NULL; static gchar *language = NULL; -static gint savesess = GTK_RESPONSE_NO; static gint savelang = GTK_RESPONSE_NO; /* back_prog_timeout_event_id: event of the timer. @@ -722,137 +719,6 @@ gdm_theme_handler (GtkWidget *widget, gpointer data) gdm_wm_center_window (GTK_WINDOW (login)); } -static gboolean -gdm_login_list_lookup (GList *l, const gchar *data) -{ - GList *list = l; - - if (list == NULL || data == NULL) - return FALSE; - - /* FIXME: Hack, will support these builtin types later */ - if (strcmp (data, GDM_SESSION_DEFAULT ".desktop") == 0 || - strcmp (data, GDM_SESSION_CUSTOM ".desktop") == 0 || - strcmp (data, GDM_SESSION_FAILSAFE ".desktop") == 0) { - return TRUE; - } - - while (list) { - - if (strcmp (list->data, data) == 0) - return TRUE; - - list = list->next; - } - - return FALSE; -} - -static void -gdm_login_session_lookup (const gchar* savedsess) -{ - /* Don't save session unless told otherwise */ - savesess = GTK_RESPONSE_NO; - - /* Previously saved session not found in ~user/.gnome2/gdm */ - if ( ! (savedsess != NULL && - strcmp ("(null)", savedsess) != 0 && - savedsess[0] != '\0')) { - /* If "Last" is chosen run Default, - * else run user's current selection */ - g_free (session); - if (current_session == NULL || strcmp (current_session, LAST_SESSION) == 0) - session = g_strdup (default_session); - else - session = g_strdup (current_session); - - savesess = GTK_RESPONSE_YES; - return; - } - - /* If "Last" session is selected */ - if (current_session == NULL || - strcmp (current_session, LAST_SESSION) == 0) { - g_free (session); - session = g_strdup (savedsess); - - /* Check if user's saved session exists on this box */ - if (!gdm_login_list_lookup (sessions, session)) { - gchar *firstmsg; - gchar *secondmsg; - - g_free (session); - session = g_strdup (default_session); - firstmsg = g_strdup_printf (_("Do you wish to make %s the default for " - "future sessions?"), - gdm_session_name (default_session)); - secondmsg = g_strdup_printf (_("Your preferred session type %s is not " - "installed on this computer."), - gdm_session_name (savedsess)); - - savesess = gdm_wm_query_dialog (firstmsg, secondmsg, - _("Make _Default"), _("Just _Log In"), TRUE); - g_free (firstmsg); - g_free (secondmsg); - } - } - /* One of the other available session types is selected */ - else { - g_free (session); - session = g_strdup (current_session); - - /* User's saved session is not the chosen one */ - if (strcmp (session, GDM_SESSION_FAILSAFE_GNOME) == 0 || - strcmp (session, GDM_SESSION_FAILSAFE_XTERM) == 0 || - g_ascii_strcasecmp (session, GDM_SESSION_FAILSAFE ".desktop") == 0 || - g_ascii_strcasecmp (session, GDM_SESSION_FAILSAFE) == 0) { - savesess = GTK_RESPONSE_NO; - } else if (strcmp (savedsess, session) != 0) { - gchar *firstmsg = NULL; - gchar *secondmsg = NULL; - - if (gdm_config_get_bool (GDM_KEY_SHOW_LAST_SESSION)) { - firstmsg = g_strdup_printf (_("Do you wish " - "to make %s the default for " - "future sessions?"), - gdm_session_name (session)); - secondmsg = g_strdup_printf (_("You have chosen %s for this " - "session, but your default " - "setting is %s."), - gdm_session_name (session), - gdm_session_name (savedsess)); - savesess = gdm_wm_query_dialog (firstmsg, secondmsg, - _("Make _Default"), _("Just For _This Session"), TRUE); - } else if (strcmp (session, default_session) != 0 && - strcmp (session, savedsess) != 0 && - strcmp (session, LAST_SESSION) != 0) { - - /* - * If ! GDM_KEY_SHOW_LAST_SESSION then our saved session is - * irrelevant, we are in "switchdesk mode" and the relevant - * thing is the saved session in .Xclients - */ - if (g_access ("/usr/bin/switchdesk", F_OK) == 0) { - firstmsg = g_strdup_printf (_("You have chosen %s for this " - "session."), - gdm_session_name (session)); - secondmsg = g_strdup_printf (_("If you wish to make %s " - "the default for future sessions, " - "run the 'switchdesk' utility " - "(System Tools->Desktop Switching Tool from " - "the main menu)."), - gdm_session_name (session)); - gdm_wm_message_dialog (firstmsg, secondmsg); - } - savesess = GTK_RESPONSE_NO; - } - g_free (firstmsg); - g_free (secondmsg); - } - } -} - - static void gdm_login_language_lookup (const gchar* savedlang) { @@ -1817,9 +1683,9 @@ gdm_login_ctrl_handler (GIOChannel *source, GIOCondition cond, gint fd) g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); buf[len-1] = '\0'; tmp = ve_locale_to_utf8 (buf); - gdm_login_session_lookup (tmp); + session = gdm_session_lookup (tmp); g_free (tmp); - if (savesess == GTK_RESPONSE_CANCEL) { + if (gdm_get_save_session () == GTK_RESPONSE_CANCEL) { printf ("%c%s\n", STX, GDM_RESPONSE_CANCEL); } else { tmp = ve_locale_from_utf8 (session); @@ -1843,7 +1709,7 @@ gdm_login_ctrl_handler (GIOChannel *source, GIOCondition cond, gint fd) case GDM_SSESS: g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */ - if (savesess == GTK_RESPONSE_YES) + if (gdm_get_save_session () == GTK_RESPONSE_YES) printf ("%cY\n", STX); else printf ("%c\n", STX); diff --git a/gui/gdmsession.c b/gui/gdmsession.c index 34c66cac..76b788ac 100644 --- a/gui/gdmsession.c +++ b/gui/gdmsession.c @@ -32,11 +32,14 @@ #include "gdmsession.h" #include "gdmcommon.h" #include "gdmconfig.h" +#include "gdmwm.h" GHashTable *sessnames = NULL; gchar *default_session = NULL; const gchar *current_session = NULL; GList *sessions = NULL; +static gint save_session = GTK_RESPONSE_NO; + /* This is true if session dir doesn't exist or is whacked out * in some way or another */ @@ -272,7 +275,7 @@ gdm_session_list_init () /* Check that session dir is readable */ if G_UNLIKELY ( ! some_dir_exists) { gdm_common_error ("%s: Session directory <%s> not found!", - "gdm_login_session_init", ve_sure_string + "gdm_session_list_init", ve_sure_string (gdm_config_get_string (GDM_KEY_SESSION_DESKTOP_DIR))); session_dir_whacked_out = TRUE; } @@ -325,3 +328,152 @@ gdm_session_list_init () if (current_session == NULL) current_session = default_session; } + +static gboolean +gdm_login_list_lookup (GList *l, const gchar *data) +{ + GList *list = l; + + if (list == NULL || data == NULL) + return FALSE; + + /* FIXME: Hack, will support these builtin types later */ + if (strcmp (data, GDM_SESSION_DEFAULT ".desktop") == 0 || + strcmp (data, GDM_SESSION_CUSTOM ".desktop") == 0 || + strcmp (data, GDM_SESSION_FAILSAFE ".desktop") == 0) { + return TRUE; + } + + while (list) { + + if (strcmp (list->data, data) == 0) + return TRUE; + + list = list->next; + } + + return FALSE; +} + +char * +gdm_session_lookup (const char *saved_session) +{ + gchar *session = NULL; + + /* Don't save session unless told otherwise */ + save_session = GTK_RESPONSE_NO; + + /* Previously saved session not found in ~/.dmrc */ + if ( ! (saved_session != NULL && + strcmp ("(null)", saved_session) != 0 && + saved_session[0] != '\0')) { + /* If "Last" is chosen run default, + * else run user's current selection */ + if (current_session == NULL || strcmp (current_session, LAST_SESSION) == 0) + session = g_strdup (default_session); + else + session = g_strdup (current_session); + + save_session = GTK_RESPONSE_YES; + return session; + } + + /* If "Last" session is selected */ + if (current_session == NULL || + strcmp (current_session, LAST_SESSION) == 0) + { + session = g_strdup (saved_session); + + /* Check if user's saved session exists on this box */ + if (!gdm_login_list_lookup (sessions, session)) + { + gchar *firstmsg; + gchar *secondmsg; + + g_free (session); + session = g_strdup (default_session); + firstmsg = g_strdup_printf (_("Do you wish to make %s the default for " + "future sessions?"), + gdm_session_name (saved_session)); + secondmsg = g_strdup_printf (_("Your preferred session type %s is not " + "installed on this computer."), + gdm_session_name (default_session)); + save_session = gdm_wm_query_dialog (firstmsg, secondmsg, + _("Make _Default"), _("Just _Log In"), TRUE); + g_free (firstmsg); + g_free (secondmsg); + } + } + else /* One of the other available session types is selected */ + { + session = g_strdup (current_session); + + /* User's saved session is not the chosen one */ + if (strcmp (session, GDM_SESSION_FAILSAFE_GNOME) == 0 || + strcmp (session, GDM_SESSION_FAILSAFE_XTERM) == 0 || + g_ascii_strcasecmp (session, GDM_SESSION_FAILSAFE ".desktop") == 0 || + g_ascii_strcasecmp (session, GDM_SESSION_FAILSAFE) == 0) + { + /* + * Never save failsafe sessions as the default session. + * These are intended to be used for debugging or temporary + * purposes. + */ + save_session = GTK_RESPONSE_NO; + } + else if (strcmp (saved_session, session) != 0) + { + gchar *firstmsg = NULL; + gchar *secondmsg = NULL; + + if (gdm_config_get_bool (GDM_KEY_SHOW_LAST_SESSION)) + { + firstmsg = g_strdup_printf (_("Do you wish to make %s the default for " + "future sessions?"), + gdm_session_name (session)); + secondmsg = g_strdup_printf (_("You have chosen %s for this " + "session, but your default " + "setting is %s."), + gdm_session_name (session), + gdm_session_name (saved_session)); + save_session = gdm_wm_query_dialog (firstmsg, secondmsg, + _("Make _Default"), _("Just For _This Session"), TRUE); + } + else if (strcmp (session, default_session) != 0 && + strcmp (session, saved_session) != 0 && + strcmp (session, LAST_SESSION) != 0) + { + /* + * If (! GDM_KEY_SHOW_LAST_SESSION) then our saved session is + * irrelevant, we are in "switchdesk mode" and the relevant + * thing is the saved session in .Xclients + */ + if (g_access ("/usr/bin/switchdesk", F_OK) == 0) + { + firstmsg = g_strdup_printf (_("You have chosen %s for this " + "session"), + gdm_session_name (session)); + secondmsg = g_strdup_printf (_("If you wish to make %s " + "the default for future sessions, " + "run the 'switchdesk' utility " + "(System->Desktop Switching Tool from " + "the panel menu)."), + gdm_session_name (session)); + gdm_wm_message_dialog (firstmsg, secondmsg); + } + save_session = GTK_RESPONSE_NO; + } + g_free (firstmsg); + g_free (secondmsg); + } + } + + return session; +} + +gint +gdm_get_save_session (void) +{ + return save_session; +} + diff --git a/gui/gdmsession.h b/gui/gdmsession.h index aec43dd0..d17839d8 100644 --- a/gui/gdmsession.h +++ b/gui/gdmsession.h @@ -24,6 +24,9 @@ #include "misc.h" +#define LAST_SESSION "Last" +#define SESSION_NAME "SessionName" + typedef struct { char *name; char *comment; @@ -37,7 +40,7 @@ void gdm_session_list_from_hash_table_func (const char *key, GList **sessions); gint gdm_session_sort_func (const char *a, const char *b); - - +char * gdm_session_lookup (const char *saved_session); +gint gdm_get_save_session (void); #endif /* GDM_SESSION_H */ diff --git a/gui/greeter/greeter.c b/gui/greeter/greeter.c index a0244b59..5472a109 100644 --- a/gui/greeter/greeter.c +++ b/gui/greeter/greeter.c @@ -257,10 +257,10 @@ greeter_ctrl_handler (GIOChannel *source, buf[len-1] = '\0'; tmp = ve_locale_to_utf8 (buf); - session = greeter_session_lookup (tmp); + session = gdm_session_lookup (tmp); g_free (tmp); - if (greeter_save_session () == GTK_RESPONSE_CANCEL) { + if (gdm_get_save_session () == GTK_RESPONSE_CANCEL) { printf ("%c%s\n", STX, GDM_RESPONSE_CANCEL); } else { tmp = ve_locale_from_utf8 (session); @@ -286,7 +286,7 @@ greeter_ctrl_handler (GIOChannel *source, case GDM_SSESS: g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */ - if (greeter_save_session () == GTK_RESPONSE_YES) + if (gdm_get_save_session () == GTK_RESPONSE_YES) printf ("%cY\n", STX); else printf ("%c\n", STX); diff --git a/gui/greeter/greeter_session.c b/gui/greeter/greeter_session.c index cc30452c..caa165fd 100644 --- a/gui/greeter/greeter_session.c +++ b/gui/greeter/greeter_session.c @@ -40,11 +40,6 @@ #include "greeter_events.h" #include "greeter_parser.h" -#define LAST_SESSION "Last" -#define LAST_LANGUAGE "Last" -#define SESSION_NAME "SessionName" - -static gint save_session = GTK_RESPONSE_NO; static GtkWidget *session_dialog; static GSList *session_group = NULL; @@ -54,149 +49,6 @@ extern gchar *default_session; extern char *current_session; extern gboolean session_dir_whacked_out; -static gboolean -greeter_login_list_lookup (GList *l, const gchar *data) -{ - GList *list = l; - - if (list == NULL || data == NULL) - return FALSE; - - /* FIXME: Hack, will support these builtin types later */ - if (strcmp (data, GDM_SESSION_DEFAULT ".desktop") == 0 || - strcmp (data, GDM_SESSION_CUSTOM ".desktop") == 0 || - strcmp (data, GDM_SESSION_FAILSAFE ".desktop") == 0) { - return TRUE; - } - - while (list) { - - if (strcmp (list->data, data) == 0) - return TRUE; - - list = list->next; - } - - return FALSE; -} - -char * -greeter_session_lookup (const char *saved_session) -{ - gchar *session = NULL; - - /* Don't save session unless told otherwise */ - save_session = GTK_RESPONSE_NO; - - /* Previously saved session not found in ~/.dmrc */ - if ( ! (saved_session != NULL && - strcmp ("(null)", saved_session) != 0 && - saved_session[0] != '\0')) { - /* If "Last" is chosen run default, - * else run user's current selection */ - if (current_session == NULL || strcmp (current_session, LAST_SESSION) == 0) - session = g_strdup (default_session); - else - session = g_strdup (current_session); - - save_session = GTK_RESPONSE_YES; - return session; - } - - /* If "Last" session is selected */ - if (current_session == NULL || - strcmp (current_session, LAST_SESSION) == 0) - { - session = g_strdup (saved_session); - - /* Check if user's saved session exists on this box */ - if (!greeter_login_list_lookup (sessions, session)) - { - gchar *firstmsg; - gchar *secondmsg; - - g_free (session); - session = g_strdup (default_session); - firstmsg = g_strdup_printf (_("Do you wish to make %s the default for " - "future sessions?"), - gdm_session_name (saved_session)); - secondmsg = g_strdup_printf (_("Your preferred session type %s is not " - "installed on this computer."), - gdm_session_name (default_session)); - save_session = gdm_wm_query_dialog (firstmsg, secondmsg, - _("Make _Default"), _("Just _Log In"), TRUE); - g_free (firstmsg); - g_free (secondmsg); - } - } - else /* One of the other available session types is selected */ - { - session = g_strdup (current_session); - - /* User's saved session is not the chosen one */ - if (strcmp (session, GDM_SESSION_FAILSAFE_GNOME) == 0 || - strcmp (session, GDM_SESSION_FAILSAFE_XTERM) == 0 || - g_ascii_strcasecmp (session, GDM_SESSION_FAILSAFE ".desktop") == 0 || - g_ascii_strcasecmp (session, GDM_SESSION_FAILSAFE) == 0) - { - save_session = GTK_RESPONSE_YES; - } - else if (strcmp (saved_session, session) != 0) - { - gchar *firstmsg = NULL; - gchar *secondmsg = NULL; - - if (gdm_config_get_bool (GDM_KEY_SHOW_LAST_SESSION)) - { - firstmsg = g_strdup_printf (_("Do you wish to make %s the default for " - "future sessions?"), - gdm_session_name (session)); - secondmsg = g_strdup_printf (_("You have chosen %s for this " - "session, but your default " - "setting is %s."), - gdm_session_name (session), - gdm_session_name (saved_session)); - save_session = gdm_wm_query_dialog (firstmsg, secondmsg, - _("Make _Default"), _("Just For _This Session"), TRUE); - } - else if (strcmp (session, default_session) != 0 && - strcmp (session, saved_session) != 0 && - strcmp (session, LAST_SESSION) != 0) - { - /* - * If (! GDM_KEY_SHOW_LAST_SESSION) then our saved session is - * irrelevant, we are in "switchdesk mode" and the relevant - * thing is the saved session in .Xclients - */ - if (g_access ("/usr/bin/switchdesk", F_OK) == 0) - { - firstmsg = g_strdup_printf (_("You have chosen %s for this " - "session"), - gdm_session_name (session)); - secondmsg = g_strdup_printf (_("If you wish to make %s " - "the default for future sessions, " - "run the 'switchdesk' utility " - "(System->Desktop Switching Tool from " - "the panel menu)."), - gdm_session_name (session)); - gdm_wm_message_dialog (firstmsg, secondmsg); - } - save_session = GTK_RESPONSE_NO; - } - g_free (firstmsg); - g_free (secondmsg); - } - } - - return session; -} - -gint -greeter_save_session (void) -{ - return save_session; -} - void greeter_session_init (void) { diff --git a/gui/greeter/greeter_session.h b/gui/greeter/greeter_session.h index 7ec8448b..7bef0854 100644 --- a/gui/greeter/greeter_session.h +++ b/gui/greeter/greeter_session.h @@ -22,7 +22,4 @@ void greeter_session_init (void); void greeter_item_session_setup (void); -char * greeter_session_lookup (const char *saved_session); -gboolean greeter_save_session (void); - #endif /* __GREETER_SESSION_H__ */ |