From 29e27637694eefc962d53333c729e6cac1c66518 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Thu, 24 Sep 2015 09:21:18 -0400 Subject: [PATCH] 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. --- src/libply-splash-core/ply-device-manager.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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; }