[gdm/wip/initial-setup: 2/17] Slave: add a marker file to request initial-setup



commit b925c76ac7725283c45cfa9ab3cc8751c5e3b736
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu May 19 09:26:31 2011 -0400

    Slave: add a marker file to request initial-setup
    
    The InitialSetupEnabled key in the configuration is now used
    to control whether the initial-setup feature is enabled at all.
    To actually run the initial-setup, you need to touch
    /etc/gdm/do-initial-setup.

 daemon/gdm-simple-slave.c |   67 +++++++++++++++++++++++++++++++++++---------
 1 files changed, 53 insertions(+), 14 deletions(-)
---
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index 49145fe..8534d71 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -106,12 +106,15 @@ static void     gdm_simple_slave_finalize       (GObject             *object);
 
 G_DEFINE_TYPE (GdmSimpleSlave, gdm_simple_slave, GDM_TYPE_SLAVE)
 
-static void create_new_session (GdmSimpleSlave *slave);
-static void destroy_session    (GdmSimpleSlave *slave);
-static void start_greeter      (GdmSimpleSlave *slave);
+static void create_new_session  (GdmSimpleSlave *slave);
+static void destroy_session     (GdmSimpleSlave *slave);
+static void start_greeter       (GdmSimpleSlave *slave);
 static void queue_start_session (GdmSimpleSlave *slave,
                                  const char     *service_name);
-static void start_initial_setup (GdmSimpleSlave *slave);
+static void run_initial_setup   (GdmSimpleSlave *slave);
+
+static gboolean check_initial_setup_request (GdmSimpleSlave *slave);
+static void     clear_initial_setup_request (GdmSimpleSlave *slave);
 
 static void
 on_session_started (GdmSession       *session,
@@ -1336,7 +1339,15 @@ start_greeter (GdmSimpleSlave *slave)
 }
 
 static void
-start_initial_setup (GdmSimpleSlave *slave)
+on_setup_session_stop (GdmGreeterSession *greeter,
+                       GdmSimpleSlave    *slave)
+{
+        g_debug ("GdmSimpleSlave: Setup stopped");
+        clear_initial_setup_request (slave);
+        gdm_slave_stopped (GDM_SLAVE (slave));
+}
+static void
+run_initial_setup (GdmSimpleSlave *slave)
 {
         gboolean       display_is_local;
         char          *display_id;
@@ -1452,7 +1463,7 @@ start_initial_setup (GdmSimpleSlave *slave)
                           slave);
         g_signal_connect (slave->priv->greeter,
                           "stopped",
-                          G_CALLBACK (on_greeter_session_stop),
+                          G_CALLBACK (on_setup_session_stop),
                           slave);
         g_signal_connect (slave->priv->greeter,
                           "exited",
@@ -1480,6 +1491,30 @@ start_initial_setup (GdmSimpleSlave *slave)
 }
 
 static gboolean
+check_initial_setup_request (GdmSimpleSlave *slave)
+{
+        const gchar *filename;
+
+        filename = GDMCONFDIR "/run-initial-setup";
+        if (g_file_test (filename, G_FILE_TEST_EXISTS)) {
+                return TRUE;
+        }
+
+        return FALSE;
+}
+
+static void
+clear_initial_setup_request (GdmSimpleSlave *slave)
+{
+        const gchar *filename;
+
+        filename = GDMCONFDIR "/run-initial-setup";
+        if (g_remove (filename) < 0) {
+                g_warning ("Failed to remove %s", filename);
+        }
+}
+
+static gboolean
 idle_connect_to_display (GdmSimpleSlave *slave)
 {
         gboolean res;
@@ -1488,24 +1523,28 @@ idle_connect_to_display (GdmSimpleSlave *slave)
 
         res = gdm_slave_connect_to_x11_display (GDM_SLAVE (slave));
         if (res) {
-                gboolean enabled;
-                int      delay;
+                gboolean timed_login_enabled;
+                int      timed_login_delay;
                 gboolean initial_setup_enabled;
+                gboolean initial_setup_requested;
+                const gchar *filename;
 
                 /* FIXME: handle wait-for-go */
 
                 setup_server (slave);
 
                 initial_setup_enabled = FALSE;
+                initial_setup_requested = FALSE;
                 gdm_slave_get_initial_setup_details (GDM_SLAVE (slave), &initial_setup_enabled);
+                initial_setup_requested = check_initial_setup_request (slave);
 
-                delay = 0;
-                enabled = FALSE;
-                gdm_slave_get_timed_login_details (GDM_SLAVE (slave), &enabled, NULL, &delay);
-                if (initial_setup_enabled) {
-                        start_initial_setup (slave);
+                timed_login_delay = 0;
+                timed_login_enabled = FALSE;
+                gdm_slave_get_timed_login_details (GDM_SLAVE (slave), &timed_login_enabled, NULL, &timed_login_delay);
+                if (initial_setup_enabled && initial_setup_requested) {
+                        run_initial_setup (slave);
                         create_new_session (slave);
-                } else if (! enabled || delay > 0) {
+                } else if (! timed_login_enabled || timed_login_delay > 0) {
                         start_greeter (slave);
                         create_new_session (slave);
                 } else {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]