[gdm/benzea/wait-seat-graphical: 4/5] local-display-factory: Move session type checking into create_display
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm/benzea/wait-seat-graphical: 4/5] local-display-factory: Move session type checking into create_display
- Date: Thu, 25 Feb 2021 19:36:03 +0000 (UTC)
commit d2a06b42fe90cf3f340ebf41a0a5e7676bc50802
Author: Benjamin Berg <bberg redhat com>
Date: Thu Feb 11 12:09:43 2021 +0100
local-display-factory: Move session type checking into create_display
We used to check the session type when enumerating the seats at startup
(and on VT switch). However, this misses cases where seats are added
dynamically (such as at boot time).
Simply move the check into create_display and pass in the failure count
so that it can handle the X11 fallback when wayland failed to come up.
Related: #662
daemon/gdm-local-display-factory.c | 57 +++++++++++++-------------------------
1 file changed, 20 insertions(+), 37 deletions(-)
---
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
index c6b8d8986..9ecc03957 100644
--- a/daemon/gdm-local-display-factory.c
+++ b/daemon/gdm-local-display-factory.c
@@ -79,9 +79,7 @@ static void gdm_local_display_factory_init (GdmLocalDisplayFactory
static void gdm_local_display_factory_finalize (GObject *object);
static void ensure_display_for_seat (GdmLocalDisplayFactory *factory,
- const char *seat_id,
- const char *session_type,
- gboolean initial_display);
+ const char *seat_id);
static void on_display_status_changed (GdmDisplay *display,
GParamSpec *arg1,
@@ -386,19 +384,11 @@ on_display_status_changed (GdmDisplay *display,
factory->num_failures++;
- if (factory->num_failures > MAX_DISPLAY_FAILURES) {
- /* oh shit */
+ /* oh shit */
+ if (factory->num_failures > MAX_DISPLAY_FAILURES)
g_warning ("GdmLocalDisplayFactory: maximum number of X display failures
reached: check X server log for errors");
- } else {
-#ifdef ENABLE_WAYLAND_SUPPORT
- if (g_strcmp0 (session_type, "wayland") == 0) {
- g_free (session_type);
- session_type = NULL;
- }
-
-#endif
- ensure_display_for_seat (factory, seat_id, session_type, is_initial);
- }
+ else
+ ensure_display_for_seat (factory, seat_id);
}
break;
case GDM_DISPLAY_UNMANAGED:
@@ -461,14 +451,22 @@ lookup_prepared_display_by_seat_id (const char *id,
static void
ensure_display_for_seat (GdmLocalDisplayFactory *factory,
- const char *seat_id,
- const char *session_type,
- gboolean initial)
+ const char *seat_id)
{
+ gboolean is_initial;
+ const char *session_type = NULL;
GdmDisplayStore *store;
GdmDisplay *display = NULL;
g_autofree char *login_session_id = NULL;
+ if (g_strcmp0 (seat_id, "seat0") == 0) {
+ is_initial = TRUE;
+ if (factory->num_failures == 0 && gdm_local_display_factory_use_wayland ())
+ session_type = "wayland";
+ } else {
+ is_initial = FALSE;
+ }
+
g_debug ("GdmLocalDisplayFactory: %s login display for seat %s requested",
session_type? : "X11", seat_id);
store = gdm_display_factory_get_display_store (GDM_DISPLAY_FACTORY (factory));
@@ -522,7 +520,7 @@ ensure_display_for_seat (GdmLocalDisplayFactory *factory,
}
g_object_set (display, "seat-id", seat_id, NULL);
- g_object_set (display, "is-initial", initial, NULL);
+ g_object_set (display, "is-initial", is_initial, NULL);
store_display (factory, display);
@@ -579,18 +577,7 @@ gdm_local_display_factory_sync_seats (GdmLocalDisplayFactory *factory)
g_variant_iter_init (&iter, array);
while (g_variant_iter_loop (&iter, "(&so)", &seat, NULL)) {
- gboolean is_initial;
- const char *session_type = NULL;
-
- if (g_strcmp0 (seat, "seat0") == 0) {
- is_initial = TRUE;
- if (gdm_local_display_factory_use_wayland ())
- session_type = "wayland";
- } else {
- is_initial = FALSE;
- }
-
- ensure_display_for_seat (factory, seat, session_type, is_initial);
+ ensure_display_for_seat (factory, seat);
}
g_variant_unref (result);
@@ -610,7 +597,7 @@ on_seat_new (GDBusConnection *connection,
const char *seat;
g_variant_get (parameters, "(&s&o)", &seat, NULL);
- ensure_display_for_seat (GDM_LOCAL_DISPLAY_FACTORY (user_data), seat, NULL, FALSE);
+ ensure_display_for_seat (GDM_LOCAL_DISPLAY_FACTORY (user_data), seat);
}
static void
@@ -701,7 +688,6 @@ on_vt_changed (GIOChannel *source,
g_autofree char *login_session_id = NULL;
g_autofree char *active_session_id = NULL;
unsigned int previous_vt, new_vt, login_window_vt = 0;
- const char *session_type = NULL;
int ret, n_returned;
g_debug ("GdmLocalDisplayFactory: received VT change event");
@@ -830,12 +816,9 @@ on_vt_changed (GIOChannel *source,
return G_SOURCE_CONTINUE;
}
- if (gdm_local_display_factory_use_wayland ())
- session_type = "wayland";
-
g_debug ("GdmLocalDisplayFactory: creating new display on seat0 because of VT change");
- ensure_display_for_seat (factory, "seat0", session_type, TRUE);
+ ensure_display_for_seat (factory, "seat0");
return G_SOURCE_CONTINUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]