From: Charlie Brej Date: Sun, 28 Dec 2008 18:34:25 +0000 (+0000) Subject: Add progress-pause/unpause commands to halt the progress bar X-Git-Tag: 0.7.0~235 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9d0670ebd2e99451b5325d37b6cd01df7527cd87;p=thirdparty%2Fplymouth.git Add progress-pause/unpause commands to halt the progress bar Progress bar expansion was previously halted on password entry. Now the progress can be halted whenever the system wishes. This can be useful when the system notices there is a big task which is normally not present during normal boots e.g. fsck. --- diff --git a/src/client/ply-boot-client.c b/src/client/ply-boot-client.c index ddca4331..57bfda75 100644 --- a/src/client/ply-boot-client.c +++ b/src/client/ply-boot-client.c @@ -651,6 +651,26 @@ ply_boot_client_tell_daemon_to_quit (ply_boot_client_t *client, arg, handler, failed_handler, user_data); } +void +ply_boot_client_tell_daemon_to_progress_pause (ply_boot_client_t *client, + ply_boot_client_response_handler_t handler, + ply_boot_client_response_handler_t failed_handler, + void *user_data) +{ + ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_PAUSE, + NULL, handler, failed_handler, user_data); +} + +void +ply_boot_client_tell_daemon_to_progress_unpause (ply_boot_client_t *client, + ply_boot_client_response_handler_t handler, + ply_boot_client_response_handler_t failed_handler, + void *user_data) +{ + ply_boot_client_queue_request (client, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_UNPAUSE, + NULL, handler, failed_handler, user_data); +} + void ply_boot_client_tell_daemon_about_error (ply_boot_client_t *client, ply_boot_client_response_handler_t handler, diff --git a/src/client/ply-boot-client.h b/src/client/ply-boot-client.h index cf16c86d..cca9febd 100644 --- a/src/client/ply-boot-client.h +++ b/src/client/ply-boot-client.h @@ -104,7 +104,14 @@ void ply_boot_client_tell_daemon_to_quit (ply_boot_client_t *cl ply_boot_client_response_handler_t handler, ply_boot_client_response_handler_t failed_handler, void *user_data); - +void ply_boot_client_tell_daemon_to_progress_pause (ply_boot_client_t *client, + ply_boot_client_response_handler_t handler, + ply_boot_client_response_handler_t failed_handler, + void *user_data); +void ply_boot_client_tell_daemon_to_progress_unpause (ply_boot_client_t *client, + ply_boot_client_response_handler_t handler, + ply_boot_client_response_handler_t failed_handler, + void *user_data); void ply_boot_client_disconnect (ply_boot_client_t *client); void ply_boot_client_attach_to_event_loop (ply_boot_client_t *client, ply_event_loop_t *loop); diff --git a/src/client/plymouth.c b/src/client/plymouth.c index e8e23a25..7128264d 100644 --- a/src/client/plymouth.c +++ b/src/client/plymouth.c @@ -433,6 +433,29 @@ on_keystroke_request (state_t *state, on_failure, key_answer_state); } +static void +on_progress_pause_request (state_t *state, + const char *command) +{ + ply_boot_client_tell_daemon_to_progress_pause (state->client, + (ply_boot_client_response_handler_t) + on_success, + (ply_boot_client_response_handler_t) + on_failure, state); +} + + +static void +on_progress_unpause_request (state_t *state, + const char *command) +{ + ply_boot_client_tell_daemon_to_progress_unpause (state->client, + (ply_boot_client_response_handler_t) + on_success, + (ply_boot_client_response_handler_t) + on_failure, state); +} + static void on_report_error_request (state_t *state, const char *command) @@ -531,6 +554,18 @@ main (int argc, PLY_COMMAND_OPTION_TYPE_STRING, NULL); + ply_command_parser_add_command (state.command_parser, + "progress-pause", "Pause boot progress bar", + (ply_command_handler_t) + on_progress_pause_request, &state, + NULL); + + ply_command_parser_add_command (state.command_parser, + "progress-unpause", "Unpause boot progress bar", + (ply_command_handler_t) + on_progress_unpause_request, &state, + NULL); + ply_command_parser_add_command (state.command_parser, "report-error", "Tell boot daemon there were errors during boot", (ply_command_handler_t) diff --git a/src/main.c b/src/main.c index fbce3242..003a59b6 100644 --- a/src/main.c +++ b/src/main.c @@ -203,7 +203,6 @@ on_watch_for_keystroke (state_t *state, ply_list_append_data (state->keystroke_triggers, keystroke_trigger); } - static void on_ignore_keystroke (state_t *state, const char *keys) @@ -224,6 +223,17 @@ on_ignore_keystroke (state_t *state, } } +static void +on_progress_pause (state_t *state) +{ + ply_progress_pause (state->progress); +} + +static void +on_progress_unpause (state_t *state) +{ + ply_progress_unpause (state->progress); +} static void on_newroot (state_t *state, @@ -530,6 +540,8 @@ start_boot_server (state_t *state) (ply_boot_server_ask_question_handler_t) on_ask_question, (ply_boot_server_watch_for_keystroke_handler_t) on_watch_for_keystroke, (ply_boot_server_ignore_keystroke_handler_t) on_ignore_keystroke, + (ply_boot_server_progress_pause_handler_t) on_progress_pause, + (ply_boot_server_progress_unpause_handler_t) on_progress_unpause, (ply_boot_server_show_splash_handler_t) on_show_splash, (ply_boot_server_hide_splash_handler_t) on_hide_splash, (ply_boot_server_newroot_handler_t) on_newroot, diff --git a/src/ply-boot-protocol.h b/src/ply-boot-protocol.h index 33c3dee9..5b2d102e 100644 --- a/src/ply-boot-protocol.h +++ b/src/ply-boot-protocol.h @@ -32,10 +32,13 @@ #define PLY_BOOT_PROTOCOL_REQUEST_TYPE_QUESTION "W" #define PLY_BOOT_PROTOCOL_REQUEST_TYPE_KEYSTROKE "K" #define PLY_BOOT_PROTOCOL_REQUEST_TYPE_KEYSTROKE_REMOVE "L" +#define PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_PAUSE "A" +#define PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_UNPAUSE "a" #define PLY_BOOT_PROTOCOL_REQUEST_TYPE_SHOW_SPLASH "$" #define PLY_BOOT_PROTOCOL_REQUEST_TYPE_HIDE_SPLASH "H" #define PLY_BOOT_PROTOCOL_REQUEST_TYPE_NEWROOT "R" #define PLY_BOOT_PROTOCOL_REQUEST_TYPE_ERROR "!" + #define PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ACK "\x6" #define PLY_BOOT_PROTOCOL_RESPONSE_TYPE_NAK "\x15" #define PLY_BOOT_PROTOCOL_RESPONSE_TYPE_ANSWER "\x2" diff --git a/src/ply-boot-server.c b/src/ply-boot-server.c index 69689705..6c38690a 100644 --- a/src/ply-boot-server.c +++ b/src/ply-boot-server.c @@ -62,6 +62,8 @@ struct _ply_boot_server ply_boot_server_ask_question_handler_t ask_question_handler; ply_boot_server_watch_for_keystroke_handler_t watch_for_keystroke_handler; ply_boot_server_ignore_keystroke_handler_t ignore_keystroke_handler; + ply_boot_server_progress_pause_handler_t progress_pause_handler; + ply_boot_server_progress_unpause_handler_t progress_unpause_handler; ply_boot_server_quit_handler_t quit_handler; void *user_data; @@ -74,6 +76,8 @@ ply_boot_server_new (ply_boot_server_update_handler_t update_handler, ply_boot_server_ask_question_handler_t ask_question_handler, ply_boot_server_watch_for_keystroke_handler_t watch_for_keystroke_handler, ply_boot_server_ignore_keystroke_handler_t ignore_keystroke_handler, + ply_boot_server_progress_pause_handler_t progress_pause_handler, + ply_boot_server_progress_unpause_handler_t progress_unpause_handler, ply_boot_server_show_splash_handler_t show_splash_handler, ply_boot_server_hide_splash_handler_t hide_splash_handler, ply_boot_server_newroot_handler_t newroot_handler, @@ -94,6 +98,8 @@ ply_boot_server_new (ply_boot_server_update_handler_t update_handler, server->ask_question_handler = ask_question_handler; server->watch_for_keystroke_handler = watch_for_keystroke_handler; server->ignore_keystroke_handler = ignore_keystroke_handler; + server->progress_pause_handler = progress_pause_handler; + server->progress_unpause_handler = progress_unpause_handler; server->newroot_handler = newroot_handler; server->error_handler = error_handler; server->system_initialized_handler = initialized_handler; @@ -477,6 +483,18 @@ ply_boot_connection_on_request (ply_boot_connection_t *connection) argument, server); } + else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_PAUSE) == 0) + { + if (server->progress_pause_handler != NULL) + server->progress_pause_handler (server->user_data, + server); + } + else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_PROGRESS_UNPAUSE) == 0) + { + if (server->progress_unpause_handler != NULL) + server->progress_unpause_handler (server->user_data, + server); + } else if (strcmp (command, PLY_BOOT_PROTOCOL_REQUEST_TYPE_NEWROOT) == 0) { if (server->newroot_handler != NULL) @@ -660,6 +678,21 @@ on_watch_for_keystroke (ply_event_loop_t *loop) return; } +static void +on_progress_pause (ply_event_loop_t *loop) +{ + printf ("got progress pause request\n"); + + return; +} + +static void +on_progress_unpause (ply_event_loop_t *loop) +{ + printf ("got progress unpause request\n"); + + return; +} static void on_ignore_keystroke (ply_event_loop_t *loop) @@ -686,6 +719,8 @@ main (int argc, (ply_boot_server_ask_question_handler_t) on_ask_question, (ply_boot_server_watch_for_keystroke_handler_t) on_watch_for_keystroke, (ply_boot_server_ignore_keystroke_handler_t) on_ignore_keystroke, + (ply_boot_server_progress_pause_handler_t) on_progress_pause, + (ply_boot_server_progress_unpause_handler_t) on_progress_unpause, (ply_boot_server_show_splash_handler_t) on_show_splash, (ply_boot_server_hide_splash_handler_t) on_hide_splash, (ply_boot_server_newroot_handler_t) on_newroot, diff --git a/src/ply-boot-server.h b/src/ply-boot-server.h index 6e140eb9..0817ea6c 100644 --- a/src/ply-boot-server.h +++ b/src/ply-boot-server.h @@ -37,8 +37,8 @@ typedef void (* ply_boot_server_update_handler_t) (void *user_data, ply_boot_server_t *server); typedef void (* ply_boot_server_newroot_handler_t) (void *user_data, - const char *root_dir, - ply_boot_server_t *server); + const char *root_dir, + ply_boot_server_t *server); typedef void (* ply_boot_server_show_splash_handler_t) (void *user_data, ply_boot_server_t *server); @@ -53,20 +53,23 @@ typedef void (* ply_boot_server_ask_for_password_handler_t) (void * const char *prompt, ply_trigger_t *answer, ply_boot_server_t *server); -typedef void (* ply_boot_server_question_answer_handler_t) (void *answer_data, +typedef void (* ply_boot_server_question_answer_handler_t) (void *answer_data, const char *answer, ply_boot_server_t *server); typedef void (* ply_boot_server_ask_question_handler_t) (void *user_data, const char *prompt, ply_trigger_t *answer, ply_boot_server_t *server); -typedef void (* ply_boot_server_watch_for_keystroke_handler_t) (void *user_data, +typedef void (* ply_boot_server_watch_for_keystroke_handler_t) (void *user_data, + const char *keys, + ply_trigger_t *answer, + ply_boot_server_t *server); +typedef void (* ply_boot_server_ignore_keystroke_handler_t) (void *user_data, const char *keys, - ply_trigger_t *answer, ply_boot_server_t *server); - -typedef void (* ply_boot_server_ignore_keystroke_handler_t) (void *user_data, - const char *keys, +typedef void (* ply_boot_server_progress_pause_handler_t) (void *user_data, + ply_boot_server_t *server); +typedef void (* ply_boot_server_progress_unpause_handler_t) (void *user_data, ply_boot_server_t *server); typedef void (* ply_boot_server_system_initialized_handler_t) (void *user_data, @@ -74,7 +77,6 @@ typedef void (* ply_boot_server_system_initialized_handler_t) (void typedef void (* ply_boot_server_error_handler_t) (void *user_data, ply_boot_server_t *server); - typedef void (* ply_boot_server_quit_handler_t) (void *user_data, bool retain_splash, ply_boot_server_t *server); @@ -85,6 +87,8 @@ ply_boot_server_t *ply_boot_server_new (ply_boot_server_update_handler_t update_ ply_boot_server_ask_question_handler_t ask_question_handler, ply_boot_server_watch_for_keystroke_handler_t watch_for_keystroke_handler, ply_boot_server_ignore_keystroke_handler_t ignore_keystroke_handler, + ply_boot_server_progress_pause_handler_t on_progress_pause, + ply_boot_server_progress_unpause_handler_t on_progress_unpause, ply_boot_server_show_splash_handler_t show_splash_handler, ply_boot_server_hide_splash_handler_t hide_splash_handler, ply_boot_server_newroot_handler_t newroot_handler,