diff options
-rw-r--r-- | daemon/gdm-display.c | 6 | ||||
-rw-r--r-- | daemon/gdm-session-worker.c | 11 | ||||
-rw-r--r-- | daemon/gdm-session-worker.xml | 3 | ||||
-rw-r--r-- | daemon/gdm-session.c | 25 |
4 files changed, 43 insertions, 2 deletions
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c index 39630450..0fca63e4 100644 --- a/daemon/gdm-display.c +++ b/daemon/gdm-display.c @@ -1482,6 +1482,7 @@ gdm_display_set_up_greeter_session (GdmDisplay *self, void gdm_display_start_greeter_session (GdmDisplay *self) { + GdmSession *session; char *display_name; char *seat_id; char *hostname; @@ -1529,6 +1530,11 @@ gdm_display_start_greeter_session (GdmDisplay *self) gdm_launch_environment_start (self->priv->launch_environment); + session = gdm_launch_environment_get_session (self->priv->launch_environment); + g_object_set (G_OBJECT (session), + "display-is-initial", self->priv->is_initial, + NULL); + g_free (display_name); g_free (seat_id); g_free (hostname); diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c index a1f6ab8c..4c6ac2e6 100644 --- a/daemon/gdm-session-worker.c +++ b/daemon/gdm-session-worker.c @@ -166,6 +166,7 @@ struct GdmSessionWorkerPrivate guint32 is_program_session : 1; guint32 is_reauth_session : 1; guint32 display_is_local : 1; + guint32 display_is_initial : 1; guint state_change_idle_id; GdmSessionDisplayMode display_mode; @@ -2759,7 +2760,8 @@ gdm_session_worker_handle_setup (GdmDBusWorker *object, const char *console, const char *seat_id, const char *hostname, - gboolean display_is_local) + gboolean display_is_local, + gboolean display_is_initial) { GdmSessionWorker *worker = GDM_SESSION_WORKER (object); validate_and_queue_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SETUP_COMPLETE); @@ -2771,6 +2773,7 @@ gdm_session_worker_handle_setup (GdmDBusWorker *object, worker->priv->display_seat_id = g_strdup (seat_id); worker->priv->hostname = g_strdup (hostname); worker->priv->display_is_local = display_is_local; + worker->priv->display_is_initial = display_is_initial; worker->priv->username = NULL; g_signal_connect_swapped (worker->priv->user_settings, @@ -2795,7 +2798,8 @@ gdm_session_worker_handle_setup_for_user (GdmDBusWorker *object, const char *console, const char *seat_id, const char *hostname, - gboolean display_is_local) + gboolean display_is_local, + gboolean display_is_initial) { GdmSessionWorker *worker = GDM_SESSION_WORKER (object); @@ -2809,6 +2813,7 @@ gdm_session_worker_handle_setup_for_user (GdmDBusWorker *object, worker->priv->display_seat_id = g_strdup (seat_id); worker->priv->hostname = g_strdup (hostname); worker->priv->display_is_local = display_is_local; + worker->priv->display_is_initial = display_is_initial; worker->priv->username = g_strdup (username); g_signal_connect_swapped (worker->priv->user_settings, @@ -2848,6 +2853,7 @@ gdm_session_worker_handle_setup_for_program (GdmDBusWorker *object, const char *seat_id, const char *hostname, gboolean display_is_local, + gboolean display_is_initial, const char *log_file) { GdmSessionWorker *worker = GDM_SESSION_WORKER (object); @@ -2860,6 +2866,7 @@ gdm_session_worker_handle_setup_for_program (GdmDBusWorker *object, worker->priv->display_seat_id = g_strdup (seat_id); worker->priv->hostname = g_strdup (hostname); worker->priv->display_is_local = display_is_local; + worker->priv->display_is_initial = display_is_initial; worker->priv->username = g_strdup (username); worker->priv->log_file = g_strdup (log_file); worker->priv->is_program_session = TRUE; diff --git a/daemon/gdm-session-worker.xml b/daemon/gdm-session-worker.xml index afd724da..853bc6a4 100644 --- a/daemon/gdm-session-worker.xml +++ b/daemon/gdm-session-worker.xml @@ -35,6 +35,7 @@ <arg name="display_seat" direction="in" type="s"/> <arg name="hostname" direction="in" type="s"/> <arg name="display_is_local" direction="in" type="b"/> + <arg name="display_is_initial" direction="in" type="b"/> </method> <method name="SetupForUser"> <arg name="service_name" direction="in" type="s"/> @@ -45,6 +46,7 @@ <arg name="display_seat" direction="in" type="s"/> <arg name="hostname" direction="in" type="s"/> <arg name="display_is_local" direction="in" type="b"/> + <arg name="display_is_initial" direction="in" type="b"/> </method> <method name="SetupForProgram"> <arg name="service_name" direction="in" type="s"/> @@ -55,6 +57,7 @@ <arg name="display_seat" direction="in" type="s"/> <arg name="hostname" direction="in" type="s"/> <arg name="display_is_local" direction="in" type="b"/> + <arg name="display_is_initial" direction="in" type="b"/> <arg name="log_file" direction="in" type="s"/> </method> <method name="StartReauthentication"> diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c index 725f6f8a..477ccb23 100644 --- a/daemon/gdm-session.c +++ b/daemon/gdm-session.c @@ -128,6 +128,7 @@ struct _GdmSessionPrivate GHashTable *environment; guint32 is_program_session : 1; + guint32 display_is_initial : 1; }; enum { @@ -137,6 +138,7 @@ enum { PROP_DISPLAY_NAME, PROP_DISPLAY_HOSTNAME, PROP_DISPLAY_IS_LOCAL, + PROP_DISPLAY_IS_INITIAL, PROP_DISPLAY_DEVICE, PROP_DISPLAY_SEAT_ID, PROP_DISPLAY_X11_AUTHORITY_FILE, @@ -1987,6 +1989,7 @@ send_setup (GdmSession *self, display_seat_id, display_hostname, self->priv->display_is_local, + self->priv->display_is_initial, NULL, (GAsyncReadyCallback) on_setup_complete_cb, conversation); @@ -2052,6 +2055,7 @@ send_setup_for_user (GdmSession *self, display_seat_id, display_hostname, self->priv->display_is_local, + self->priv->display_is_initial, NULL, (GAsyncReadyCallback) on_setup_complete_cb, conversation); @@ -2112,6 +2116,7 @@ send_setup_for_program (GdmSession *self, display_seat_id, display_hostname, self->priv->display_is_local, + self->priv->display_is_initial, log_file, NULL, (GAsyncReadyCallback) on_setup_complete_cb, @@ -3035,6 +3040,13 @@ set_display_is_local (GdmSession *self, } static void +set_display_is_initial (GdmSession *self, + gboolean is_initial) +{ + self->priv->display_is_initial = is_initial; +} + +static void set_verification_mode (GdmSession *self, GdmSessionVerificationMode verification_mode) { @@ -3088,6 +3100,9 @@ gdm_session_set_property (GObject *object, case PROP_DISPLAY_IS_LOCAL: set_display_is_local (self, g_value_get_boolean (value)); break; + case PROP_DISPLAY_IS_INITIAL: + set_display_is_initial (self, g_value_get_boolean (value)); + break; case PROP_VERIFICATION_MODE: set_verification_mode (self, g_value_get_enum (value)); break; @@ -3135,6 +3150,9 @@ gdm_session_get_property (GObject *object, case PROP_DISPLAY_IS_LOCAL: g_value_set_boolean (value, self->priv->display_is_local); break; + case PROP_DISPLAY_IS_INITIAL: + g_value_set_boolean (value, self->priv->display_is_initial); + break; case PROP_VERIFICATION_MODE: g_value_set_enum (value, self->priv->verification_mode); break; @@ -3516,6 +3534,13 @@ gdm_session_class_init (GdmSessionClass *session_class) TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); g_object_class_install_property (object_class, + PROP_DISPLAY_IS_INITIAL, + g_param_spec_boolean ("display-is-initial", + "display is initial", + "display is initial", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + g_object_class_install_property (object_class, PROP_DISPLAY_X11_AUTHORITY_FILE, g_param_spec_string ("display-x11-authority-file", "display x11 authority file", |