From: Ray Strode Date: Thu, 24 Sep 2015 13:21:18 +0000 (-0400) Subject: device-manager: activate new renderers after adding to renderers list X-Git-Tag: 0.9.3~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=29e27637694eefc962d53333c729e6cac1c66518;p=thirdparty%2Fplymouth.git device-manager: activate new renderers after adding to renderers list When a new renderer gets created, we should activate it, if the device manager is already active. At the moment we call create_pixel_displays_for_renderer which would implicitly activate it (from a callback), except we call it one line too early, so the renderer isn't in the list of known renderers yet. This commit swaps the two lines and also adds an explicit renderer activation for clarity. For symmetry it makes the same change to keyboards that it makes to renderers. --- diff --git a/src/libply-splash-core/ply-device-manager.c b/src/libply-splash-core/ply-device-manager.c index 8cb1aa33..877b7cd0 100644 --- a/src/libply-splash-core/ply-device-manager.c +++ b/src/libply-splash-core/ply-device-manager.c @@ -71,6 +71,8 @@ struct _ply_device_manager uint32_t local_console_managed : 1; uint32_t local_console_is_text : 1; uint32_t serial_consoles_detected : 1; + uint32_t renderers_activated : 1; + uint32_t keyboards_activated : 1; }; static void @@ -682,6 +684,12 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager, create_pixel_displays_for_renderer (manager, renderer); ply_hashtable_insert (manager->renderers, strdup (device_path), renderer); + create_pixel_displays_for_renderer (manager, renderer); + + if (manager->renderers_activated) { + ply_trace ("activating renderer"); + ply_renderer_activate (renderer); + } } else if (terminal != NULL) { keyboard = ply_keyboard_new_for_terminal (terminal); ply_list_append_data (manager->keyboards, keyboard); @@ -699,7 +707,8 @@ create_devices_for_terminal_and_renderer_type (ply_device_manager_t *manager, } } - if (keyboard != NULL) { + if (keyboard != NULL && manager->keyboards_activated) { + ply_trace ("activating keyboards"); ply_keyboard_watch_for_input (keyboard); } } @@ -865,6 +874,8 @@ ply_device_manager_activate_renderers (ply_device_manager_t *manager) (ply_hashtable_foreach_func_t *) activate_renderer, manager); + + manager->renderers_activated = true; } static void @@ -882,6 +893,8 @@ ply_device_manager_deactivate_renderers (ply_device_manager_t *manager) (ply_hashtable_foreach_func_t *) deactivate_renderer, manager); + + manager->renderers_activated = false; } void @@ -902,6 +915,8 @@ ply_device_manager_activate_keyboards (ply_device_manager_t *manager) node = next_node; } + + manager->keyboards_activated = true; } void @@ -922,4 +937,6 @@ ply_device_manager_deactivate_keyboards (ply_device_manager_t *manager) node = next_node; } + + manager->keyboards_activated = false; }