From: nerdopolis Date: Sat, 20 Jul 2024 03:47:42 +0000 (-0400) Subject: script: Handle adding the console viewer better when hotplugging X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7166e4aeacd2d4f6c976f830da740ceef876e7d7;p=thirdparty%2Fplymouth.git script: Handle adding the console viewer better when hotplugging --- diff --git a/src/plugins/splash/script/plugin.c b/src/plugins/splash/script/plugin.c index 698dd248..b5931137 100644 --- a/src/plugins/splash/script/plugin.c +++ b/src/plugins/splash/script/plugin.c @@ -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) { diff --git a/src/plugins/splash/script/script-lib-sprite.c b/src/plugins/splash/script/script-lib-sprite.c index 99809d92..c7d80955 100644 --- a/src/plugins/splash/script/script-lib-sprite.c +++ b/src/plugins/splash/script/script-lib-sprite.c @@ -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)) { diff --git a/src/plugins/splash/script/script-lib-sprite.h b/src/plugins/splash/script/script-lib-sprite.h index 41bc2ae0..7a883805 100644 --- a/src/plugins/splash/script/script-lib-sprite.h +++ b/src/plugins/splash/script/script-lib-sprite.h @@ -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,