diff options
author | Matthias Clasen <mclasen@redhat.com> | 2011-05-19 09:26:31 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2011-10-21 02:16:06 -0400 |
commit | b925c76ac7725283c45cfa9ab3cc8751c5e3b736 (patch) | |
tree | 885fe95a0b5d75ae9031ad0fee3aec0afbbaab71 | |
parent | f4a1a84e8bb31908dbba66aa0ca071054739790a (diff) | |
download | gdm-b925c76ac7725283c45cfa9ab3cc8751c5e3b736.tar.gz |
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.
-rw-r--r-- | 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 49145fe4..8534d718 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 { |