From: Frederic Crozat Date: Thu, 19 Jun 2014 14:18:12 +0000 (+0200) Subject: splash: remove pixel_display in sprite-lib when notified they are gone X-Git-Tag: 0.9.2~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad75f014b1c362d6721b95e692b8face52f2f0a1;p=thirdparty%2Fplymouth.git splash: remove pixel_display in sprite-lib when notified they are gone --- diff --git a/src/plugins/splash/script/plugin.c b/src/plugins/splash/script/plugin.c index a89c114b..f3d72e55 100644 --- a/src/plugins/splash/script/plugin.c +++ b/src/plugins/splash/script/plugin.c @@ -395,6 +395,7 @@ static void remove_pixel_display (ply_boot_splash_plugin_t *plugin, ply_pixel_display_t *display) { + script_lib_sprite_pixel_display_removed (plugin->script_sprite_lib, display); ply_list_remove_data (plugin->displays, display); } diff --git a/src/plugins/splash/script/script-lib-sprite.c b/src/plugins/splash/script/script-lib-sprite.c index a4772e8c..64b5ddf6 100644 --- a/src/plugins/splash/script/script-lib-sprite.c +++ b/src/plugins/splash/script/script-lib-sprite.c @@ -686,6 +686,26 @@ region_add_area (ply_region_t *region, ply_region_add_rectangle (region, &rectangle); } +void script_lib_sprite_pixel_display_removed (script_lib_sprite_data_t *data, ply_pixel_display_t *pixel_display) +{ + ply_list_node_t *node; + ply_list_node_t *next_node; + script_lib_display_t* display; + + node = ply_list_get_first_node (data->displays); + while (node) + { + next_node = ply_list_get_next_node (data->displays, node); + display = ply_list_node_get_data (node); + + if (display->pixel_display == pixel_display) + { + ply_list_remove_node (data->displays, node); + } + node = next_node; + } +} + void script_lib_sprite_refresh (script_lib_sprite_data_t *data) { diff --git a/src/plugins/splash/script/script-lib-sprite.h b/src/plugins/splash/script/script-lib-sprite.h index 55105c3d..783fb763 100644 --- a/src/plugins/splash/script/script-lib-sprite.h +++ b/src/plugins/splash/script/script-lib-sprite.h @@ -65,6 +65,7 @@ typedef struct script_lib_sprite_data_t *script_lib_sprite_setup (script_state_t *state, ply_list_t *displays); +void script_lib_sprite_pixel_display_removed (script_lib_sprite_data_t *data, ply_pixel_display_t *pixel_display); void script_lib_sprite_refresh (script_lib_sprite_data_t *data); void script_lib_sprite_destroy (script_lib_sprite_data_t *data);