]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
Add progress-pause/unpause commands to halt the progress bar
authorCharlie Brej <cbrej@cs.man.ac.uk>
Sun, 28 Dec 2008 18:34:25 +0000 (18:34 +0000)
committerCharlie Brej <cbrej@cs.man.ac.uk>
Sun, 28 Dec 2008 18:34:25 +0000 (18:34 +0000)
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.

src/client/ply-boot-client.c
src/client/ply-boot-client.h
src/client/plymouth.c
src/main.c
src/ply-boot-protocol.h
src/ply-boot-server.c
src/ply-boot-server.h

index ddca433141e8a69c36abda45b4269ee102a3baec..57bfda751e96191802a24c86ee195d1e9be52709 100644 (file)
@@ -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,
index cf16c86dacf1ef7f2ac80a50d2e66a4abb0db7ab..cca9febd9dcf68aeab3980384c2c1b5c63e43c05 100644 (file)
@@ -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);
index e8e23a2574da8a599a96d37927a10adee5f9bec8..7128264d4deda7ecf0c48a82a336825187118e0f 100644 (file)
@@ -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)
index fbce3242d6cf1a8e8cd1d4b1df43eac6c5700b4a..003a59b63219ca78d7334ac5b42a1c80fdd8066a 100644 (file)
@@ -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,
index 33c3dee949efa3d425c8e5da945aa7368568b7da..5b2d102e03c6bb6be58a9df44296f87ab99090a3 100644 (file)
 #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"
index 696897051f155de7a6bd43888c45bd813ac331ed..6c38690a3fe5fb93f94a216cbb35ffc757369331 100644 (file)
@@ -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,
index 6e140eb9dc3501af36cbed6df3ff3a87b21b803b..0817ea6c39cbe620d22d38531de662ef54edc6f3 100644 (file)
@@ -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,