summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2014-04-07 15:07:36 -0400
committerRay Strode <rstrode@redhat.com>2014-04-11 14:44:07 -0400
commitfc8106a4039d51759b28b7bfbc4613dfccfa7f01 (patch)
treea7bd512f0dc22071ccc05c5d5ac16c9e6bf8ccbd
parent316cceab53448648e7bdfd43cf54ea41cb092a85 (diff)
downloadgdm-fc8106a4039d51759b28b7bfbc4613dfccfa7f01.tar.gz
wip: session: start to work on doing X on its own VT
-rw-r--r--daemon/gdm-session.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 016913dd..7dd13ba1 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -121,6 +121,8 @@ struct _GdmSessionPrivate
GDBusServer *worker_server;
GDBusServer *outside_server;
GHashTable *environment;
+
+ gboolean is_program_session : 1;
};
enum {
@@ -158,6 +160,10 @@ enum {
LAST_SIGNAL
};
+#ifdef ENABLE_WAYLAND_SUPPORT
+static gboolean gdm_session_is_wayland_session (GdmSession *self);
+#endif
+
static guint signals [LAST_SIGNAL] = { 0, };
G_DEFINE_TYPE (GdmSession,
@@ -2123,6 +2129,8 @@ gdm_session_setup_for_program (GdmSession *self,
g_return_if_fail (GDM_IS_SESSION (self));
send_setup_for_program (self, service_name, username, log_file);
+
+ self->priv->is_program_session = TRUE;
}
void
@@ -2462,6 +2470,7 @@ gdm_session_start_session (GdmSession *self,
GdmSessionConversation *conversation;
char *command;
char *program;
+ gboolean is_x11 = TRUE;
g_return_if_fail (GDM_IS_SESSION (self));
g_return_if_fail (self->priv->session_conversation == NULL);
@@ -2477,10 +2486,20 @@ gdm_session_start_session (GdmSession *self,
stop_all_other_conversations (self, conversation, FALSE);
if (self->priv->selected_program == NULL) {
+ GdmSessionDisplayMode display_mode;
command = get_session_command (self);
+ display_mode = gdm_session_get_display_mode (self);
+
+#ifdef ENABLE_WAYLAND_SUPPORT
+ is_x11 = !gdm_session_is_wayland_session (self);
+#endif
+
if (gdm_session_bypasses_xsession (self)) {
program = g_strdup (command);
+ } else if (is_x11 &&
+ display_mode == GDM_SESSION_DISPLAY_MODE_NEW_VT) {
+ program = g_strdup_printf ("/usr/bin/xinit " GDMCONFDIR "/Xsession \"%s\" -- /usr/bin/Xorg :%u", command, g_random_int_range (G_MAXINT / 2, G_MAXINT));
} else {
program = g_strdup_printf (GDMCONFDIR "/Xsession \"%s\"", command);
}
@@ -2782,6 +2801,10 @@ gdm_session_get_display_mode (GdmSession *self)
}
#endif
+ if (self->priv->is_program_session) {
+ return GDM_SESSION_DISPLAY_MODE_REUSE_VT;
+ }
+
return GDM_SESSION_DISPLAY_MODE_NEW_VT;
}