mirror of
https://gitlab.freedesktop.org/plymouth/plymouth.git
synced 2026-05-09 02:28:19 +02:00
[boot-splash] Remove displays before unloading plugin
If we don't do this, then the splash display handler will still be set, causing all sorts of undefined and weird behavior. This makes hitting the escape key multiple times act more reliable.
This commit is contained in:
parent
1285196e59
commit
63e9bbd44f
1 changed files with 60 additions and 2 deletions
|
|
@ -353,6 +353,62 @@ ply_boot_splash_unload (ply_boot_splash_t *splash)
|
|||
splash->is_loaded = false;
|
||||
}
|
||||
|
||||
static void
|
||||
remove_displays (ply_boot_splash_t *splash)
|
||||
{
|
||||
ply_list_node_t *node, *next_node;
|
||||
|
||||
ply_trace ("removing pixel displays");
|
||||
|
||||
node = ply_list_get_first_node (splash->pixel_displays);
|
||||
while (node != NULL)
|
||||
{
|
||||
ply_pixel_display_t *display;
|
||||
ply_list_node_t *next_node;
|
||||
unsigned long width, height;
|
||||
|
||||
display = ply_list_node_get_data (node);
|
||||
next_node = ply_list_get_next_node (splash->pixel_displays, node);
|
||||
|
||||
width = ply_pixel_display_get_width (display);
|
||||
height = ply_pixel_display_get_height (display);
|
||||
|
||||
ply_trace ("Removing %lux%lu pixel display", width, height);
|
||||
|
||||
if (splash->plugin_interface->remove_pixel_display != NULL)
|
||||
splash->plugin_interface->remove_pixel_display (splash->plugin, display);
|
||||
|
||||
ply_trace ("Removing node");
|
||||
ply_list_remove_node (splash->pixel_displays, node);
|
||||
|
||||
node = next_node;
|
||||
}
|
||||
|
||||
ply_trace ("removing text displays");
|
||||
node = ply_list_get_first_node (splash->text_displays);
|
||||
while (node != NULL)
|
||||
{
|
||||
ply_text_display_t *display;
|
||||
int number_of_columns, number_of_rows;
|
||||
|
||||
display = ply_list_node_get_data (node);
|
||||
next_node = ply_list_get_next_node (splash->text_displays, node);
|
||||
|
||||
number_of_columns = ply_text_display_get_number_of_columns (display);
|
||||
number_of_rows = ply_text_display_get_number_of_rows (display);
|
||||
|
||||
ply_trace ("Removing %dx%d text display", number_of_columns, number_of_rows);
|
||||
|
||||
if (splash->plugin_interface->remove_text_display != NULL)
|
||||
splash->plugin_interface->remove_text_display (splash->plugin, display);
|
||||
|
||||
ply_trace ("Removing node");
|
||||
ply_list_remove_node (splash->text_displays, node);
|
||||
|
||||
node = next_node;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ply_boot_splash_free (ply_boot_splash_t *splash)
|
||||
{
|
||||
|
|
@ -374,14 +430,16 @@ ply_boot_splash_free (ply_boot_splash_t *splash)
|
|||
splash);
|
||||
}
|
||||
|
||||
remove_displays (splash);
|
||||
ply_list_free (splash->pixel_displays);
|
||||
ply_list_free (splash->text_displays);
|
||||
|
||||
if (splash->module_handle != NULL)
|
||||
ply_boot_splash_unload (splash);
|
||||
|
||||
if (splash->idle_trigger != NULL)
|
||||
ply_trigger_free (splash->idle_trigger);
|
||||
|
||||
ply_list_free (splash->pixel_displays);
|
||||
ply_list_free (splash->text_displays);
|
||||
free (splash->theme_path);
|
||||
free (splash->plugin_dir);
|
||||
free (splash);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue