summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2015-02-16 20:22:07 -0500
committerRay Strode <rstrode@redhat.com>2015-02-16 23:40:10 -0500
commitebc2d47b7c21ba2bf683d5514842175b08c220ff (patch)
tree5564a86d32e210af47d9dac056ced6ca97726f54
parentd5cd0b71ae8e213ebeff119dcc43bbdd0b069e17 (diff)
downloadgdm-ebc2d47b7c21ba2bf683d5514842175b08c220ff.tar.gz
session: forward is-initial from display to worker
The worker needs to know if a display should be forced on vt1 or not when deciding which vt to allocate for the logind session.
-rw-r--r--daemon/gdm-display.c6
-rw-r--r--daemon/gdm-manager.c4
-rw-r--r--daemon/gdm-session-worker.c11
-rw-r--r--daemon/gdm-session-worker.xml3
-rw-r--r--daemon/gdm-session.c25
5 files changed, 47 insertions, 2 deletions
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
index 7bd75239..5b2e1922 100644
--- a/daemon/gdm-display.c
+++ b/daemon/gdm-display.c
@@ -1604,6 +1604,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;
@@ -1651,6 +1652,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-manager.c b/daemon/gdm-manager.c
index 393eb3fd..2c3457c1 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -2102,6 +2102,7 @@ create_seed_session_for_display (GdmManager *manager,
{
GdmSession *session;
gboolean display_is_local = FALSE;
+ gboolean display_is_initial = FALSE;
char *display_name = NULL;
char *display_device = NULL;
char *remote_hostname = NULL;
@@ -2113,6 +2114,7 @@ create_seed_session_for_display (GdmManager *manager,
"id", &display_id,
"x11-display-name", &display_name,
"is-local", &display_is_local,
+ "is-initial", &display_is_initial,
"remote-hostname", &remote_hostname,
"x11-authority-file", &display_auth_file,
"seat-id", &display_seat_id,
@@ -2133,6 +2135,8 @@ create_seed_session_for_display (GdmManager *manager,
g_free (display_auth_file);
g_free (display_seat_id);
+ g_object_set (G_OBJECT (session), "display-is-initial", display_is_initial, NULL);
+
g_signal_connect (session,
"reauthentication-started",
G_CALLBACK (on_session_reauthentication_started),
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 1e7d3f76..d1f70bea 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,
@@ -3029,6 +3034,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)
{
@@ -3082,6 +3094,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;
@@ -3129,6 +3144,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;
@@ -3510,6 +3528,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",