summaryrefslogtreecommitdiff
path: root/daemon/gdm-display.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2012-08-06 21:41:16 +0200
committerRay Strode <rstrode@redhat.com>2012-08-06 23:23:38 -0400
commit42ef43e603d65390c2c86e276489c8a08c7808a0 (patch)
treeedd9e5d905138a4741ece8eb1699cf6cdf5fc511 /daemon/gdm-display.c
parentedd5e9cd13df68a16caa69c12b0b18d439022e3b (diff)
downloadgdm-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.c53
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",