]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
renderers: Rework input handling a little
authorRay Strode <rstrode@redhat.com>
Sat, 30 Dec 2023 14:52:37 +0000 (09:52 -0500)
committerRay Strode <rstrode@redhat.com>
Sat, 30 Dec 2023 14:55:33 +0000 (09:55 -0500)
We don't need to flush the terminal input buffer on key events from
the renderers, because the terminal does that itself.

Also, we should disable the terminal input when a /dev/input
device is added instead of relying on it happening the next flush
period.

Finally, we should make sure the terminal gets reenabled on close,
just so we clean up after ourselves.

src/plugins/renderers/drm/plugin.c
src/plugins/renderers/frame-buffer/plugin.c

index 043d024a7d03c394133ff05177cf285bed0732bb..0335283d9acaf5bd71a124c37f622ad680f012c8 100644 (file)
@@ -1799,10 +1799,8 @@ on_terminal_key_event (ply_renderer_input_source_t *input_source)
         ply_renderer_backend_t *backend = input_source->backend;
         int terminal_fd;
 
-        if (using_input_device (input_source)) {
-                ply_terminal_flush_input (backend->terminal);
+        if (using_input_device (input_source))
                 return;
-        }
 
         terminal_fd = ply_terminal_get_fd (backend->terminal);
 
@@ -1867,6 +1865,8 @@ watch_input_device (ply_renderer_backend_t *backend,
                                           (ply_input_device_input_handler_t) on_input_device_key,
                                           (ply_input_device_leds_changed_handler_t) on_input_leds_changed,
                                           &backend->input_source);
+
+        ply_terminal_set_disabled_input (backend->terminal);
 }
 
 static void
@@ -1941,6 +1941,7 @@ close_input_source (ply_renderer_backend_t      *backend,
                                                                   (ply_input_device_leds_changed_handler_t) on_input_leds_changed,
                                                                   &backend->input_source);
                 }
+                ply_terminal_set_unbuffered_input (backend->terminal);
         }
 
         if (input_source->terminal_input_watch != NULL) {
index 2141990adf7c5843763da59bf04a178ac86dd7d6..3ce9b3d9b72c8eda3533ac9812526d6d8a2b6015 100644 (file)
@@ -666,10 +666,8 @@ on_terminal_key_event (ply_renderer_input_source_t *input_source)
         ply_renderer_backend_t *backend = input_source->backend;
         int terminal_fd;
 
-        if (using_input_device (input_source)) {
-                ply_terminal_flush_input (backend->terminal);
+        if (using_input_device (input_source))
                 return;
-        }
 
         terminal_fd = ply_terminal_get_fd (backend->terminal);
 
@@ -733,6 +731,8 @@ watch_input_device (ply_renderer_backend_t *backend,
                                           (ply_input_device_input_handler_t) on_input_device_key,
                                           (ply_input_device_leds_changed_handler_t) on_input_leds_changed,
                                           &backend->input_source);
+
+        ply_terminal_set_disabled_input (backend->terminal);
 }
 
 static void
@@ -807,6 +807,7 @@ close_input_source (ply_renderer_backend_t      *backend,
                                                                   (ply_input_device_leds_changed_handler_t) on_input_leds_changed,
                                                                   &backend->input_source);
                 }
+                ply_terminal_set_unbuffered_input (backend->terminal);
         }
 
         if (input_source->terminal_input_watch != NULL) {