20057N/A--- gnome-session-2.30.2/gnome-session/main.c-orig 2011-02-21 20:48:38.822655206 -0600
20057N/A+++ gnome-session-2.30.2/gnome-session/main.c 2011-02-21 20:50:18.797611944 -0600
20057N/A@@ -314,6 +314,18 @@ load_standard_apps (GsmManager *manager,
20057N/A g_strfreev (autostart_dirs);
20057N/A }
20057N/A
20057N/A+static gboolean
20057N/A+check_gdm_greeter_session (GsmManager *manager,
20057N/A+ char **override_autostart_dirs)
20057N/A+{
20057N/A+ int i;
20057N/A+ for (i = 0; override_autostart_dirs[i]; i++) {
20057N/A+ if (strstr (override_autostart_dirs[i], "/gdm/autostart/LoginWindow") != NULL)
20057N/A+ return TRUE;
20057N/A+ }
20057N/A+ return FALSE;
20057N/A+}
20057N/A+
20057N/A static void
20057N/A load_override_apps (GsmManager *manager,
20057N/A char **override_autostart_dirs)
20057N/A@@ -595,8 +607,12 @@ main (int argc, char **argv)
20057N/A gdm_signal_handler_add (signal_handler, SIGTERM, signal_cb, manager);
20057N/A gdm_signal_handler_add (signal_handler, SIGINT, signal_cb, manager);
20057N/A gdm_signal_handler_set_fatal_func (signal_handler, shutdown_cb, manager);
20057N/A+ gsm_manager_set_inhibit_dialog_display (manager, TRUE);
20057N/A
20057N/A if (override_autostart_dirs != NULL) {
20057N/A+ if (check_gdm_greeter_session (manager, override_autostart_dirs))
20057N/A+ gsm_manager_set_inhibit_dialog_display (manager, FALSE);
20057N/A+
20057N/A load_override_apps (manager, override_autostart_dirs);
20057N/A } else {
20057N/A if (! IS_STRING_EMPTY (default_session_key)) {
20057N/A--- gnome-session-2.30.2/gnome-session/gsm-manager.h-orig 2011-02-21 20:48:30.431626073 -0600
20057N/A+++ gnome-session-2.30.2/gnome-session/gsm-manager.h 2011-02-21 20:48:57.397005390 -0600
20057N/A@@ -184,6 +184,9 @@ gboolean gsm_manager_is_autos
20057N/A gboolean gsm_manager_set_phase (GsmManager *manager,
20057N/A GsmManagerPhase phase);
20057N/A
20057N/A+void gsm_manager_set_inhibit_dialog_display (GsmManager *manager,
20057N/A+ gboolean inhibit_dialog_display);
20057N/A+
20057N/A G_END_DECLS
20057N/A
20057N/A #endif /* __GSM_MANAGER_H */
20057N/A--- gnome-session-2.30.2/gnome-session/gsm-manager.c-orig 2011-02-21 20:43:54.155366644 -0600
20057N/A+++ gnome-session-2.30.2/gnome-session/gsm-manager.c 2011-02-21 20:47:23.878324582 -0600
20057N/A@@ -121,6 +121,7 @@ struct GsmManagerPrivate
20057N/A GsmManagerLogoutType logout_type;
20057N/A
20057N/A GtkWidget *inhibit_dialog;
20057N/A+ gboolean inhibit_dialog_display;
20057N/A
20057N/A /* List of clients which were disconnected due to disabled condition
20057N/A * and shouldn't be automatically restarted */
20057N/A@@ -162,6 +163,9 @@ static void gsm_manager_finalize
20057N/A static gboolean auto_save_is_enabled (GsmManager *manager);
20057N/A static void maybe_save_session (GsmManager *manager);
20057N/A
20057N/A+static void on_store_inhibitor_added (GsmStore *store, const char *id, GsmManager *manager);
20057N/A+static void on_store_inhibitor_removed (GsmStore *store, const char *id, GsmManager *manager);
20057N/A+
20057N/A static gpointer manager_object = NULL;
20057N/A
20057N/A G_DEFINE_TYPE (GsmManager, gsm_manager, G_TYPE_OBJECT)
20057N/A@@ -1071,6 +1075,22 @@ inhibit_dialog_response (GsmInhibitDialo
20057N/A }
20057N/A
20057N/A static void
20057N/A+gsm_manager_inhibitors_dispose (GsmManager *manager)
20057N/A+{
20057N/A+ if (manager->priv->inhibitors != NULL) {
20057N/A+ g_signal_handlers_disconnect_by_func (manager->priv->inhibitors,
20057N/A+ on_store_inhibitor_added,
20057N/A+ manager);
20057N/A+ g_signal_handlers_disconnect_by_func (manager->priv->inhibitors,
20057N/A+ on_store_inhibitor_removed,
20057N/A+ manager);
20057N/A+
20057N/A+ g_object_unref (manager->priv->inhibitors);
20057N/A+ manager->priv->inhibitors = NULL;
20057N/A+ }
20057N/A+}
20057N/A+
20057N/A+static void
20057N/A query_end_session_complete (GsmManager *manager)
20057N/A {
20057N/A GsmLogoutAction action;
20057N/A@@ -1089,6 +1109,12 @@ query_end_session_complete (GsmManager *
20057N/A return;
20057N/A }
20057N/A
20057N/A+ if (! manager->priv->inhibit_dialog_display) {
20057N/A+ gsm_manager_inhibitors_dispose (manager);
20057N/A+ end_phase (manager);
20057N/A+ return;
20057N/A+ }
20057N/A+
20057N/A if (manager->priv->inhibit_dialog != NULL) {
20057N/A g_debug ("GsmManager: inhibit dialog already up");
20057N/A gtk_window_present (GTK_WINDOW (manager->priv->inhibit_dialog));
20057N/A@@ -3514,3 +3540,11 @@ gsm_manager_add_autostart_apps_from_dir
20057N/A
20057N/A return TRUE;
20057N/A }
20057N/A+
20057N/A+void
20057N/A+gsm_manager_set_inhibit_dialog_display (GsmManager *manager, gboolean inhibit_dialog_display)
20057N/A+{
20057N/A+ g_return_if_fail (GSM_IS_MANAGER (manager));
20057N/A+ manager->priv->inhibit_dialog_display = inhibit_dialog_display;
20057N/A+}
20057N/A+