diff -up plymouth-0.6.0/src/main.c.fix-switchroot-failed plymouth-0.6.0/src/main.c --- plymouth-0.6.0/src/main.c.fix-switchroot-failed 2008-11-06 10:43:41.000000000 -0500 +++ plymouth-0.6.0/src/main.c 2008-11-06 18:12:51.000000000 -0500 @@ -77,6 +77,7 @@ static ply_window_t *create_window (stat const char *tty_name); static bool attach_to_running_session (state_t *state); +static void on_escape_pressed (state_t *state); static void on_session_output (state_t *state, @@ -171,8 +172,11 @@ on_newroot (state_t *state, chdir(root_dir); chroot("."); chdir("/"); - ply_progress_load_cache (state->progress); - ply_boot_splash_root_mounted (state->boot_splash); + if (state->boot_splash != NULL) + { + ply_progress_load_cache (state->progress); + ply_boot_splash_root_mounted (state->boot_splash); + } } static void @@ -356,6 +360,8 @@ on_hide_splash (state_t *state) { ply_trace ("hiding boot splash"); + state->showing_details = false; + on_escape_pressed (state); if (state->boot_splash != NULL) ply_boot_splash_hide (state->boot_splash); @@ -384,11 +390,12 @@ on_quit (state_t *state, if (state->boot_splash != NULL) { if (!retain_splash) - on_hide_splash (state); - else - quit_splash (state); - ply_boot_splash_free (state->boot_splash); - state->boot_splash = NULL; + { + if (state->boot_splash != NULL) + ply_boot_splash_hide (state->boot_splash); + } + + quit_splash (state); } ply_trace ("exiting event loop"); ply_event_loop_exit (state->loop, 0); diff -up plymouth-0.6.0/src/plugins/splash/details/plugin.c.fix-switchroot-failed plymouth-0.6.0/src/plugins/splash/details/plugin.c --- plymouth-0.6.0/src/plugins/splash/details/plugin.c.fix-switchroot-failed 2008-11-06 18:25:43.000000000 -0500 +++ plymouth-0.6.0/src/plugins/splash/details/plugin.c 2008-11-06 18:25:47.000000000 -0500 @@ -231,8 +231,6 @@ static void uninitialize_window (ply_window_t *window, ply_boot_splash_plugin_t *plugin) { - ply_window_clear_screen (window); - ply_window_set_keyboard_input_handler (window, NULL, NULL); ply_window_set_backspace_handler (window, NULL, NULL); ply_window_set_enter_handler (window, NULL, NULL);