diff options
author | Ray Strode <rstrode@redhat.com> | 2014-04-07 15:07:36 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2014-04-11 14:44:07 -0400 |
commit | fc8106a4039d51759b28b7bfbc4613dfccfa7f01 (patch) | |
tree | a7bd512f0dc22071ccc05c5d5ac16c9e6bf8ccbd | |
parent | 316cceab53448648e7bdfd43cf54ea41cb092a85 (diff) | |
download | gdm-fc8106a4039d51759b28b7bfbc4613dfccfa7f01.tar.gz |
wip: session: start to work on doing X on its own VT
-rw-r--r-- | daemon/gdm-session.c | 23 |
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; } |