]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
splash: remove pixel_display in sprite-lib when notified they are gone
authorFrederic Crozat <fcrozat@suse.com>
Thu, 19 Jun 2014 14:18:12 +0000 (16:18 +0200)
committerFrederic Crozat <fcrozat@suse.com>
Thu, 19 Jun 2014 14:54:12 +0000 (16:54 +0200)
src/plugins/splash/script/plugin.c
src/plugins/splash/script/script-lib-sprite.c
src/plugins/splash/script/script-lib-sprite.h

index a89c114b7df0bbbd9e2f8ffba3b129b57c73d55e..f3d72e55713dcce806a45e4b520ba15cb3c42e62 100644 (file)
@@ -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);
 }
 
index a4772e8cf8faebc72824a10cae2defbe51011a40..64b5ddf65022435c224e920c3d427656fc5891a4 100644 (file)
@@ -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)
 {
index 55105c3df2bf39f084f97616c6ddd928f59a3a1a..783fb7639f0a548cf790bcd82be5fc40ec602bb9 100644 (file)
@@ -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);