From: Ray Strode Date: Thu, 24 Sep 2015 19:57:59 +0000 (-0400) Subject: plugins: load view of hot plugged displays immediately X-Git-Tag: 0.9.3~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=74346ec268f6094dc350779042391db96ea01310;p=thirdparty%2Fplymouth.git plugins: load view of hot plugged displays immediately If we're already chugging along, and a new display gets added make sure to load the view associated with that display right away. Using an unloaded view can lead to crashes. --- diff --git a/src/plugins/splash/fade-throbber/plugin.c b/src/plugins/splash/fade-throbber/plugin.c index aba2cc62..a7ab4ef4 100644 --- a/src/plugins/splash/fade-throbber/plugin.c +++ b/src/plugins/splash/fade-throbber/plugin.c @@ -104,6 +104,7 @@ struct _ply_boot_splash_plugin double now; uint32_t is_animating : 1; + uint32_t is_visible : 1; }; ply_boot_splash_plugin_interface_t *ply_boot_splash_plugin_get_interface (void); @@ -751,7 +752,14 @@ add_pixel_display (ply_boot_splash_plugin_t *plugin, (ply_pixel_display_draw_handler_t) on_draw, view); - ply_list_append_data (plugin->views, view); + if (plugin->is_visible) { + if (view_load (view)) + ply_list_append_data (plugin->views, view); + else + view_free (view); + } else { + ply_list_append_data (plugin->views, view); + } } static void @@ -811,6 +819,8 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin, return false; } + plugin->is_visible = true; + ply_trace ("starting boot animation"); start_animation (plugin); @@ -945,6 +955,8 @@ hide_splash_screen (ply_boot_splash_plugin_t *plugin, { assert (plugin != NULL); + plugin->is_visible = false; + if (plugin->loop != NULL) { stop_animation (plugin); diff --git a/src/plugins/splash/space-flares/plugin.c b/src/plugins/splash/space-flares/plugin.c index 5212c38c..5af99c11 100644 --- a/src/plugins/splash/space-flares/plugin.c +++ b/src/plugins/splash/space-flares/plugin.c @@ -1387,7 +1387,14 @@ add_pixel_display (ply_boot_splash_plugin_t *plugin, (ply_pixel_display_draw_handler_t) on_draw, view); - ply_list_append_data (plugin->views, view); + if (plugin->is_visible) { + if (view_load (view)) + ply_list_append_data (plugin->views, view); + else + view_free (view); + } else { + ply_list_append_data (plugin->views, view); + } } static void diff --git a/src/plugins/splash/text/plugin.c b/src/plugins/splash/text/plugin.c index 468bb898..1422e837 100644 --- a/src/plugins/splash/text/plugin.c +++ b/src/plugins/splash/text/plugin.c @@ -471,7 +471,8 @@ add_text_display (ply_boot_splash_plugin_t *plugin, (ply_text_display_draw_handler_t) on_draw, view); - ply_list_append_data (plugin->views, view); + if (plugin->is_animating) + view_start_animation (view); } static void diff --git a/src/plugins/splash/throbgress/plugin.c b/src/plugins/splash/throbgress/plugin.c index c105e022..a1c8a905 100644 --- a/src/plugins/splash/throbgress/plugin.c +++ b/src/plugins/splash/throbgress/plugin.c @@ -625,7 +625,14 @@ add_pixel_display (ply_boot_splash_plugin_t *plugin, (ply_pixel_display_draw_handler_t) on_draw, view); - ply_list_append_data (plugin->views, view); + if (plugin->is_visible) { + if (view_load (view)) + ply_list_append_data (plugin->views, view); + else + view_free (view); + } else { + ply_list_append_data (plugin->views, view); + } } static void diff --git a/src/plugins/splash/tribar/plugin.c b/src/plugins/splash/tribar/plugin.c index 0dcd7f8d..ecc17ea3 100644 --- a/src/plugins/splash/tribar/plugin.c +++ b/src/plugins/splash/tribar/plugin.c @@ -478,6 +478,9 @@ add_text_display (ply_boot_splash_plugin_t *plugin, on_draw, view); ply_list_append_data (plugin->views, view); + + if (plugin->is_animating) + view_start_animation (view); } static void @@ -559,7 +562,9 @@ on_boot_progress (ply_boot_splash_plugin_t *plugin, next_node = ply_list_get_next_node (plugin->views, node); ply_text_progress_bar_set_percent_done (view->progress_bar, percent_done); - ply_text_progress_bar_draw (view->progress_bar); + + if (plugin->is_animating) + ply_text_progress_bar_draw (view->progress_bar); node = next_node; } diff --git a/src/plugins/splash/two-step/plugin.c b/src/plugins/splash/two-step/plugin.c index bc36cc8c..070741d6 100644 --- a/src/plugins/splash/two-step/plugin.c +++ b/src/plugins/splash/two-step/plugin.c @@ -995,7 +995,14 @@ add_pixel_display (ply_boot_splash_plugin_t *plugin, ply_pixel_display_set_draw_handler (view->display, (ply_pixel_display_draw_handler_t) on_draw, view); - ply_list_append_data (plugin->views, view); + if (plugin->is_visible) { + if (view_load (view)) + ply_list_append_data (plugin->views, view); + else + view_free (view); + } else { + ply_list_append_data (plugin->views, view); + } } static void