diff options
author | Ray Strode <rstrode@redhat.com> | 2012-11-02 17:26:41 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2012-11-02 17:26:41 -0400 |
commit | a6129abfc527ac247685d80fc5c20144be1badca (patch) | |
tree | d42b2f1626e9f73ecec03fe111d83a08d74e25b0 | |
parent | b3548ebaf76d222f56d6a7b34c5940b930d47609 (diff) |
main: make plymouth show-splash idempotent
plymouth show-splash causes hairy things, that should only happen once,
like activating renderers to happen.
This commit makes subsequent show-splash calls be no-ops.
-rw-r--r-- | src/main.c | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -113,6 +113,7 @@ typedef struct uint32_t should_be_attached : 1; uint32_t should_retain_splash : 1; uint32_t is_inactive : 1; + uint32_t is_shown : 1; uint32_t should_force_details : 1; char *kernel_console_tty; @@ -871,6 +872,12 @@ on_show_splash (state_t *state) { bool has_display; + if (state->is_shown) + { + ply_trace ("show splash called while already shown"); + return; + } + if (state->is_inactive) { ply_trace ("show splash called while inactive"); @@ -884,6 +891,8 @@ on_show_splash (state_t *state) return; } + state->is_shown = true; + check_for_consoles (state, state->default_tty, true); has_display = ply_list_get_length (state->pixel_displays) > 0 || @@ -1012,6 +1021,8 @@ dump_details_and_quit_splash (state_t *state) if (state->boot_splash != NULL) ply_boot_splash_hide (state->boot_splash); + state->is_shown = false; + quit_splash (state); } @@ -1116,6 +1127,8 @@ on_boot_splash_idle (state_t *state) ply_renderer_deactivate (state->renderer); if (state->boot_splash != NULL) ply_boot_splash_hide (state->boot_splash); + + state->is_shown = false; } ply_trace ("quitting splash"); |