drop upstreamed patches

This commit is contained in:
Ray Strode 2012-07-19 14:37:50 -04:00
parent 7c6072e3ef
commit 0f39dae88d
9 changed files with 0 additions and 3134 deletions

View File

@ -1,29 +0,0 @@
From 97f0b7a36e4a99a1ddf88c69aab38e816e13c70c Mon Sep 17 00:00:00 2001
From: Matthias Clasen <mclasen@redhat.com>
Date: Thu, 5 Apr 2012 22:54:48 -0400
Subject: [PATCH] Fix a problem in the systemd code
Make session unlock work with logind.
This was not working due to a typo in the bus name of logind.
https://bugzilla.gnome.org/show_bug.cgi?id=673620
---
daemon/gdm-slave.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
index 6e1b45c..06abc91 100644
--- a/daemon/gdm-slave.c
+++ b/daemon/gdm-slave.c
@@ -1658,7 +1658,7 @@ session_unlock_for_systemd (GdmSlave *slave,
dbus_error_init (&error);
- message = dbus_message_new_method_call ("org.freedesktop.login",
+ message = dbus_message_new_method_call ("org.freedesktop.login1",
"/org/freedesktop/login1",
"org.freedesktop.login1.Manager",
"UnlockSession");
--
1.7.9.3

View File

@ -1,154 +0,0 @@
From 9c354795892b8c5fd661a35653991a88fabc76bf Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 24 Oct 2011 16:39:45 -0400
Subject: [PATCH 1/2] daemon: Don't emit session-exited when non-authenticated
worker fails
Sometimes PAM modules are finicky and don't die when you tell them to.
Instead they fail some seconds later.
If a user successfully logs in with one stack and another stack is
being troublesome, then we'll get notified about it finishing up
after the user is already logged in.
When that happens, we erroneously assume the stack finishing is the
stack the user's session is running on and then proceed to log the
user out.
This commit makes us be a little more careful about our bookkeeping
so we can ignore failures from slow PAM modules.
---
daemon/gdm-session-direct.c | 23 ++++++++++++++---------
1 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
index e178985..bb2bff8 100644
--- a/daemon/gdm-session-direct.c
+++ b/daemon/gdm-session-direct.c
@@ -91,10 +91,11 @@ struct _GdmSessionDirectPrivate
GHashTable *conversations;
+ GdmSessionConversation *session_conversation;
+
GList *pending_connections;
GPid session_pid;
- guint32 is_running : 1;
/* object lifetime scope */
char *id;
@@ -1073,7 +1074,7 @@ gdm_session_direct_handle_session_started (GdmSessionDirect *session,
pid);
session->priv->session_pid = pid;
- session->priv->is_running = TRUE;
+ session->priv->session_conversation = conversation;
_gdm_session_session_started (GDM_SESSION (session), conversation->service_name, pid);
@@ -1129,7 +1130,7 @@ gdm_session_direct_handle_session_exited (GdmSessionDirect *session,
g_debug ("GdmSessionDirect: Emitting 'session-exited' signal with exit code '%d'",
code);
- session->priv->is_running = FALSE;
+ session->priv->session_conversation = NULL;
_gdm_session_session_exited (GDM_SESSION (session), code);
return DBUS_HANDLER_RESULT_HANDLED;
@@ -1158,7 +1159,7 @@ gdm_session_direct_handle_session_died (GdmSessionDirect *session,
g_debug ("GdmSessionDirect: Emitting 'session-died' signal with signal number '%d'",
code);
- session->priv->is_running = FALSE;
+ session->priv->session_conversation = NULL;
_gdm_session_session_died (GDM_SESSION (session), code);
return DBUS_HANDLER_RESULT_HANDLED;
@@ -1790,7 +1791,7 @@ worker_exited (GdmSessionWorkerJob *job,
g_debug ("GdmSessionDirect: Worker job exited: %d", code);
g_object_ref (conversation->job);
- if (conversation->session->priv->is_running) {
+ if (conversation->session->priv->session_conversation == conversation) {
_gdm_session_session_exited (GDM_SESSION (conversation->session), code);
}
@@ -1819,7 +1820,7 @@ worker_died (GdmSessionWorkerJob *job,
g_debug ("GdmSessionDirect: Worker job died: %d", signum);
g_object_ref (conversation->job);
- if (conversation->session->priv->is_running) {
+ if (conversation->session->priv->session_conversation == conversation) {
_gdm_session_session_died (GDM_SESSION (conversation->session), signum);
}
@@ -2442,6 +2443,10 @@ stop_all_other_conversations (GdmSessionDirect *session,
g_strdup (conversation_to_keep->service_name),
conversation_to_keep);
}
+
+ if (session->priv->session_conversation != conversation_to_keep) {
+ session->priv->session_conversation = NULL;
+ }
}
}
@@ -2456,7 +2461,7 @@ gdm_session_direct_start_session (GdmSession *session,
char *program;
g_return_if_fail (session != NULL);
- g_return_if_fail (impl->priv->is_running == FALSE);
+ g_return_if_fail (impl->priv->session_conversation == NULL);
conversation = find_conversation_by_name (impl, service_name);
@@ -2504,7 +2509,7 @@ gdm_session_direct_close (GdmSession *session)
g_debug ("GdmSessionDirect: Closing session");
- if (impl->priv->is_running) {
+ if (impl->priv->session_conversation != NULL) {
gdm_session_record_logout (impl->priv->session_pid,
impl->priv->selected_user,
impl->priv->display_hostname,
@@ -2540,7 +2545,7 @@ gdm_session_direct_close (GdmSession *session)
g_hash_table_remove_all (impl->priv->environment);
impl->priv->session_pid = -1;
- impl->priv->is_running = FALSE;
+ impl->priv->session_conversation = NULL;
}
static void
--
1.7.6.2
From 9c874ee6f595906faf59f891f20492530888804b Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 24 Oct 2011 16:45:46 -0400
Subject: [PATCH 2/2] worker: don't block SIGTERM
If the slave tells us to go away, we should go away,
not wait a PAM module decides to let us get back to the
main loop.
---
daemon/session-worker-main.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/daemon/session-worker-main.c b/daemon/session-worker-main.c
index 9d40b8d..42fcd52 100644
--- a/daemon/session-worker-main.c
+++ b/daemon/session-worker-main.c
@@ -188,7 +188,6 @@ main (int argc,
gdm_signal_handler_set_fatal_func (signal_handler,
(GDestroyNotify)g_main_loop_quit,
main_loop);
- gdm_signal_handler_add (signal_handler, SIGTERM, signal_cb, NULL);
gdm_signal_handler_add (signal_handler, SIGINT, signal_cb, NULL);
gdm_signal_handler_add (signal_handler, SIGILL, signal_cb, NULL);
gdm_signal_handler_add (signal_handler, SIGBUS, signal_cb, NULL);
--
1.7.6.2

View File

@ -1,8 +0,0 @@
diff -up gdm-3.5.4/data/dconf-profile.profile gdm-3.5.4/data/dconf-profile
--- gdm-3.5.4/data/dconf-profile.profile 2012-07-19 08:28:36.267982484 -0400
+++ gdm-3.5.4/data/dconf-profile 2012-07-19 08:28:46.276983140 -0400
@@ -1,2 +1,2 @@
-user
-gdm
+user-db:user
+system-db:gdm

View File

@ -1,71 +0,0 @@
From 59f883f28a4b176cb821e4ee2aaec4f024e22213 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 9 Apr 2012 14:01:22 -0400
Subject: [PATCH] Only strip CK goo from seat prefix, if there's CK goo in
seat prefix
Now that we can use logind for seat management, there' may not be
/org/freedesktop/ConsoleKit in the seat identifier.
This commit makes sure the GDM_SEAT_ID environment variable doesn't
show gunk in the case the system is configured to use logind.
Related downstream report:
http://bugzilla.redhat.com/810451
---
daemon/gdm-welcome-session.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/daemon/gdm-welcome-session.c b/daemon/gdm-welcome-session.c
index 01df365..d0ca4e6 100644
--- a/daemon/gdm-welcome-session.c
+++ b/daemon/gdm-welcome-session.c
@@ -308,8 +308,9 @@ build_welcome_environment (GdmWelcomeSession *welcome_session,
if (start_session && welcome_session->priv->x11_display_seat_id != NULL) {
char *seat_id;
- seat_id = welcome_session->priv->x11_display_seat_id +
- strlen ("/org/freedesktop/ConsoleKit/");
+ if (g_str_has_prefix (welcome_session->priv->x11_display_seat_id, "/org/freedesktop/ConsoleKit/")) {
+ seat_id = welcome_session->priv->x11_display_seat_id + strlen ("/org/freedesktop/ConsoleKit/");
+ }
g_hash_table_insert (hash, g_strdup ("GDM_SEAT_ID"), g_strdup (seat_id));
}
--
1.7.9.3
From 4df3dea6b59445be769ae16fef6d206695190b7a Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 9 Apr 2012 15:40:48 -0400
Subject: [PATCH] welcome: more seat_id fixes
Two commits ago I tried to only strip the consolekit prefix
off the seat id, if there was a consolekit prefix. In the
process I ended up not initializing the seat_id variable
at all in the non-consolekit case.
This commit fixes that.
---
daemon/gdm-welcome-session.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/daemon/gdm-welcome-session.c b/daemon/gdm-welcome-session.c
index d0ca4e6..778d5dc 100644
--- a/daemon/gdm-welcome-session.c
+++ b/daemon/gdm-welcome-session.c
@@ -308,8 +308,9 @@ build_welcome_environment (GdmWelcomeSession *welcome_session,
if (start_session && welcome_session->priv->x11_display_seat_id != NULL) {
char *seat_id;
- if (g_str_has_prefix (welcome_session->priv->x11_display_seat_id, "/org/freedesktop/ConsoleKit/")) {
- seat_id = welcome_session->priv->x11_display_seat_id + strlen ("/org/freedesktop/ConsoleKit/");
+ seat_id = welcome_session->priv->x11_display_seat_id;
+ if (g_str_has_prefix (seat_id, "/org/freedesktop/ConsoleKit/")) {
+ seat_id += strlen ("/org/freedesktop/ConsoleKit/");
}
g_hash_table_insert (hash, g_strdup ("GDM_SEAT_ID"), g_strdup (seat_id));
--
1.7.9.3

View File

@ -1,55 +0,0 @@
diff -up gdm-2.23.2/gui/simple-greeter/gdm-language-chooser-widget.c.unknown-lang gdm-2.23.2/gui/simple-greeter/gdm-language-chooser-widget.c
--- gdm-2.23.2/gui/simple-greeter/gdm-language-chooser-widget.c.unknown-lang 2008-08-14 15:26:43.000000000 -0400
+++ gdm-2.23.2/gui/simple-greeter/gdm-language-chooser-widget.c 2008-08-14 15:26:50.000000000 -0400
@@ -133,6 +133,7 @@ gdm_language_chooser_widget_add_language
static gboolean
language_has_font (const char *locale)
{
+ const FcCharSet *charset;
FcPattern *pattern;
FcObjectSet *object_set;
FcFontSet *font_set;
@@ -146,22 +147,30 @@ language_has_font (const char *locale)
gdm_parse_language_name (locale, &language_code, NULL, NULL, NULL);
- pattern = FcPatternBuild (NULL, FC_LANG, FcTypeString, language_code, NULL);
+ charset = FcLangGetCharSet ((FcChar8 *) language_code);
+ if (!charset)
+ /* fontconfig does not know about this language */
+ is_displayable = TRUE;
+ else
+ {
+ /* see if any fonts support rendering it */
+ pattern = FcPatternBuild (NULL, FC_LANG, FcTypeString, language_code, NULL);
+
+ if (pattern == NULL)
+ goto done;
+
+ object_set = FcObjectSetCreate ();
+
+ if (object_set == NULL)
+ goto done;
- if (pattern == NULL)
- goto done;
+ font_set = FcFontList (NULL, pattern, object_set);
- object_set = FcObjectSetBuild (NULL, NULL);
+ if (font_set == NULL)
+ goto done;
- if (object_set == NULL)
- goto done;
-
- font_set = FcFontList (NULL, pattern, object_set);
-
- if (font_set == NULL)
- goto done;
-
- is_displayable = (font_set->nfont > 0);
+ is_displayable = (font_set->nfont > 0);
+ }
done:

View File

@ -1,11 +0,0 @@
--- gdm-2.23.1/gui/simple-greeter/gdm-simple-greeter.schemas.in.fedora-logo 2008-07-21 11:14:46.000000000 -0400
+++ gdm-2.23.1/gui/simple-greeter/gdm-simple-greeter.schemas.in 2008-07-21 14:59:17.000000000 -0400
@@ -39,7 +39,7 @@
<applyto>/apps/gdm/simple-greeter/logo_icon_name</applyto>
<owner>gdm-simple-greeter</owner>
<type>string</type>
- <default>computer</default>
+ <default>fedora-logo</default>
<locale name="C">
<short>Icon name to use for greeter logo</short>
<long>Set to the themed icon name to use for the greeter logo.</long>

View File

@ -23,9 +23,6 @@ URL: http://download.gnome.org/sources/gdm
Source: http://download.gnome.org/sources/gdm/3.4/gdm-%{version}.tar.xz Source: http://download.gnome.org/sources/gdm/3.4/gdm-%{version}.tar.xz
Source1: org.gnome.login-screen.gschema.override Source1: org.gnome.login-screen.gschema.override
# upstream fix
Patch0: dconf-profile.patch
Requires(pre): /usr/sbin/useradd Requires(pre): /usr/sbin/useradd
Requires: pam >= 0:%{pam_version} Requires: pam >= 0:%{pam_version}
@ -122,7 +119,6 @@ Development files and headers for writing GDM greeters.
%prep %prep
%setup -q %setup -q
%patch0 -p1
autoreconf -i -f autoreconf -i -f

File diff suppressed because it is too large Load Diff

View File

@ -1,397 +0,0 @@
From e6ed6f48c35a6c736a5cde2dcfb6c10941e07809 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 27 Nov 2009 18:27:53 -0500
Subject: [PATCH 1/2] Save root window to pixmap at _XROOTPMAP_ID
This combined with starting the X server with -nr
will give us a nice fade transition when g-s-d starts
---
daemon/gdm-simple-slave.c | 8 +++++
daemon/gdm-slave.c | 72 +++++++++++++++++++++++++++++++++++++++++++++
daemon/gdm-slave.h | 1 +
3 files changed, 81 insertions(+), 0 deletions(-)
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index 9d1347a..fc8649c 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -1215,6 +1215,14 @@ setup_server (GdmSimpleSlave *slave)
/* Set the initial keyboard layout to something reasonable */
gdm_slave_set_initial_keyboard_layout (GDM_SLAVE (slave));
+ /* The root window has a background that may be useful
+ * to cross fade or transition from when setting the
+ * login screen background. We read it here, and stuff
+ * it into the standard _XROOTPMAP_ID root window property,
+ * so gnome-settings-daemon can get at it.
+ */
+ gdm_slave_save_root_windows (GDM_SLAVE (slave));
+
}
static void
diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
index 371b9bd..694dcde 100644
--- a/daemon/gdm-slave.c
+++ b/daemon/gdm-slave.c
@@ -43,6 +43,7 @@
#include <dbus/dbus-glib-lowlevel.h>
#include <X11/Xlib.h> /* for Display */
+#include <X11/Xatom.h> /* for XA_PIXMAP */
#include <X11/cursorfont.h> /* for watch cursor */
#include <X11/extensions/Xrandr.h>
#include <X11/Xatom.h>
@@ -364,6 +365,77 @@ gdm_slave_run_script (GdmSlave *slave,
return ret;
}
+static void
+gdm_slave_save_root_window_of_screen (GdmSlave *slave,
+ Atom id_atom,
+ int screen_number)
+{
+ Window root_window;
+ GC gc;
+ XGCValues values;
+ Pixmap pixmap;
+ int width, height, depth;
+
+ root_window = RootWindow (slave->priv->server_display,
+ screen_number);
+
+ width = DisplayWidth (slave->priv->server_display, screen_number);
+ height = DisplayHeight (slave->priv->server_display, screen_number);
+ depth = DefaultDepth (slave->priv->server_display, screen_number);
+ pixmap = XCreatePixmap (slave->priv->server_display,
+ root_window,
+ width, height, depth);
+
+ values.function = GXcopy;
+ values.plane_mask = AllPlanes;
+ values.fill_style = FillSolid;
+ values.subwindow_mode = IncludeInferiors;
+
+ gc = XCreateGC (slave->priv->server_display,
+ root_window,
+ GCFunction | GCPlaneMask | GCFillStyle | GCSubwindowMode,
+ &values);
+
+ if (XCopyArea (slave->priv->server_display,
+ root_window, pixmap, gc, 0, 0,
+ width, height, 0, 0)) {
+
+ long pixmap_as_long;
+
+ pixmap_as_long = (long) pixmap;
+
+ XChangeProperty (slave->priv->server_display,
+ root_window, id_atom, XA_PIXMAP,
+ 32, PropModeReplace, (guchar *) &pixmap_as_long,
+ 1);
+
+ }
+
+ XFreeGC (slave->priv->server_display, gc);
+}
+
+void
+gdm_slave_save_root_windows (GdmSlave *slave)
+{
+ int i, number_of_screens;
+ Atom atom;
+
+ number_of_screens = ScreenCount (slave->priv->server_display);
+
+ atom = XInternAtom (slave->priv->server_display,
+ "_XROOTPMAP_ID", False);
+
+ if (atom == 0) {
+ return;
+ }
+
+ for (i = 0; i < number_of_screens; i++) {
+ gdm_slave_save_root_window_of_screen (slave, atom, i);
+ }
+
+ XSync (slave->priv->server_display, False);
+}
+
void
gdm_slave_set_initial_keyboard_layout (GdmSlave *slave)
{
diff --git a/daemon/gdm-slave.h b/daemon/gdm-slave.h
index 7af20ed..aaaa8f2 100644
--- a/daemon/gdm-slave.h
+++ b/daemon/gdm-slave.h
@@ -78,6 +78,7 @@ void gdm_slave_set_initial_keyboard_layout (GdmSlave *slave);
void gdm_slave_set_initial_cursor_position (GdmSlave *slave);
void gdm_slave_set_busy_cursor (GdmSlave *slave);
+void gdm_slave_save_root_windows (GdmSlave *slave);
gboolean gdm_slave_run_script (GdmSlave *slave,
const char *dir,
const char *username);
--
1.7.9
From 03d92cf39f74b265cc9936bdeabfcf071b102767 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 27 Nov 2009 18:52:54 -0500
Subject: [PATCH 2/2] Enable smooth transition between plymouth and X
This commit checks if plymouth is running, and if so,
turns on the smooth transition between plymouth and X.
---
daemon/gdm-server.c | 55 +++++++++++++++++++++++++++
daemon/gdm-server.h | 1 +
daemon/gdm-simple-slave.c | 91 ++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 146 insertions(+), 1 deletions(-)
diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c
index 54bf8b3..365590f 100644
--- a/daemon/gdm-server.c
+++ b/daemon/gdm-server.c
@@ -32,6 +32,7 @@
#include <pwd.h>
#include <grp.h>
#include <signal.h>
+#include <sys/ioctl.h>
#include <sys/resource.h>
#ifdef HAVE_SYS_PRCTL_H
@@ -41,6 +42,7 @@
#ifdef WITH_SYSTEMD
#include <systemd/sd-daemon.h>
#endif
+#include <linux/vt.h>
#include <glib.h>
#include <glib/gi18n.h>
@@ -732,6 +734,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
@@ -750,6 +790,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 " -background none -logverbose 7");
+ vt = get_active_vt_as_string ();
+ res = gdm_server_spawn (server, vt);
+ g_free (vt);
+
+ return res;
+}
+
static void
server_died (GdmServer *server)
{
diff --git a/daemon/gdm-server.h b/daemon/gdm-server.h
index b53d68e..4939382 100644
--- a/daemon/gdm-server.h
+++ b/daemon/gdm-server.h
@@ -57,6 +57,7 @@ GdmServer * gdm_server_new (const char *display_id,
const char *seat_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 --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index fc8649c..dd19ced 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -93,6 +93,7 @@ struct GdmSimpleSlavePrivate
#ifdef HAVE_LOGINDEVPERM
gboolean use_logindevperm;
#endif
+ guint plymouth_is_running : 1;
};
enum {
@@ -1204,6 +1205,72 @@ on_start_session_later (GdmGreeterServer *session,
slave->priv->start_session_when_ready = FALSE;
}
+static gboolean
+plymouth_is_running (void)
+{
+ int status;
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth --ping",
+ NULL, NULL, &status, &error);
+ if (! res) {
+ g_debug ("Could not ping plymouth: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ return WIFEXITED (status) && WEXITSTATUS (status) == 0;
+}
+
+static void
+plymouth_prepare_for_transition (GdmSimpleSlave *slave)
+{
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth deactivate",
+ NULL, NULL, NULL, &error);
+ if (! res) {
+ g_warning ("Could not deactivate plymouth: %s", error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+plymouth_quit_with_transition (GdmSimpleSlave *slave)
+{
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth quit --retain-splash",
+ NULL, NULL, NULL, &error);
+ if (! res) {
+ g_warning ("Could not quit plymouth: %s", error->message);
+ g_error_free (error);
+ }
+ slave->priv->plymouth_is_running = FALSE;
+}
+
+static void
+plymouth_quit_without_transition (GdmSimpleSlave *slave)
+{
+ gboolean res;
+ GError *error;
+
+ error = NULL;
+ res = g_spawn_command_line_sync ("/bin/plymouth quit",
+ NULL, NULL, NULL, &error);
+ if (! res) {
+ g_warning ("Could not quit plymouth: %s", error->message);
+ g_error_free (error);
+ }
+ slave->priv->plymouth_is_running = FALSE;
+}
+
static void
setup_server (GdmSimpleSlave *slave)
{
@@ -1223,6 +1290,10 @@ setup_server (GdmSimpleSlave *slave)
*/
gdm_slave_save_root_windows (GDM_SLAVE (slave));
+ /* Plymouth is waiting for the go-ahead to exit */
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_with_transition (slave);
+ }
}
static void
@@ -1426,6 +1497,10 @@ on_server_exited (GdmServer *server,
g_debug ("GdmSimpleSlave: server exited with code %d\n", exit_code);
gdm_slave_stopped (GDM_SLAVE (slave));
+
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_without_transition (slave);
+ }
}
static void
@@ -1438,6 +1513,10 @@ on_server_died (GdmServer *server,
g_strsignal (signal_number));
gdm_slave_stopped (GDM_SLAVE (slave));
+
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_without_transition (slave);
+ }
}
static gboolean
@@ -1484,7 +1563,14 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
G_CALLBACK (on_server_ready),
slave);
- res = gdm_server_start (slave->priv->server);
+ slave->priv->plymouth_is_running = plymouth_is_running ();
+
+ if (slave->priv->plymouth_is_running) {
+ plymouth_prepare_for_transition (slave);
+ 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) "
@@ -1494,6 +1580,9 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
"In the meantime this display will be "
"disabled. Please restart GDM when "
"the problem is corrected."));
+ if (slave->priv->plymouth_is_running) {
+ plymouth_quit_without_transition (slave);
+ }
exit (1);
}
--
1.7.9