]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
device-manager: activate new renderers after adding to renderers list
authorRay Strode <rstrode@redhat.com>
Thu, 24 Sep 2015 13:21:18 +0000 (09:21 -0400)
committerRay Strode <rstrode@redhat.com>
Mon, 23 May 2016 14:53:55 +0000 (10:53 -0400)
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

index 8cb1aa33019183340303f39c290c245d25bd91c9..877b7cd04fb975b7238384d18d82e6b8dc73ee16 100644 (file)
@@ -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;
 }