#include "flutter/shell/platform/linux/fl_keyboard_manager.h"
#include <array>
#include <cinttypes>
#include <memory>
#include <string>
#include "flutter/shell/platform/linux/fl_engine_private.h"
#include "flutter/shell/platform/linux/fl_key_channel_responder.h"
#include "flutter/shell/platform/linux/fl_key_embedder_responder.h"
#include "flutter/shell/platform/linux/fl_keyboard_layout.h"
#include "flutter/shell/platform/linux/fl_keyboard_pending_event.h"
#include "flutter/shell/platform/linux/key_mapping.h"
Go to the source code of this file.
Classes | |
struct | _FlKeyboardManagerData |
struct | _FlKeyboardManager |
Macros | |
#define | DEBUG_PRINT_LAYOUT |
Functions | |
G_DECLARE_FINAL_TYPE (FlKeyboardManagerData, fl_keyboard_manager_data, FL, KEYBOARD_MANAGER_DATA, GObject) | |
static void | fl_keyboard_manager_data_dispose (GObject *object) |
static void | fl_keyboard_manager_data_class_init (FlKeyboardManagerDataClass *klass) |
static void | fl_keyboard_manager_data_init (FlKeyboardManagerData *self) |
static FlKeyboardManagerData * | fl_keyboard_manager_data_new (FlKeyboardManager *manager, FlKeyboardPendingEvent *pending) |
G_DEFINE_TYPE (FlKeyboardManager, fl_keyboard_manager, G_TYPE_OBJECT) | |
static void | keymap_keys_changed_cb (FlKeyboardManager *self) |
static gboolean | g_ptr_array_find_with_equal_func1 (GPtrArray *haystack, gconstpointer needle, GEqualFunc equal_func, guint *index_) |
static gboolean | compare_pending_by_hash (gconstpointer a, gconstpointer b) |
static bool | fl_keyboard_manager_remove_redispatched (FlKeyboardManager *self, uint64_t hash) |
static void | responder_handle_event_callback (FlKeyboardManager *self, FlKeyboardPendingEvent *pending) |
static void | responder_handle_embedder_event_callback (bool handled, gpointer user_data) |
static void | responder_handle_channel_event_cb (GObject *object, GAsyncResult *result, gpointer user_data) |
static uint16_t | convert_key_to_char (FlKeyboardManager *self, guint keycode, gint group, gint level) |
static void | guarantee_layout (FlKeyboardManager *self, FlKeyEvent *event) |
static void | fl_keyboard_manager_dispose (GObject *object) |
static void | fl_keyboard_manager_class_init (FlKeyboardManagerClass *klass) |
static void | fl_keyboard_manager_init (FlKeyboardManager *self) |
FlKeyboardManager * | fl_keyboard_manager_new (FlEngine *engine, FlKeyboardViewDelegate *view_delegate) |
gboolean | fl_keyboard_manager_handle_event (FlKeyboardManager *self, FlKeyEvent *event) |
gboolean | fl_keyboard_manager_is_state_clear (FlKeyboardManager *self) |
void | fl_keyboard_manager_sync_modifier_if_needed (FlKeyboardManager *self, guint state, double event_time) |
GHashTable * | fl_keyboard_manager_get_pressed_state (FlKeyboardManager *self) |
void | fl_keyboard_manager_set_send_key_event_handler (FlKeyboardManager *self, FlKeyboardManagerSendKeyEventHandler send_key_event_handler, gpointer user_data) |
void | fl_keyboard_manager_set_lookup_key_handler (FlKeyboardManager *self, FlKeyboardManagerLookupKeyHandler lookup_key_handler, gpointer user_data) |
void | fl_keyboard_manager_set_redispatch_handler (FlKeyboardManager *self, FlKeyboardManagerRedispatchEventHandler redispatch_handler, gpointer user_data) |
void | fl_keyboard_manager_set_get_pressed_state_handler (FlKeyboardManager *self, FlKeyboardManagerGetPressedStateHandler get_pressed_state_handler, gpointer user_data) |
#define DEBUG_PRINT_LAYOUT |
Definition at line 21 of file fl_keyboard_manager.cc.
|
static |
Definition at line 207 of file fl_keyboard_manager.cc.
References fl_keyboard_pending_event_get_hash().
Referenced by fl_keyboard_manager_remove_redispatched().
|
static |
|
static |
Definition at line 435 of file fl_keyboard_manager.cc.
References fl_keyboard_manager_dispose().
|
static |
Definition at line 94 of file fl_keyboard_manager.cc.
References fl_keyboard_manager_data_dispose().
|
static |
Definition at line 85 of file fl_keyboard_manager.cc.
Referenced by fl_keyboard_manager_data_class_init().
|
static |
Definition at line 99 of file fl_keyboard_manager.cc.
|
static |
Definition at line 102 of file fl_keyboard_manager.cc.
Referenced by fl_keyboard_manager_handle_event().
|
static |
Definition at line 409 of file fl_keyboard_manager.cc.
References TRUE.
Referenced by fl_keyboard_manager_class_init().
GHashTable* fl_keyboard_manager_get_pressed_state | ( | FlKeyboardManager * | manager | ) |
fl_keyboard_manager_get_pressed_state: @manager: the #FlKeyboardManager self.
Returns the keyboard pressed state. The hash table contains one entry per pressed keys, mapping from the logical key to the physical key.*
Definition at line 566 of file fl_keyboard_manager.cc.
References fl_key_embedder_responder_get_pressed_state().
Referenced by get_keyboard_state().
gboolean fl_keyboard_manager_handle_event | ( | FlKeyboardManager * | manager, |
FlKeyEvent * | event | ||
) |
fl_keyboard_manager_handle_event: @manager: the #FlKeyboardManager self. @event: the event to be dispatched. It is usually a wrap of a GdkEventKey. This event will be managed and released by #FlKeyboardManager.
Make the manager process a system key event. This might eventually send messages to the framework, trigger text input effects, or redispatch the event back to the system.
Definition at line 522 of file fl_keyboard_manager.cc.
References fl_key_channel_responder_handle_event(), fl_key_embedder_responder_handle_event(), fl_key_event_get_group(), fl_key_event_get_keycode(), fl_key_event_hash(), fl_keyboard_layout_get_logical_key(), fl_keyboard_manager_data_new(), fl_keyboard_manager_remove_redispatched(), fl_keyboard_pending_event_new(), guarantee_layout(), responder_handle_channel_event_cb(), responder_handle_embedder_event_callback(), and TRUE.
Referenced by fl_view_key_press_event(), and fl_view_key_release_event().
|
static |
Definition at line 439 of file fl_keyboard_manager.cc.
References fl_keyboard_layout_new(), if(), keymap_keys_changed_cb(), and layout_goals.
gboolean fl_keyboard_manager_is_state_clear | ( | FlKeyboardManager * | manager | ) |
fl_keyboard_manager_is_state_clear: @manager: the #FlKeyboardManager self.
A debug-only method that queries whether the manager's various states are cleared, i.e. no pending events for redispatching or for responding.
Returns: true if the manager's various states are cleared.
Definition at line 552 of file fl_keyboard_manager.cc.
FlKeyboardManager* fl_keyboard_manager_new | ( | FlEngine * | engine, |
FlKeyboardViewDelegate * | view_delegate | ||
) |
FlKeyboardManager:
Processes keyboard events and cooperate with TextInputManager
.
A keyboard event goes through a few sections, each can choose to handle the event, and only unhandled events can move to the next section:
TextInputManager
) and are handled synchronously.Create a new #FlKeyboardManager.
Returns: a new #FlKeyboardManager.
Definition at line 462 of file fl_keyboard_manager.cc.
References fl_engine_send_key_event(), fl_key_embedder_responder_new(), if(), and user_data.
Referenced by init_keyboard(), and TEST().
|
static |
Definition at line 218 of file fl_keyboard_manager.cc.
References compare_pending_by_hash(), g_ptr_array_find_with_equal_func1(), and TRUE.
Referenced by fl_keyboard_manager_handle_event().
void fl_keyboard_manager_set_get_pressed_state_handler | ( | FlKeyboardManager * | manager, |
FlKeyboardManagerGetPressedStateHandler | get_pressed_state_handler, | ||
gpointer | user_data | ||
) |
fl_keyboard_manager_set_get_pressed_state_handler: @manager: the #FlKeyboardManager self.
Set the handler for gettting the keyboard state, for testing purposes only.
Definition at line 604 of file fl_keyboard_manager.cc.
References user_data.
Referenced by TEST().
void fl_keyboard_manager_set_lookup_key_handler | ( | FlKeyboardManager * | manager, |
FlKeyboardManagerLookupKeyHandler | lookup_key_handler, | ||
gpointer | user_data | ||
) |
fl_keyboard_manager_set_lookup_key_handler: @manager: the #FlKeyboardManager self.
Set the handler for key lookup, for testing purposes only.
Definition at line 586 of file fl_keyboard_manager.cc.
References user_data.
void fl_keyboard_manager_set_redispatch_handler | ( | FlKeyboardManager * | manager, |
FlKeyboardManagerRedispatchEventHandler | redispatch_handler, | ||
gpointer | user_data | ||
) |
fl_keyboard_manager_set_redispatch_handler: @manager: the #FlKeyboardManager self.
Set the handler for redispatches, for testing purposes only.
Definition at line 595 of file fl_keyboard_manager.cc.
References user_data.
void fl_keyboard_manager_set_send_key_event_handler | ( | FlKeyboardManager * | manager, |
FlKeyboardManagerSendKeyEventHandler | send_key_event_handler, | ||
gpointer | user_data | ||
) |
fl_keyboard_manager_set_send_key_event_handler: @manager: the #FlKeyboardManager self.
Set the handler for sending events, for testing purposes only.
Definition at line 577 of file fl_keyboard_manager.cc.
References user_data.
void fl_keyboard_manager_sync_modifier_if_needed | ( | FlKeyboardManager * | manager, |
guint | state, | ||
double | event_time | ||
) |
fl_keyboard_manager_sync_modifier_if_needed: @manager: the #FlKeyboardManager self. @state: the state of the modifiers mask. @event_time: the time attribute of the incoming GDK event.
If needed, synthesize modifier keys up and down event by comparing their current pressing states with the given modifiers mask.
Definition at line 558 of file fl_keyboard_manager.cc.
References fl_key_embedder_responder_sync_modifiers_if_needed(), and state.
Referenced by sync_modifier_if_needed().
G_DECLARE_FINAL_TYPE | ( | FlKeyboardManagerData | , |
fl_keyboard_manager_data | , | ||
FL | , | ||
KEYBOARD_MANAGER_DATA | , | ||
GObject | |||
) |
G_DEFINE_TYPE | ( | FlKeyboardManager | , |
fl_keyboard_manager | , | ||
G_TYPE_OBJECT | |||
) |
|
static |
Definition at line 185 of file fl_keyboard_manager.cc.
Referenced by fl_keyboard_manager_remove_redispatched().
|
static |
Definition at line 323 of file fl_keyboard_manager.cc.
References convert_key_to_char(), fl_key_event_get_group(), fl_key_event_get_keycode(), fl_keyboard_layout_get_logical_key(), fl_keyboard_layout_has_group(), fl_keyboard_layout_set_logical_key(), LayoutGoal::keycode, layout_goals, and LayoutGoal::logical_key.
Referenced by fl_keyboard_manager_handle_event().
|
static |
Definition at line 177 of file fl_keyboard_manager.cc.
References fl_keyboard_layout_new().
Referenced by fl_keyboard_manager_init().
|
static |
Definition at line 280 of file fl_keyboard_manager.cc.
References error, fl_key_channel_responder_handle_event_finish(), fl_keyboard_pending_event_mark_channel_replied(), responder_handle_event_callback(), and user_data.
Referenced by fl_keyboard_manager_handle_event().
|
static |
Definition at line 265 of file fl_keyboard_manager.cc.
References fl_keyboard_pending_event_mark_embedder_replied(), responder_handle_event_callback(), and user_data.
Referenced by fl_keyboard_manager_handle_event().
|
static |
Definition at line 234 of file fl_keyboard_manager.cc.
References fl_key_event_get_origin(), fl_keyboard_pending_event_get_any_handled(), fl_keyboard_pending_event_get_event(), fl_keyboard_pending_event_is_complete(), and fl_keyboard_view_delegate_text_filter_key_press().
Referenced by responder_handle_channel_event_cb(), and responder_handle_embedder_event_callback().