summaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorBrian Cameron <brian.cameron@sun.com>2006-07-18 19:06:57 +0000
committerBrian Cameron <bcameron@src.gnome.org>2006-07-18 19:06:57 +0000
commitff5106b12b48d82cf5fe25d2b801809f569cbcbd (patch)
tree9e23df12f581207d3d31a446222074f8a2def08f /gui
parent34ea24e5e95a85d0d16d79c3c4f9a0ee5aea4ced (diff)
downloadgdm-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.c140
-rw-r--r--gui/gdmsession.c154
-rw-r--r--gui/gdmsession.h7
-rw-r--r--gui/greeter/greeter.c6
-rw-r--r--gui/greeter/greeter_session.c148
-rw-r--r--gui/greeter/greeter_session.h3
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__ */