]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
script: Handle adding the console viewer better when hotplugging
authornerdopolis <bluescreen_avenger@verizon.net>
Sat, 20 Jul 2024 03:47:42 +0000 (23:47 -0400)
committernerdopolis <bluescreen_avenger@verizon.net>
Sat, 20 Jul 2024 04:03:14 +0000 (00:03 -0400)
src/plugins/splash/script/plugin.c
src/plugins/splash/script/script-lib-sprite.c
src/plugins/splash/script/script-lib-sprite.h

index 698dd248551ea5c638f04e1fd5f9554f9c629d5b..b593113741717079dff28ba3b0d53d693c6fda74 100644 (file)
@@ -309,7 +309,6 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin,
 static bool
 start_script_animation (ply_boot_splash_plugin_t *plugin)
 {
-        ply_list_t *displays;
         ply_list_node_t *node;
         script_obj_t *target_obj;
         script_obj_t *value_obj;
@@ -332,7 +331,10 @@ start_script_animation (ply_boot_splash_plugin_t *plugin)
         plugin->script_image_lib = script_lib_image_setup (plugin->script_state,
                                                            plugin->image_dir);
         plugin->script_sprite_lib = script_lib_sprite_setup (plugin->script_state,
-                                                             plugin->displays);
+                                                             plugin->displays,
+                                                             plugin->boot_buffer,
+                                                             plugin->monospace_font,
+                                                             plugin->console_text_color);
         plugin->script_plymouth_lib = script_lib_plymouth_setup (plugin->script_state,
                                                                  plugin->mode,
                                                                  FRAMES_PER_SECOND,
@@ -340,32 +342,6 @@ start_script_animation (ply_boot_splash_plugin_t *plugin)
         plugin->script_math_lib = script_lib_math_setup (plugin->script_state);
         plugin->script_string_lib = script_lib_string_setup (plugin->script_state);
 
-
-        displays = script_lib_get_displays (plugin->script_sprite_lib);
-        node = ply_list_get_first_node (displays);
-        while (node != NULL) {
-                script_lib_display_t *display;
-                ply_list_node_t *next_node;
-
-                display = ply_list_node_get_data (node);
-                next_node = ply_list_get_next_node (displays, node);
-
-                if (ply_console_viewer_preferred ()) {
-                        display->console_viewer = ply_console_viewer_new (display->pixel_display, plugin->monospace_font);
-                        ply_console_viewer_set_text_color (display->console_viewer, plugin->console_text_color);
-
-                        if (plugin->boot_buffer)
-                                ply_console_viewer_convert_boot_buffer (display->console_viewer, plugin->boot_buffer);
-                } else {
-                        display->console_viewer = NULL;
-                }
-
-                node = next_node;
-        }
-
-        plugin->script_sprite_lib->monospace_font = plugin->monospace_font;
-        plugin->script_sprite_lib->boot_buffer = plugin->boot_buffer;
-
         ply_trace ("executing script file");
         script_return_t ret = script_execute (plugin->script_state,
                                               plugin->script_main_op);
@@ -506,8 +482,6 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
                     ply_buffer_t             *boot_buffer,
                     ply_boot_splash_mode_t    mode)
 {
-        ply_list_node_t *node;
-
         assert (plugin != NULL);
 
         if (ply_list_get_length (plugin->displays) == 0) {
index 99809d926975da14cb84d154961b5fc52310e76d..c7d809553b42c9598abcbf57bdee018b72a71e97 100644 (file)
@@ -602,11 +602,24 @@ add_display (script_lib_sprite_data_t *data,
                                             (ply_pixel_display_draw_handler_t)
                                             script_lib_sprite_draw_area, script_display);
 
+        if (ply_console_viewer_preferred ()) {
+                script_display->console_viewer = ply_console_viewer_new (script_display->pixel_display, data->monospace_font);
+                ply_console_viewer_set_text_color (script_display->console_viewer, data->console_text_color);
+
+                if (data->boot_buffer)
+                        ply_console_viewer_convert_boot_buffer (script_display->console_viewer, data->boot_buffer);
+        } else {
+                script_display->console_viewer = NULL;
+        }
+
         ply_list_append_data (data->displays, script_display);
 }
 
 script_lib_sprite_data_t *script_lib_sprite_setup (script_state_t *state,
-                                                   ply_list_t     *pixel_displays)
+                                                   ply_list_t     *pixel_displays,
+                                                   ply_buffer_t   *boot_buffer,
+                                                   char           *monospace_font,
+                                                   uint32_t        console_text_color)
 {
         ply_list_node_t *node;
         script_lib_sprite_data_t *data = malloc (sizeof(script_lib_sprite_data_t));
@@ -616,6 +629,10 @@ script_lib_sprite_data_t *script_lib_sprite_setup (script_state_t *state,
         data->sprite_list = ply_list_new ();
         data->displays = ply_list_new ();
 
+        data->boot_buffer = boot_buffer;
+        data->monospace_font = monospace_font;
+        data->console_text_color = console_text_color;
+
         for (node = ply_list_get_first_node (pixel_displays);
              node;
              node = ply_list_get_next_node (pixel_displays, node)) {
index 41bc2ae0fd901eea0ec6036cbf09baaf7634633f..7a8838052c331fbbd779e1dd547a06887a902d1e 100644 (file)
@@ -42,6 +42,7 @@ typedef struct
 
         ply_buffer_t              *boot_buffer;
         char                      *monospace_font;
+        uint32_t                   console_text_color;
         bool                       needs_redraw;
         bool                       plugin_console_messages_updating;
         bool                       should_show_console_messages;
@@ -79,7 +80,10 @@ typedef struct
 } sprite_t;
 
 script_lib_sprite_data_t *script_lib_sprite_setup (script_state_t *state,
-                                                   ply_list_t     *displays);
+                                                   ply_list_t     *displays,
+                                                   ply_buffer_t   *boot_buffer,
+                                                   char           *monospace_font,
+                                                   uint32_t        console_text_color);
 void script_lib_sprite_pixel_display_added (script_lib_sprite_data_t *data,
                                             ply_pixel_display_t      *pixel_display);
 void script_lib_sprite_pixel_display_removed (script_lib_sprite_data_t *data,