diff options
Diffstat (limited to 'daemon/gdm-display.c')
-rw-r--r-- | daemon/gdm-display.c | 129 |
1 files changed, 45 insertions, 84 deletions
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c index 1c7cde2c..fa5ed773 100644 --- a/daemon/gdm-display.c +++ b/daemon/gdm-display.c @@ -47,8 +47,6 @@ #include "gdm-settings-keys.h" #include "gdm-launch-environment.h" -#include "gdm-simple-slave.h" -#include "gdm-xdmcp-chooser-slave.h" #include "gdm-dbus-util.h" #include "gdm-xerrors.h" @@ -68,8 +66,7 @@ struct GdmDisplayPrivate char *x11_display_name; int status; time_t creation_time; - GTimer *slave_timer; - GType slave_type; + GTimer *server_timer; char *x11_cookie; gsize x11_cookie_size; @@ -79,7 +76,6 @@ struct GdmDisplayPrivate Display *x11_display; - GdmSlave *slave; GDBusConnection *connection; GdmDisplayAccessFile *user_access_file; @@ -110,7 +106,6 @@ enum { PROP_X11_COOKIE, PROP_X11_AUTHORITY_FILE, PROP_IS_LOCAL, - PROP_SLAVE_TYPE, PROP_LAUNCH_ENVIRONMENT, PROP_IS_INITIAL, PROP_ALLOW_TIMED_LOGIN, @@ -377,7 +372,7 @@ gdm_display_add_user_authorization (GdmDisplay *self, self->priv->user_access_file = access_file; g_debug ("GdmDisplay: Added user authorization for %s: %s", username, *filename); - /* Remove access for the programs run by slave and greeter now that the + /* Remove access for the programs run by greeter now that the * user session is starting. */ setup_xhost_auth (host_entries, si_entries); @@ -387,7 +382,7 @@ gdm_display_add_user_authorization (GdmDisplay *self, } XSync (self->priv->x11_display, False); if (gdm_error_trap_pop ()) { - g_warning ("Failed to remove slave program access to the display. Trying to proceed."); + g_warning ("Failed to remove greeter program access to the display. Trying to proceed."); } return TRUE; @@ -602,13 +597,6 @@ queue_finish (GdmDisplay *self) } static void -on_slave_stopped (GdmSlave *slave, - GdmDisplay *self) -{ - queue_finish (self); -} - -static void _gdm_display_set_status (GdmDisplay *self, int status) { @@ -619,16 +607,9 @@ _gdm_display_set_status (GdmDisplay *self, } static void -on_slave_started (GdmSlave *slave, - GdmDisplay *self) -{ - _gdm_display_set_status (self, GDM_DISPLAY_MANAGED); -} - -static void gdm_display_real_start_server (GdmDisplay *self) { - gdm_slave_start (self->priv->slave); + _gdm_display_set_status (self, GDM_DISPLAY_MANAGED); } static gboolean @@ -646,17 +627,6 @@ gdm_display_real_prepare (GdmDisplay *self) _gdm_display_set_status (self, GDM_DISPLAY_PREPARED); - self->priv->slave = GDM_SLAVE (g_object_new (self->priv->slave_type, - "display", self, - NULL)); - g_signal_connect_object (self->priv->slave, "started", - G_CALLBACK (on_slave_started), - self, - 0); - g_signal_connect_object (self->priv->slave, "stopped", - G_CALLBACK (on_slave_stopped), - self, - 0); return TRUE; } @@ -706,7 +676,7 @@ on_accountsservice_ready (GObject *object, } static void -look_for_existing_users_and_start_slave (GdmDisplay *self) +look_for_existing_users_and_start_server (GdmDisplay *self) { g_dbus_proxy_new (self->priv->connection, 0, NULL, @@ -751,8 +721,8 @@ gdm_display_manage (GdmDisplay *self) } } - g_timer_start (self->priv->slave_timer); - look_for_existing_users_and_start_slave (self); + g_timer_start (self->priv->server_timer); + look_for_existing_users_and_start_server (self); return TRUE; } @@ -778,17 +748,7 @@ gdm_display_unmanage (GdmDisplay *self) g_debug ("GdmDisplay: unmanage display"); - g_timer_stop (self->priv->slave_timer); - - if (self->priv->slave != NULL) { - g_signal_handlers_disconnect_by_func (self->priv->slave, - G_CALLBACK (on_slave_started), self); - g_signal_handlers_disconnect_by_func (self->priv->slave, - G_CALLBACK (on_slave_stopped), self); - gdm_slave_stop (self->priv->slave); - g_object_unref (self->priv->slave); - self->priv->slave = NULL; - } + g_timer_stop (self->priv->server_timer); if (self->priv->user_access_file != NULL) { gdm_display_access_file_close (self->priv->user_access_file); @@ -802,7 +762,7 @@ gdm_display_unmanage (GdmDisplay *self) self->priv->access_file = NULL; } - elapsed = g_timer_elapsed (self->priv->slave_timer, NULL); + elapsed = g_timer_elapsed (self->priv->server_timer, NULL); if (elapsed < 3) { g_warning ("GdmDisplay: display lasted %lf seconds", elapsed); _gdm_display_set_status (self, GDM_DISPLAY_FAILED); @@ -918,13 +878,6 @@ _gdm_display_set_is_local (GdmDisplay *self, } static void -_gdm_display_set_slave_type (GdmDisplay *self, - GType type) -{ - self->priv->slave_type = type; -} - -static void _gdm_display_set_launch_environment (GdmDisplay *self, GdmLaunchEnvironment *launch_environment) { @@ -988,9 +941,6 @@ gdm_display_set_property (GObject *object, case PROP_ALLOW_TIMED_LOGIN: _gdm_display_set_allow_timed_login (self, g_value_get_boolean (value)); break; - case PROP_SLAVE_TYPE: - _gdm_display_set_slave_type (self, g_value_get_gtype (value)); - break; case PROP_LAUNCH_ENVIRONMENT: _gdm_display_set_launch_environment (self, g_value_get_object (value)); break; @@ -1045,9 +995,6 @@ gdm_display_get_property (GObject *object, case PROP_IS_LOCAL: g_value_set_boolean (value, self->priv->is_local); break; - case PROP_SLAVE_TYPE: - g_value_set_gtype (value, self->priv->slave_type); - break; case PROP_LAUNCH_ENVIRONMENT: g_value_set_object (value, self->priv->launch_environment); break; @@ -1364,7 +1311,6 @@ gdm_display_dispose (GObject *object) g_assert (self->priv->status == GDM_DISPLAY_FINISHED || self->priv->status == GDM_DISPLAY_FAILED); - g_assert (self->priv->slave == NULL); g_assert (self->priv->user_access_file == NULL); g_assert (self->priv->access_file == NULL); @@ -1480,13 +1426,6 @@ gdm_display_class_init (GdmDisplayClass *klass) GDM_TYPE_LAUNCH_ENVIRONMENT, G_PARAM_READWRITE)); g_object_class_install_property (object_class, - PROP_SLAVE_TYPE, - g_param_spec_gtype ("slave-type", - "slave type", - "slave type", - GDM_TYPE_SIMPLE_SLAVE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - g_object_class_install_property (object_class, PROP_STATUS, g_param_spec_int ("status", "status", @@ -1506,7 +1445,7 @@ gdm_display_init (GdmDisplay *self) self->priv = GDM_DISPLAY_GET_PRIVATE (self); self->priv->creation_time = time (NULL); - self->priv->slave_timer = g_timer_new (); + self->priv->server_timer = g_timer_new (); } static void @@ -1541,8 +1480,8 @@ gdm_display_finalize (GObject *object) g_object_unref (self->priv->user_access_file); } - if (self->priv->slave_timer != NULL) { - g_timer_destroy (self->priv->slave_timer); + if (self->priv->server_timer != NULL) { + g_timer_destroy (self->priv->server_timer); } G_OBJECT_CLASS (gdm_display_parent_class)->finalize (object); @@ -1574,13 +1513,25 @@ on_launch_environment_session_started (GdmLaunchEnvironment *launch_environment, } static void +self_destruct (GdmDisplay *self) +{ + g_object_ref (self); + if (gdm_display_get_status (self) == GDM_DISPLAY_MANAGED) { + gdm_display_unmanage (self); + } + + if (gdm_display_get_status (self) != GDM_DISPLAY_FINISHED) { + queue_finish (self); + } + g_object_unref (self); +} + +static void on_launch_environment_session_stopped (GdmLaunchEnvironment *launch_environment, GdmDisplay *self) { g_debug ("GdmDisplay: Greeter stopped"); - gdm_slave_stop (self->priv->slave); - - g_clear_object (&self->priv->launch_environment); + self_destruct (self); } static void @@ -1589,7 +1540,7 @@ on_launch_environment_session_exited (GdmLaunchEnvironment *launch_environment, GdmDisplay *self) { g_debug ("GdmDisplay: Greeter exited: %d", code); - gdm_slave_stop (self->priv->slave); + self_destruct (self); } static void @@ -1598,7 +1549,7 @@ on_launch_environment_session_died (GdmLaunchEnvironment *launch_environment, GdmDisplay *self) { g_debug ("GdmDisplay: Greeter died: %d", signal); - gdm_slave_stop (self->priv->slave); + self_destruct (self); } static gboolean @@ -1760,6 +1711,22 @@ void gdm_display_stop_greeter_session (GdmDisplay *self) { if (self->priv->launch_environment != NULL) { + + g_signal_handlers_disconnect_by_func (self->priv->launch_environment, + G_CALLBACK (on_launch_environment_session_opened), + self); + g_signal_handlers_disconnect_by_func (self->priv->launch_environment, + G_CALLBACK (on_launch_environment_session_started), + self); + g_signal_handlers_disconnect_by_func (self->priv->launch_environment, + G_CALLBACK (on_launch_environment_session_stopped), + self); + g_signal_handlers_disconnect_by_func (self->priv->launch_environment, + G_CALLBACK (on_launch_environment_session_exited), + self); + g_signal_handlers_disconnect_by_func (self->priv->launch_environment, + G_CALLBACK (on_launch_environment_session_died), + self); gdm_launch_environment_stop (self->priv->launch_environment); g_clear_object (&self->priv->launch_environment); } @@ -1769,12 +1736,6 @@ gdm_display_stop_greeter_session (GdmDisplay *self) } } -GdmSlave * -gdm_display_get_slave (GdmDisplay *self) -{ - return self->priv->slave; -} - static void gdm_display_set_windowpath (GdmDisplay *self) { |