diff --git a/.cvsignore b/.cvsignore
index bb165a1..7686398 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -1 +1 @@
-gdm-2.25.2.tar.bz2
+gdm-2.26.0.tar.bz2
diff --git a/gdm-2.24.0-force-active-vt.patch b/gdm-2.24.0-force-active-vt.patch
deleted file mode 100644
index 11a9c55..0000000
--- a/gdm-2.24.0-force-active-vt.patch
+++ /dev/null
@@ -1,433 +0,0 @@
-diff -ur gdm-2.24.0/configure.ac new/configure.ac
---- gdm-2.24.0/configure.ac 2008-09-22 13:01:25.000000000 -0400
-+++ new/configure.ac 2008-09-30 22:32:05.000000000 -0400
-@@ -1311,6 +1311,23 @@
- AC_SUBST(GDM_XAUTH_DIR)
-
- dnl ---------------------------------------------------------------------------
-+dnl - Directory to spool events from other processes
-+dnl ---------------------------------------------------------------------------
-+
-+AC_ARG_WITH(spool-dir,
-+ AS_HELP_STRING([--with-spool-dir=
],
-+ [spool directory]))
-+
-+if ! test -z "$with_spool_dir"; then
-+ GDM_SPOOL_DIR=$with_spool_dir
-+else
-+ GDM_SPOOL_DIR=${localstatedir}/spool/gdm
-+fi
-+
-+AC_SUBST(GDM_SPOOL_DIR)
-+
-+
-+dnl ---------------------------------------------------------------------------
- dnl - Finish
- dnl ---------------------------------------------------------------------------
-
-diff -ur gdm-2.24.0/daemon/gdm-display.c new/daemon/gdm-display.c
---- gdm-2.24.0/daemon/gdm-display.c 2008-09-22 13:01:22.000000000 -0400
-+++ new/daemon/gdm-display.c 2008-10-15 17:03:39.000000000 -0400
-@@ -62,7 +62,9 @@
- gsize x11_cookie_size;
- GdmDisplayAccessFile *access_file;
-
-- gboolean is_local;
-+ guint is_local : 1;
-+ guint force_active_vt : 1;
-+
- guint finish_idle_id;
-
- GdmSlaveProxy *slave_proxy;
-@@ -81,6 +83,7 @@
- PROP_X11_COOKIE,
- PROP_X11_AUTHORITY_FILE,
- PROP_IS_LOCAL,
-+ PROP_FORCE_ACTIVE_VT,
- PROP_SLAVE_COMMAND,
- };
-
-@@ -491,9 +494,10 @@
- gdm_slave_proxy_set_log_path (display->priv->slave_proxy, log_path);
- g_free (log_path);
-
-- command = g_strdup_printf ("%s --display-id %s",
-+ command = g_strdup_printf ("%s --display-id %s %s",
- display->priv->slave_command,
-- display->priv->id);
-+ display->priv->id,
-+ display->priv->force_active_vt? "--force-active-vt" : "");
- gdm_slave_proxy_set_command (display->priv->slave_proxy, command);
- g_free (command);
-
-@@ -702,6 +706,13 @@
- }
-
- static void
-+_gdm_display_set_force_active_vt (GdmDisplay *display,
-+ gboolean force_active_vt)
-+{
-+ display->priv->force_active_vt = force_active_vt;
-+}
-+
-+static void
- _gdm_display_set_slave_command (GdmDisplay *display,
- const char *command)
- {
-@@ -744,6 +755,9 @@
- case PROP_IS_LOCAL:
- _gdm_display_set_is_local (self, g_value_get_boolean (value));
- break;
-+ case PROP_FORCE_ACTIVE_VT:
-+ _gdm_display_set_force_active_vt (self, g_value_get_boolean (value));
-+ break;
- case PROP_SLAVE_COMMAND:
- _gdm_display_set_slave_command (self, g_value_get_string (value));
- break;
-@@ -792,6 +806,9 @@
- case PROP_IS_LOCAL:
- g_value_set_boolean (value, self->priv->is_local);
- break;
-+ case PROP_FORCE_ACTIVE_VT:
-+ g_value_set_boolean (value, self->priv->force_active_vt);
-+ break;
- case PROP_SLAVE_COMMAND:
- g_value_set_string (value, self->priv->slave_command);
- break;
-@@ -960,6 +977,13 @@
- NULL,
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-+ g_object_class_install_property (object_class,
-+ PROP_FORCE_ACTIVE_VT,
-+ g_param_spec_boolean ("force-active-vt",
-+ NULL,
-+ NULL,
-+ FALSE,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
- g_object_class_install_property (object_class,
- PROP_SLAVE_COMMAND,
-diff -ur gdm-2.24.0/daemon/gdm-server.c new/daemon/gdm-server.c
---- gdm-2.24.0/daemon/gdm-server.c 2008-09-22 13:01:22.000000000 -0400
-+++ new/daemon/gdm-server.c 2008-10-15 16:24:46.000000000 -0400
-@@ -34,6 +34,8 @@
- #include
- #include
-
-+#include
-+
- #include
- #include
- #include
-@@ -663,6 +665,44 @@
- return ret;
- }
-
-+static int
-+get_active_vt (void)
-+{
-+ int console_fd;
-+ struct vt_stat console_state = { 0 };
-+
-+ console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY);
-+
-+ if (console_fd < 0) {
-+ goto out;
-+ }
-+
-+ if (ioctl (console_fd, VT_GETSTATE, &console_state) < 0) {
-+ goto out;
-+ }
-+
-+out:
-+ if (console_fd >= 0) {
-+ close (console_fd);
-+ }
-+
-+ return console_state.v_active;
-+}
-+
-+static char *
-+get_active_vt_as_string (void)
-+{
-+ int vt;
-+
-+ vt = get_active_vt ();
-+
-+ if (vt <= 0) {
-+ return NULL;
-+ }
-+
-+ return g_strdup_printf ("vt%d", vt);
-+}
-+
- /**
- * gdm_server_start:
- * @disp: Pointer to a GdmDisplay structure
-@@ -681,6 +721,21 @@
- return res;
- }
-
-+gboolean
-+gdm_server_start_on_active_vt (GdmServer *server)
-+{
-+ gboolean res;
-+ char *vt;
-+
-+ g_free (server->priv->command);
-+ server->priv->command = g_strdup (X_SERVER " -nr -verbose");
-+ vt = get_active_vt_as_string ();
-+ res = gdm_server_spawn (server, vt);
-+ g_free (vt);
-+
-+ return res;
-+}
-+
- static void
- server_died (GdmServer *server)
- {
-diff -ur gdm-2.24.0/daemon/gdm-server.h new/daemon/gdm-server.h
---- gdm-2.24.0/daemon/gdm-server.h 2008-07-10 11:07:42.000000000 -0400
-+++ new/daemon/gdm-server.h 2008-10-15 16:21:36.000000000 -0400
-@@ -56,6 +56,7 @@
- GdmServer * gdm_server_new (const char *display_id,
- const char *auth_file);
- gboolean gdm_server_start (GdmServer *server);
-+gboolean gdm_server_start_on_active_vt (GdmServer *server);
- gboolean gdm_server_stop (GdmServer *server);
- char * gdm_server_get_display_device (GdmServer *server);
-
-diff -ur gdm-2.24.0/daemon/gdm-simple-slave.c new/daemon/gdm-simple-slave.c
---- gdm-2.24.0/daemon/gdm-simple-slave.c 2008-09-22 13:01:22.000000000 -0400
-+++ new/daemon/gdm-simple-slave.c 2008-10-15 16:29:48.000000000 -0400
-@@ -84,6 +84,7 @@
-
- enum {
- PROP_0,
-+ FORCE_ACTIVE_VT
- };
-
- static void gdm_simple_slave_class_init (GdmSimpleSlaveClass *klass);
-@@ -1021,11 +1031,13 @@
- char *display_name;
- char *auth_file;
- gboolean display_is_local;
-+ gboolean force_active_vt;
-
- g_object_get (slave,
- "display-is-local", &display_is_local,
- "display-name", &display_name,
- "display-x11-authority-file", &auth_file,
-+ "force-active-vt", &force_active_vt,
- NULL);
-
- /* if this is local display start a server if one doesn't
-@@ -1057,7 +1069,10 @@
- G_CALLBACK (on_server_ready),
- slave);
-
-- res = gdm_server_start (slave->priv->server);
-+ if (force_active_vt)
-+ res = gdm_server_start_on_active_vt (slave->priv->server);
-+ else
-+ res = gdm_server_start (slave->priv->server);
- if (! res) {
- g_warning (_("Could not start the X "
- "server (your graphical environment) "
-@@ -1207,12 +1222,14 @@
- }
-
- GdmSlave *
--gdm_simple_slave_new (const char *id)
-+gdm_simple_slave_new (const char *id,
-+ gboolean force_active_vt)
- {
- GObject *object;
-
- object = g_object_new (GDM_TYPE_SIMPLE_SLAVE,
- "display-id", id,
-+ "force-active-vt", force_active_vt,
- NULL);
-
- return GDM_SLAVE (object);
-diff -ur gdm-2.24.0/daemon/gdm-simple-slave.h new/daemon/gdm-simple-slave.h
---- gdm-2.24.0/daemon/gdm-simple-slave.h 2008-07-10 11:07:42.000000000 -0400
-+++ new/daemon/gdm-simple-slave.h 2008-10-15 16:03:43.000000000 -0400
-@@ -48,7 +48,8 @@
- } GdmSimpleSlaveClass;
-
- GType gdm_simple_slave_get_type (void);
--GdmSlave * gdm_simple_slave_new (const char *id);
-+GdmSlave * gdm_simple_slave_new (const char *id,
-+ gboolean force_active_vt);
-
- G_END_DECLS
-
-diff -ur gdm-2.24.0/daemon/gdm-slave.c new/daemon/gdm-slave.c
---- gdm-2.24.0/daemon/gdm-slave.c 2008-07-28 22:40:42.000000000 -0400
-+++ new/daemon/gdm-slave.c 2008-10-15 16:31:33.000000000 -0400
-@@ -83,6 +84,7 @@
- char *display_hostname;
- gboolean display_is_local;
- gboolean display_is_parented;
-+ gboolean force_active_vt;
- char *display_seat_id;
- char *display_x11_authority_file;
- char *parent_display_name;
-@@ -99,6 +101,7 @@
- PROP_DISPLAY_NUMBER,
- PROP_DISPLAY_HOSTNAME,
- PROP_DISPLAY_IS_LOCAL,
-+ PROP_FORCE_ACTIVE_VT,
- PROP_DISPLAY_SEAT_ID,
- PROP_DISPLAY_X11_AUTHORITY_FILE
- };
-@@ -1110,6 +1184,13 @@
- }
-
- static void
-+_gdm_slave_set_force_active_vt (GdmSlave *slave,
-+ gboolean force_active_vt)
-+{
-+ slave->priv->force_active_vt = force_active_vt;
-+}
-+
-+static void
- gdm_slave_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
-@@ -1141,6 +1222,9 @@
- case PROP_DISPLAY_IS_LOCAL:
- _gdm_slave_set_display_is_local (self, g_value_get_boolean (value));
- break;
-+ case PROP_FORCE_ACTIVE_VT:
-+ _gdm_slave_set_force_active_vt (self, g_value_get_boolean (value));
-+ break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
-@@ -1179,6 +1263,9 @@
- case PROP_DISPLAY_IS_LOCAL:
- g_value_set_boolean (value, self->priv->display_is_local);
- break;
-+ case PROP_FORCE_ACTIVE_VT:
-+ g_value_set_boolean (value, self->priv->force_active_vt);
-+ break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
-@@ -1304,6 +1391,14 @@
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
-+ g_object_class_install_property (object_class,
-+ PROP_FORCE_ACTIVE_VT,
-+ g_param_spec_boolean ("force-active-vt",
-+ "Force Active VT",
-+ "Force display to active VT",
-+ TRUE,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-+
- signals [STOPPED] =
- g_signal_new ("stopped",
- G_TYPE_FROM_CLASS (object_class),
-diff -ur gdm-2.24.0/daemon/gdm-static-display.c new/daemon/gdm-static-display.c
---- gdm-2.24.0/daemon/gdm-static-display.c 2008-07-10 11:07:42.000000000 -0400
-+++ new/daemon/gdm-static-display.c 2008-10-15 16:24:38.000000000 -0400
-@@ -86,10 +86,27 @@
- }
-
- static gboolean
-+triggered_to_force_display_on_active_vt (void)
-+{
-+ gboolean should_force_display_on_active_vt;
-+
-+ should_force_display_on_active_vt = g_file_test (GDM_SPOOL_DIR "/force-display-on-active-vt",
-+ G_FILE_TEST_EXISTS);
-+ g_unlink (GDM_SPOOL_DIR "/force-display-on-active-vt");
-+
-+ return should_force_display_on_active_vt;
-+}
-+
-+static gboolean
- gdm_static_display_manage (GdmDisplay *display)
- {
- g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
-
-+ if (triggered_to_force_display_on_active_vt ()) {
-+ g_object_set (display, "force-active-vt", TRUE, NULL);
-+ } else {
-+ g_object_set (display, "force-active-vt", FALSE, NULL);
-+ }
- GDM_DISPLAY_CLASS (gdm_static_display_parent_class)->manage (display);
-
- return TRUE;
-diff -ur gdm-2.24.0/daemon/Makefile.am new/daemon/Makefile.am
---- gdm-2.24.0/daemon/Makefile.am 2008-08-01 12:39:12.000000000 -0400
-+++ new/daemon/Makefile.am 2008-09-30 22:32:05.000000000 -0400
-@@ -16,6 +16,7 @@
- -DPIXMAPDIR=\"$(pixmapdir)\" \
- -DSBINDIR=\"$(sbindir)\" \
- -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
-+ -DGDM_SPOOL_DIR=\"$(GDM_SPOOL_DIR)\" \
- -DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\" \
- -DGDM_DEFAULTS_CONF=\"$(GDM_DEFAULTS_CONF)\" \
- -DGDM_CUSTOM_CONF=\"$(GDM_CUSTOM_CONF)\" \
-diff -ur gdm-2.24.0/daemon/simple-slave-main.c new/daemon/simple-slave-main.c
---- gdm-2.24.0/daemon/simple-slave-main.c 2008-08-21 00:31:47.000000000 -0400
-+++ new/daemon/simple-slave-main.c 2008-10-15 16:25:38.000000000 -0400
-@@ -171,10 +171,12 @@
- GdmSlave *slave;
- static char *display_id = NULL;
- static gboolean debug = FALSE;
-+ static gboolean force_active_vt = FALSE;
- GdmSignalHandler *signal_handler;
- static GOptionEntry entries [] = {
- { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL },
- { "display-id", 0, 0, G_OPTION_ARG_STRING, &display_id, N_("Display ID"), N_("id") },
-+ { "force-active-vt", 0, 0, G_OPTION_ARG_NONE, &force_active_vt, N_("Force X to start on active vt"), NULL },
- { NULL }
- };
-
-@@ -231,7 +233,7 @@
- gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL);
- gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL);
-
-- slave = gdm_simple_slave_new (display_id);
-+ slave = gdm_simple_slave_new (display_id, force_active_vt);
- if (slave == NULL) {
- goto out;
- }
-diff -ur gdm-2.24.0/data/Makefile.am new/data/Makefile.am
---- gdm-2.24.0/data/Makefile.am 2008-09-22 13:01:23.000000000 -0400
-+++ new/data/Makefile.am 2008-09-30 22:32:05.000000000 -0400
-@@ -13,6 +13,7 @@
- postlogindir = $(gdmconfdir)/PostLogin
- workingdir = $(GDM_WORKING_DIR)
- xauthdir = $(GDM_XAUTH_DIR)
-+spooldir = $(GDM_SPOOL_DIR)
-
- if OS_SOLARIS
- DISTRO_XSESSION=$(srcdir)/Xsession.solaris
-@@ -132,6 +133,7 @@
- -rf \
- $(DESTDIR)$(workingdir)/.gconf.mandatory \
- $(DESTDIR)$(xauthdir)
-+ $(DESTDIR)$(spooldir)
-
- install-data-hook: gdm.conf-custom Xsession Init PostSession PreSession gconf.path
- if test '!' -d $(DESTDIR)$(gdmconfdir); then \
-@@ -219,6 +221,12 @@
- chown root:gdm $(DESTDIR)$(workingdir) || : ; \
- fi
-
-+ if test '!' -d $(DESTDIR)$(spooldir); then \
-+ $(mkinstalldirs) $(DESTDIR)$(spooldir); \
-+ chmod 775 $(DESTDIR)$(spooldir); \
-+ chown root:gdm $(DESTDIR)$(spooldir) || : ; \
-+ fi
-+
- $(INSTALL_DATA) $(srcdir)/gconf.path $(DESTDIR)$(workingdir)/.gconf.path
- gconftool-2 --direct --config-source=xml:merged:$(DESTDIR)$(workingdir)/.gconf.mandatory --recursive-unset /
- gconftool-2 --direct --config-source=xml:merged:$(DESTDIR)$(workingdir)/.gconf.mandatory --load $(srcdir)/session-setup.entries
diff --git a/gdm-2.25.2-multistack-but-boring.patch b/gdm-2.25.2-multistack-but-boring.patch
index 8998317..948a7d9 100644
--- a/gdm-2.25.2-multistack-but-boring.patch
+++ b/gdm-2.25.2-multistack-but-boring.patch
@@ -7045,7 +7045,7 @@ diff -up gdm-2.25.2/gui/simple-greeter/gdm-greeter-login-window.glade.multistack
0
-@@ -699,17 +673,11 @@
+@@ -699,16 +673,11 @@
@@ -7059,7 +7059,6 @@ diff -up gdm-2.25.2/gui/simple-greeter/gdm-greeter-login-window.glade.multistack
- 0
-
- True
-- •
- True
+ 0
+ 0
@@ -7705,7 +7704,7 @@ diff -up gdm-2.25.2/gui/simple-greeter/gdm-greeter-session.c.multistack-but-bori
+ gdm_greeter_client_call_start_session_when_ready (session->priv->client, service_name, TRUE);
}
- static void
+ static int
@@ -321,7 +358,10 @@ toggle_login_window (GdmGreeterSession *
is_local = gdm_greeter_client_get_display_is_local (session->priv->client);
g_debug ("GdmGreeterSession: Starting a login window local:%d", is_local);
diff --git a/gdm-2.26.0-force-active-vt.patch b/gdm-2.26.0-force-active-vt.patch
new file mode 100644
index 0000000..c8643e8
--- /dev/null
+++ b/gdm-2.26.0-force-active-vt.patch
@@ -0,0 +1,433 @@
+diff -up gdm-2.26.0/configure.ac.force-active-vt gdm-2.26.0/configure.ac
+--- gdm-2.26.0/configure.ac.force-active-vt 2009-03-13 00:00:28.000000000 -0400
++++ gdm-2.26.0/configure.ac 2009-03-16 14:29:02.644213240 -0400
+@@ -1231,6 +1231,23 @@ fi
+ AC_SUBST(GDM_XAUTH_DIR)
+
+ dnl ---------------------------------------------------------------------------
++dnl - Directory to spool events from other processes
++dnl ---------------------------------------------------------------------------
++
++AC_ARG_WITH(spool-dir,
++ AS_HELP_STRING([--with-spool-dir=],
++ [spool directory]))
++
++if ! test -z "$with_spool_dir"; then
++ GDM_SPOOL_DIR=$with_spool_dir
++else
++ GDM_SPOOL_DIR=${localstatedir}/spool/gdm
++fi
++
++AC_SUBST(GDM_SPOOL_DIR)
++
++
++dnl ---------------------------------------------------------------------------
+ dnl - Finish
+ dnl ---------------------------------------------------------------------------
+
+diff -up gdm-2.26.0/daemon/gdm-display.c.force-active-vt gdm-2.26.0/daemon/gdm-display.c
+--- gdm-2.26.0/daemon/gdm-display.c.force-active-vt 2009-02-19 21:45:13.000000000 -0500
++++ gdm-2.26.0/daemon/gdm-display.c 2009-03-16 14:29:02.646213754 -0400
+@@ -65,7 +65,9 @@ struct GdmDisplayPrivate
+ gsize x11_cookie_size;
+ GdmDisplayAccessFile *access_file;
+
+- gboolean is_local;
++ guint is_local : 1;
++ guint force_active_vt : 1;
++
+ guint finish_idle_id;
+
+ GdmSlaveProxy *slave_proxy;
+@@ -84,6 +86,7 @@ enum {
+ PROP_X11_COOKIE,
+ PROP_X11_AUTHORITY_FILE,
+ PROP_IS_LOCAL,
++ PROP_FORCE_ACTIVE_VT,
+ PROP_SLAVE_COMMAND,
+ };
+
+@@ -578,9 +581,10 @@ gdm_display_real_prepare (GdmDisplay *di
+ gdm_slave_proxy_set_log_path (display->priv->slave_proxy, log_path);
+ g_free (log_path);
+
+- command = g_strdup_printf ("%s --display-id %s",
++ command = g_strdup_printf ("%s --display-id %s %s",
+ display->priv->slave_command,
+- display->priv->id);
++ display->priv->id,
++ display->priv->force_active_vt? "--force-active-vt" : "");
+ gdm_slave_proxy_set_command (display->priv->slave_proxy, command);
+ g_free (command);
+
+@@ -831,6 +835,13 @@ _gdm_display_set_is_local (GdmDisplay
+ }
+
+ static void
++_gdm_display_set_force_active_vt (GdmDisplay *display,
++ gboolean force_active_vt)
++{
++ display->priv->force_active_vt = force_active_vt;
++}
++
++static void
+ _gdm_display_set_slave_command (GdmDisplay *display,
+ const char *command)
+ {
+@@ -873,6 +884,9 @@ gdm_display_set_property (GObject
+ case PROP_IS_LOCAL:
+ _gdm_display_set_is_local (self, g_value_get_boolean (value));
+ break;
++ case PROP_FORCE_ACTIVE_VT:
++ _gdm_display_set_force_active_vt (self, g_value_get_boolean (value));
++ break;
+ case PROP_SLAVE_COMMAND:
+ _gdm_display_set_slave_command (self, g_value_get_string (value));
+ break;
+@@ -921,6 +935,9 @@ gdm_display_get_property (GObject
+ case PROP_IS_LOCAL:
+ g_value_set_boolean (value, self->priv->is_local);
+ break;
++ case PROP_FORCE_ACTIVE_VT:
++ g_value_set_boolean (value, self->priv->force_active_vt);
++ break;
+ case PROP_SLAVE_COMMAND:
+ g_value_set_string (value, self->priv->slave_command);
+ break;
+@@ -1091,6 +1108,13 @@ gdm_display_class_init (GdmDisplayClass
+ NULL,
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
++ g_object_class_install_property (object_class,
++ PROP_FORCE_ACTIVE_VT,
++ g_param_spec_boolean ("force-active-vt",
++ NULL,
++ NULL,
++ FALSE,
++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (object_class,
+ PROP_SLAVE_COMMAND,
+diff -up gdm-2.26.0/daemon/gdm-server.c.force-active-vt gdm-2.26.0/daemon/gdm-server.c
+--- gdm-2.26.0/daemon/gdm-server.c.force-active-vt 2009-02-19 21:45:13.000000000 -0500
++++ gdm-2.26.0/daemon/gdm-server.c 2009-03-16 14:29:02.647212475 -0400
+@@ -34,6 +34,8 @@
+ #include
+ #include
+
++#include
++
+ #include
+ #include
+ #include
+@@ -663,6 +665,44 @@ gdm_server_spawn (GdmServer *server,
+ return ret;
+ }
+
++static int
++get_active_vt (void)
++{
++ int console_fd;
++ struct vt_stat console_state = { 0 };
++
++ console_fd = open ("/dev/tty0", O_RDONLY | O_NOCTTY);
++
++ if (console_fd < 0) {
++ goto out;
++ }
++
++ if (ioctl (console_fd, VT_GETSTATE, &console_state) < 0) {
++ goto out;
++ }
++
++out:
++ if (console_fd >= 0) {
++ close (console_fd);
++ }
++
++ return console_state.v_active;
++}
++
++static char *
++get_active_vt_as_string (void)
++{
++ int vt;
++
++ vt = get_active_vt ();
++
++ if (vt <= 0) {
++ return NULL;
++ }
++
++ return g_strdup_printf ("vt%d", vt);
++}
++
+ /**
+ * gdm_server_start:
+ * @disp: Pointer to a GdmDisplay structure
+@@ -681,6 +721,21 @@ gdm_server_start (GdmServer *server)
+ return res;
+ }
+
++gboolean
++gdm_server_start_on_active_vt (GdmServer *server)
++{
++ gboolean res;
++ char *vt;
++
++ g_free (server->priv->command);
++ server->priv->command = g_strdup (X_SERVER " -nr -verbose");
++ vt = get_active_vt_as_string ();
++ res = gdm_server_spawn (server, vt);
++ g_free (vt);
++
++ return res;
++}
++
+ static void
+ server_died (GdmServer *server)
+ {
+diff -up gdm-2.26.0/daemon/gdm-server.h.force-active-vt gdm-2.26.0/daemon/gdm-server.h
+--- gdm-2.26.0/daemon/gdm-server.h.force-active-vt 2009-02-19 21:45:13.000000000 -0500
++++ gdm-2.26.0/daemon/gdm-server.h 2009-03-16 14:29:02.649191269 -0400
+@@ -56,6 +56,7 @@ GType gdm_server_get_type
+ GdmServer * gdm_server_new (const char *display_id,
+ const char *auth_file);
+ gboolean gdm_server_start (GdmServer *server);
++gboolean gdm_server_start_on_active_vt (GdmServer *server);
+ gboolean gdm_server_stop (GdmServer *server);
+ char * gdm_server_get_display_device (GdmServer *server);
+
+diff -up gdm-2.26.0/daemon/gdm-simple-slave.c.force-active-vt gdm-2.26.0/daemon/gdm-simple-slave.c
+--- gdm-2.26.0/daemon/gdm-simple-slave.c.force-active-vt 2009-02-19 21:45:13.000000000 -0500
++++ gdm-2.26.0/daemon/gdm-simple-slave.c 2009-03-16 14:29:02.652215508 -0400
+@@ -88,6 +88,7 @@ struct GdmSimpleSlavePrivate
+
+ enum {
+ PROP_0,
++ FORCE_ACTIVE_VT
+ };
+
+ static void gdm_simple_slave_class_init (GdmSimpleSlaveClass *klass);
+@@ -1064,11 +1065,13 @@ gdm_simple_slave_run (GdmSimpleSlave *sl
+ char *display_name;
+ char *auth_file;
+ gboolean display_is_local;
++ gboolean force_active_vt;
+
+ g_object_get (slave,
+ "display-is-local", &display_is_local,
+ "display-name", &display_name,
+ "display-x11-authority-file", &auth_file,
++ "force-active-vt", &force_active_vt,
+ NULL);
+
+ /* if this is local display start a server if one doesn't
+@@ -1100,7 +1103,10 @@ gdm_simple_slave_run (GdmSimpleSlave *sl
+ G_CALLBACK (on_server_ready),
+ slave);
+
+- res = gdm_server_start (slave->priv->server);
++ if (force_active_vt)
++ res = gdm_server_start_on_active_vt (slave->priv->server);
++ else
++ res = gdm_server_start (slave->priv->server);
+ if (! res) {
+ g_warning (_("Could not start the X "
+ "server (your graphical environment) "
+@@ -1248,12 +1254,14 @@ gdm_simple_slave_finalize (GObject *obje
+ }
+
+ GdmSlave *
+-gdm_simple_slave_new (const char *id)
++gdm_simple_slave_new (const char *id,
++ gboolean force_active_vt)
+ {
+ GObject *object;
+
+ object = g_object_new (GDM_TYPE_SIMPLE_SLAVE,
+ "display-id", id,
++ "force-active-vt", force_active_vt,
+ NULL);
+
+ return GDM_SLAVE (object);
+diff -up gdm-2.26.0/daemon/gdm-simple-slave.h.force-active-vt gdm-2.26.0/daemon/gdm-simple-slave.h
+--- gdm-2.26.0/daemon/gdm-simple-slave.h.force-active-vt 2009-02-19 21:45:13.000000000 -0500
++++ gdm-2.26.0/daemon/gdm-simple-slave.h 2009-03-16 14:29:02.655435299 -0400
+@@ -48,7 +48,8 @@ typedef struct
+ } GdmSimpleSlaveClass;
+
+ GType gdm_simple_slave_get_type (void);
+-GdmSlave * gdm_simple_slave_new (const char *id);
++GdmSlave * gdm_simple_slave_new (const char *id,
++ gboolean force_active_vt);
+
+ G_END_DECLS
+
+diff -up gdm-2.26.0/daemon/gdm-slave.c.force-active-vt gdm-2.26.0/daemon/gdm-slave.c
+--- gdm-2.26.0/daemon/gdm-slave.c.force-active-vt 2009-02-19 21:45:13.000000000 -0500
++++ gdm-2.26.0/daemon/gdm-slave.c 2009-03-16 14:29:02.692436090 -0400
+@@ -83,6 +83,7 @@ struct GdmSlavePrivate
+ char *display_hostname;
+ gboolean display_is_local;
+ gboolean display_is_parented;
++ gboolean force_active_vt;
+ char *display_seat_id;
+ char *display_x11_authority_file;
+ char *parent_display_name;
+@@ -99,6 +100,7 @@ enum {
+ PROP_DISPLAY_NUMBER,
+ PROP_DISPLAY_HOSTNAME,
+ PROP_DISPLAY_IS_LOCAL,
++ PROP_FORCE_ACTIVE_VT,
+ PROP_DISPLAY_SEAT_ID,
+ PROP_DISPLAY_X11_AUTHORITY_FILE
+ };
+@@ -1164,6 +1166,13 @@ _gdm_slave_set_display_is_local (GdmSlav
+ }
+
+ static void
++_gdm_slave_set_force_active_vt (GdmSlave *slave,
++ gboolean force_active_vt)
++{
++ slave->priv->force_active_vt = force_active_vt;
++}
++
++static void
+ gdm_slave_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+@@ -1195,6 +1204,9 @@ gdm_slave_set_property (GObject *ob
+ case PROP_DISPLAY_IS_LOCAL:
+ _gdm_slave_set_display_is_local (self, g_value_get_boolean (value));
+ break;
++ case PROP_FORCE_ACTIVE_VT:
++ _gdm_slave_set_force_active_vt (self, g_value_get_boolean (value));
++ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+@@ -1233,6 +1245,9 @@ gdm_slave_get_property (GObject *obje
+ case PROP_DISPLAY_IS_LOCAL:
+ g_value_set_boolean (value, self->priv->display_is_local);
+ break;
++ case PROP_FORCE_ACTIVE_VT:
++ g_value_set_boolean (value, self->priv->force_active_vt);
++ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+@@ -1358,6 +1373,14 @@ gdm_slave_class_init (GdmSlaveClass *kla
+ TRUE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
++ g_object_class_install_property (object_class,
++ PROP_FORCE_ACTIVE_VT,
++ g_param_spec_boolean ("force-active-vt",
++ "Force Active VT",
++ "Force display to active VT",
++ TRUE,
++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
++
+ signals [STOPPED] =
+ g_signal_new ("stopped",
+ G_TYPE_FROM_CLASS (object_class),
+diff -up gdm-2.26.0/daemon/gdm-static-display.c.force-active-vt gdm-2.26.0/daemon/gdm-static-display.c
+--- gdm-2.26.0/daemon/gdm-static-display.c.force-active-vt 2009-03-11 11:00:52.000000000 -0400
++++ gdm-2.26.0/daemon/gdm-static-display.c 2009-03-16 14:29:02.693447871 -0400
+@@ -86,10 +86,27 @@ gdm_static_display_remove_user_authoriza
+ }
+
+ static gboolean
++triggered_to_force_display_on_active_vt (void)
++{
++ gboolean should_force_display_on_active_vt;
++
++ should_force_display_on_active_vt = g_file_test (GDM_SPOOL_DIR "/force-display-on-active-vt",
++ G_FILE_TEST_EXISTS);
++ g_unlink (GDM_SPOOL_DIR "/force-display-on-active-vt");
++
++ return should_force_display_on_active_vt;
++}
++
++static gboolean
+ gdm_static_display_manage (GdmDisplay *display)
+ {
+ g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
+
++ if (triggered_to_force_display_on_active_vt ()) {
++ g_object_set (display, "force-active-vt", TRUE, NULL);
++ } else {
++ g_object_set (display, "force-active-vt", FALSE, NULL);
++ }
+ GDM_DISPLAY_CLASS (gdm_static_display_parent_class)->manage (display);
+
+ return TRUE;
+diff -up gdm-2.26.0/daemon/Makefile.am.force-active-vt gdm-2.26.0/daemon/Makefile.am
+--- gdm-2.26.0/daemon/Makefile.am.force-active-vt 2009-02-19 21:45:14.000000000 -0500
++++ gdm-2.26.0/daemon/Makefile.am 2009-03-16 14:29:58.020476408 -0400
+@@ -14,6 +14,7 @@ AM_CPPFLAGS = \
+ -DLOGDIR=\"$(logdir)\" \
+ -DSBINDIR=\"$(sbindir)\" \
+ -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
++ -DGDM_SPOOL_DIR=\"$(GDM_SPOOL_DIR)\" \
+ -DGDM_XAUTH_DIR=\"$(GDM_XAUTH_DIR)\" \
+ -DGDM_SESSION_DEFAULT_PATH=\"$(GDM_SESSION_DEFAULT_PATH)\" \
+ $(DISABLE_DEPRECATED_CFLAGS) \
+diff -up gdm-2.26.0/daemon/simple-slave-main.c.force-active-vt gdm-2.26.0/daemon/simple-slave-main.c
+--- gdm-2.26.0/daemon/simple-slave-main.c.force-active-vt 2009-03-16 11:59:33.000000000 -0400
++++ gdm-2.26.0/daemon/simple-slave-main.c 2009-03-16 14:29:02.697437865 -0400
+@@ -174,10 +174,12 @@ main (int argc,
+ GdmSlave *slave;
+ static char *display_id = NULL;
+ static gboolean debug = FALSE;
++ static gboolean force_active_vt = FALSE;
+ GdmSignalHandler *signal_handler;
+ static GOptionEntry entries [] = {
+ { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL },
+ { "display-id", 0, 0, G_OPTION_ARG_STRING, &display_id, N_("Display ID"), N_("id") },
++ { "force-active-vt", 0, 0, G_OPTION_ARG_NONE, &force_active_vt, N_("Force X to start on active vt"), NULL },
+ { NULL }
+ };
+
+@@ -245,7 +247,7 @@ main (int argc,
+ gdm_signal_handler_add (signal_handler, SIGUSR1, signal_cb, NULL);
+ gdm_signal_handler_add (signal_handler, SIGUSR2, signal_cb, NULL);
+
+- slave = gdm_simple_slave_new (display_id);
++ slave = gdm_simple_slave_new (display_id, force_active_vt);
+ if (slave == NULL) {
+ goto out;
+ }
+diff -up gdm-2.26.0/data/Makefile.am.force-active-vt gdm-2.26.0/data/Makefile.am
+--- gdm-2.26.0/data/Makefile.am.force-active-vt 2009-02-19 21:45:14.000000000 -0500
++++ gdm-2.26.0/data/Makefile.am 2009-03-16 14:30:39.953441112 -0400
+@@ -13,6 +13,7 @@ predir = $(gdmconfdir)/PreSession
+ postlogindir = $(gdmconfdir)/PostLogin
+ workingdir = $(GDM_WORKING_DIR)
+ xauthdir = $(GDM_XAUTH_DIR)
++spooldir = $(GDM_SPOOL_DIR)
+
+ Xsession: $(srcdir)/Xsession.in
+ sed -e 's,[@]XSESSION_SHELL[@],$(XSESSION_SHELL),g' \
+@@ -122,6 +123,7 @@ uninstall-hook:
+ -rf \
+ $(DESTDIR)$(workingdir)/.gconf.mandatory \
+ $(DESTDIR)$(xauthdir)
++ $(DESTDIR)$(spooldir)
+
+ install-data-hook: gdm.conf-custom Xsession Init PostSession PreSession gconf.path
+ if test '!' -d $(DESTDIR)$(gdmconfdir); then \
+@@ -209,6 +211,12 @@ install-data-hook: gdm.conf-custom Xsess
+ chown root:gdm $(DESTDIR)$(workingdir) || : ; \
+ fi
+
++ if test '!' -d $(DESTDIR)$(spooldir); then \
++ $(mkinstalldirs) $(DESTDIR)$(spooldir); \
++ chmod 775 $(DESTDIR)$(spooldir); \
++ chown root:gdm $(DESTDIR)$(spooldir) || : ; \
++ fi
++
+ $(INSTALL_DATA) $(srcdir)/gconf.path $(DESTDIR)$(workingdir)/.gconf.path
+ gconftool-2 --direct --config-source=xml:merged:$(DESTDIR)$(workingdir)/.gconf.mandatory --recursive-unset /
+ gconftool-2 --direct --config-source=xml:merged:$(DESTDIR)$(workingdir)/.gconf.mandatory --load $(srcdir)/session-setup.entries
diff --git a/gdm.spec b/gdm.spec
index 7b26815..2f8d3a8 100644
--- a/gdm.spec
+++ b/gdm.spec
@@ -14,8 +14,8 @@
Summary: The GNOME Display Manager
Name: gdm
-Version: 2.25.2
-Release: 20%{?dist}
+Version: 2.26.0
+Release: 1%{?dist}
Epoch: 1
License: GPLv2+
Group: User Interface/X
@@ -82,7 +82,7 @@ BuildRequires: libxklavier-devel
Provides: service(graphical-login)
Requires: audit-libs >= %{libauditver}
-Patch2: gdm-2.24.0-force-active-vt.patch
+Patch2: gdm-2.26.0-force-active-vt.patch
Patch3: gdm-2.23.92-save-root-window.patch
Patch4: gdm-2.25.2-append-logs.patch
@@ -124,7 +124,7 @@ multiple simulanteous logged in users.
%patch14 -p1 -b .multistack-but-boring
%patch15 -p1 -b .start-faster
%patch16 -p1 -b .dont-depend-on-hostname
-%patch17 -p1 -b .maybe-work-around-gcc-bug
+#%patch17 -p1 -b .maybe-work-around-gcc-bug
%patch99 -p1 -b .fedora-logo
@@ -348,6 +348,10 @@ fi
%{_datadir}/gnome-2.0/ui/GNOME_FastUserSwitchApplet.xml
%changelog
+* Mon Mar 16 2009 Ray Strode - 1:2.26.0-1
+- Update to 2.26.0
+- Drop gcc workaround. it might not be needed now.
+
* Sat Mar 14 2009 Ray Strode - 1:2.25.2-20
- Drop the use localhost patch because it broke things.
Instead add authorization that doesn't depend on a hostname
diff --git a/sources b/sources
index d4a8165..2e832cb 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-fa0754d0b79ec3b11367f72297ac3b87 gdm-2.25.2.tar.bz2
+b1a8db2f0e058d3c7b4c9a4600839a14 gdm-2.26.0.tar.bz2