diff options
author | Lennart Poettering <lennart@poettering.net> | 2012-08-06 21:41:16 +0200 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2012-08-06 23:23:38 -0400 |
commit | 42ef43e603d65390c2c86e276489c8a08c7808a0 (patch) | |
tree | edd9e5d905138a4741ece8eb1699cf6cdf5fc511 /daemon/gdm-display.c | |
parent | edd5e9cd13df68a16caa69c12b0b18d439022e3b (diff) | |
download | gdm-42ef43e603d65390c2c86e276489c8a08c7808a0.tar.gz |
gdm: always run gdm on VT1
This drops automatic VT allocation schemes for the initial display in
favour of a compile time hardcoded VT assignment. The automatic
allocation schemes are inherently racy since a simpler output to the
console might already influence it and result in gdm running on another
than the intended VT.
This patch adds a --with-initial-vt= switch to configure which may be
used to set the VT gdm will run the initial server on. It defaults to 1.
https://fedoraproject.org/wiki/Features/DisplayManagerRework
https://bugzilla.gnome.org/show_bug.cgi?id=511168
Diffstat (limited to 'daemon/gdm-display.c')
-rw-r--r-- | daemon/gdm-display.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c index 25fff698..6e010ff0 100644 --- a/daemon/gdm-display.c +++ b/daemon/gdm-display.c @@ -79,6 +79,8 @@ struct GdmDisplayPrivate GdmDBusDisplay *display_skeleton; GDBusObjectSkeleton *object_skeleton; + + gboolean is_initial; }; enum { @@ -94,6 +96,7 @@ enum { PROP_X11_AUTHORITY_FILE, PROP_IS_LOCAL, PROP_SLAVE_COMMAND, + PROP_IS_INITIAL }; static void gdm_display_class_init (GdmDisplayClass *klass); @@ -535,6 +538,20 @@ gdm_display_get_seat_id (GdmDisplay *display, return TRUE; } +gboolean +gdm_display_is_initial (GdmDisplay *display, + gboolean *is_initial, + GError **error) +{ + g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE); + + if (is_initial != NULL) { + *is_initial = display->priv->is_initial; + } + + return TRUE; +} + static gboolean finish_idle (GdmDisplay *display) { @@ -886,6 +903,13 @@ _gdm_display_set_slave_command (GdmDisplay *display, } static void +_gdm_display_set_is_initial (GdmDisplay *display, + gboolean initial) +{ + display->priv->is_initial = initial; +} + +static void gdm_display_set_property (GObject *object, guint prop_id, const GValue *value, @@ -926,6 +950,9 @@ gdm_display_set_property (GObject *object, case PROP_SLAVE_COMMAND: _gdm_display_set_slave_command (self, g_value_get_string (value)); break; + case PROP_IS_INITIAL: + _gdm_display_set_is_initial (self, g_value_get_boolean (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -977,6 +1004,9 @@ gdm_display_get_property (GObject *object, case PROP_SLAVE_COMMAND: g_value_set_string (value, self->priv->slave_command); break; + case PROP_IS_INITIAL: + g_value_set_boolean (value, self->priv->is_initial); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1129,6 +1159,20 @@ handle_is_local (GdmDBusDisplay *skeleton, } static gboolean +handle_is_initial (GdmDBusDisplay *skeleton, + GDBusMethodInvocation *invocation, + GdmDisplay *display) +{ + gboolean is_initial = FALSE; + + gdm_display_is_initial (display, &is_initial, NULL); + + gdm_dbus_display_complete_is_initial (skeleton, invocation, is_initial); + + return TRUE; +} + +static gboolean handle_get_slave_bus_name (GdmDBusDisplay *skeleton, GDBusMethodInvocation *invocation, GdmDisplay *display) @@ -1237,6 +1281,8 @@ register_display (GdmDisplay *display) G_CALLBACK (handle_get_x11_display_number), display); g_signal_connect (display->priv->display_skeleton, "handle-is-local", G_CALLBACK (handle_is_local), display); + g_signal_connect (display->priv->display_skeleton, "handle-is-initial", + G_CALLBACK (handle_is_initial), display); g_signal_connect (display->priv->display_skeleton, "handle-get-slave-bus-name", G_CALLBACK (handle_get_slave_bus_name), display); g_signal_connect (display->priv->display_skeleton, "handle-set-slave-bus-name", @@ -1461,6 +1507,13 @@ gdm_display_class_init (GdmDisplayClass *klass) NULL, G_PARAM_READWRITE)); g_object_class_install_property (object_class, + PROP_IS_INITIAL, + g_param_spec_boolean ("is-initial", + NULL, + NULL, + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + g_object_class_install_property (object_class, PROP_X11_COOKIE, g_param_spec_string ("x11-cookie", "cookie", |