[gdm] manager: keep track of implicitly created displays
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm] manager: keep track of implicitly created displays
- Date: Wed, 18 Feb 2015 22:47:23 +0000 (UTC)
commit 7fc253ecd0f8f5b77a6606caa0c8328313dda06b
Author: Ray Strode <rstrode redhat com>
Date: Tue Feb 17 17:06:29 2015 -0500
manager: keep track of implicitly created displays
If a display is created implicitly using gdm-x-session
or gdm-wayland-session then we need to add it to the display
store so we can track it.
https://bugzilla.gnome.org/show_bug.cgi?id=744764
daemon/gdm-manager.c | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
---
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c
index 2a6e22e..5d30682 100644
--- a/daemon/gdm-manager.c
+++ b/daemon/gdm-manager.c
@@ -45,6 +45,7 @@
#include "gdm-manager-glue.h"
#include "gdm-display-store.h"
#include "gdm-display-factory.h"
+#include "gdm-local-display.h"
#include "gdm-local-display-factory.h"
#include "gdm-session.h"
#include "gdm-session-record.h"
@@ -1507,7 +1508,14 @@ on_display_status_changed (GdmDisplay *display,
#endif
if ((display_number == -1 && status == GDM_DISPLAY_PREPARED) ||
(display_number != -1 && status == GDM_DISPLAY_MANAGED)) {
- set_up_greeter_session (manager, display);
+ char *session_class;
+
+ g_object_get (display,
+ "session-class", &session_class,
+ NULL);
+ if (g_strcmp0 (session_class, "greeter") == 0) {
+ set_up_greeter_session (manager, display);
+ }
}
break;
case GDM_DISPLAY_FAILED:
@@ -1595,6 +1603,24 @@ start_user_session (GdmManager *manager,
destroy_start_user_session_operation (operation);
}
+static void
+create_display_for_user_session (GdmManager *self,
+ GdmSession *session,
+ const char *session_id)
+{
+ GdmDisplay *display;
+
+ display = gdm_local_display_new ();
+
+ g_object_set (G_OBJECT (display),
+ "session-class", "user",
+ "session-id", session_id,
+ NULL);
+ gdm_display_store_add (self->priv->display_store,
+ display);
+ g_object_set_data (G_OBJECT (session), "gdm-display", display);
+}
+
static gboolean
on_start_user_session (StartUserSessionOperation *operation)
{
@@ -1630,6 +1656,7 @@ on_start_user_session (StartUserSessionOperation *operation)
gdm_display_stop_greeter_session (display);
g_object_set (G_OBJECT (display), "session-class", "user", NULL);
} else {
+ const char *session_id;
uid_t allowed_uid;
g_debug ("GdmManager: session has its display server, reusing our server for another login
screen");
@@ -1641,6 +1668,13 @@ on_start_user_session (StartUserSessionOperation *operation)
g_object_set_data (G_OBJECT (display), "gdm-embryonic-user-session", NULL);
g_object_set_data (G_OBJECT (operation->session), "gdm-display", NULL);
create_embryonic_user_session_for_display (operation->manager, display, allowed_uid);
+
+ /* Give the user session a new display object for bookkeeping purposes */
+ session_id = gdm_session_get_conversation_session_id (operation->session,
+ operation->service_name);
+ create_display_for_user_session (operation->manager,
+ operation->session,
+ session_id);
}
start_user_session (operation->manager, operation);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]