]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
keyboard: track activeness
authorRay Strode <rstrode@redhat.com>
Wed, 22 Jul 2015 14:05:51 +0000 (10:05 -0400)
committerRay Strode <rstrode@redhat.com>
Thu, 30 Jul 2015 20:03:11 +0000 (16:03 -0400)
Right now, ply-seat has to handle tracking
keyboard activeness on its own.  This commit
moves activeness tracking to ply-keyboard
directly.

src/libply-splash-core/ply-keyboard.c
src/libply-splash-core/ply-keyboard.h

index ccf08e81548b29340b0c4ff28d07f2e574d5963d..80f76948bc7dff155d34529e1bffe17a33e3a971 100644 (file)
@@ -93,6 +93,8 @@ struct _ply_keyboard
         ply_list_t                  *backspace_handler_list;
         ply_list_t                  *escape_handler_list;
         ply_list_t                  *enter_handler_list;
+
+        uint32_t is_active : 1;
 };
 
 static bool ply_keyboard_watch_for_terminal_input (ply_keyboard_t *keyboard);
@@ -323,6 +325,12 @@ ply_keyboard_stop_watching_for_renderer_input (ply_keyboard_t *keyboard)
                                          keyboard->provider.if_renderer->input_source);
 }
 
+bool
+ply_keyboard_is_active (ply_keyboard_t *keyboard)
+{
+        return keyboard->is_active;
+}
+
 static void
 on_terminal_data (ply_keyboard_t *keyboard)
 {
@@ -369,15 +377,20 @@ ply_keyboard_watch_for_input (ply_keyboard_t *keyboard)
 {
         assert (keyboard != NULL);
 
+        if (keyboard->is_active)
+                return true;
+
         switch (keyboard->provider_type) {
         case PLY_KEYBOARD_PROVIDER_TYPE_RENDERER:
-                return ply_keyboard_watch_for_renderer_input (keyboard);
+                keyboard->is_active = ply_keyboard_watch_for_renderer_input (keyboard);
+                break;
 
         case PLY_KEYBOARD_PROVIDER_TYPE_TERMINAL:
-                return ply_keyboard_watch_for_terminal_input (keyboard);
+                keyboard->is_active = ply_keyboard_watch_for_terminal_input (keyboard);
+                break;
         }
 
-        return false;
+        return keyboard->is_active;
 }
 
 void
@@ -385,6 +398,9 @@ ply_keyboard_stop_watching_for_input (ply_keyboard_t *keyboard)
 {
         assert (keyboard != NULL);
 
+        if (!keyboard->is_active)
+                return;
+
         switch (keyboard->provider_type) {
         case PLY_KEYBOARD_PROVIDER_TYPE_RENDERER:
                 ply_keyboard_stop_watching_for_renderer_input (keyboard);
@@ -394,6 +410,8 @@ ply_keyboard_stop_watching_for_input (ply_keyboard_t *keyboard)
                 ply_keyboard_stop_watching_for_terminal_input (keyboard);
                 break;
         }
+
+        keyboard->is_active = false;
 }
 
 void
index 23497d9ba09101d500c60743754d91069ae3b3f5..6147cc7a0038924539167118efd6790743cb745c 100644 (file)
@@ -71,6 +71,7 @@ void ply_keyboard_remove_enter_handler (ply_keyboard_t              *keyboard,
 
 bool ply_keyboard_watch_for_input (ply_keyboard_t *keyboard);
 void ply_keyboard_stop_watching_for_input (ply_keyboard_t *keyboard);
+bool ply_keyboard_is_active (ply_keyboard_t *keyboard);
 
 #endif