From: Ray Strode Date: Wed, 22 Jul 2015 14:05:51 +0000 (-0400) Subject: keyboard: track activeness X-Git-Tag: 0.9.3~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea91f9baee41dad320a6848cffc32dc346612e85;p=thirdparty%2Fplymouth.git keyboard: track activeness Right now, ply-seat has to handle tracking keyboard activeness on its own. This commit moves activeness tracking to ply-keyboard directly. --- diff --git a/src/libply-splash-core/ply-keyboard.c b/src/libply-splash-core/ply-keyboard.c index ccf08e81..80f76948 100644 --- a/src/libply-splash-core/ply-keyboard.c +++ b/src/libply-splash-core/ply-keyboard.c @@ -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 diff --git a/src/libply-splash-core/ply-keyboard.h b/src/libply-splash-core/ply-keyboard.h index 23497d9b..6147cc7a 100644 --- a/src/libply-splash-core/ply-keyboard.h +++ b/src/libply-splash-core/ply-keyboard.h @@ -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