 |
Flutter Linux Embedder
|
|
Go to the source code of this file.
|
| | 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) |
| |
◆ DEBUG_PRINT_LAYOUT
| #define DEBUG_PRINT_LAYOUT |
◆ compare_pending_by_hash()
| static gboolean compare_pending_by_hash |
( |
gconstpointer |
a, |
|
|
gconstpointer |
b |
|
) |
| |
|
static |
◆ convert_key_to_char()
| static uint16_t convert_key_to_char |
( |
FlKeyboardManager * |
self, |
|
|
guint |
keycode, |
|
|
gint |
group, |
|
|
gint |
level |
|
) |
| |
|
static |
Definition at line 306 of file fl_keyboard_manager.cc.
310 GdkKeymapKey key = {keycode, group, level};
311 constexpr
int kBmpMax = 0xD7FF;
313 if (self->lookup_key_handler !=
nullptr) {
314 origin =
self->lookup_key_handler(&key, self->lookup_key_handler_user_data);
316 origin = gdk_keymap_lookup_key(self->keymap, &key);
318 return origin < kBmpMax ? origin : 0xFFFF;
Referenced by guarantee_layout().
◆ fl_keyboard_manager_class_init()
| static void fl_keyboard_manager_class_init |
( |
FlKeyboardManagerClass * |
klass | ) |
|
|
static |
◆ fl_keyboard_manager_data_class_init()
| static void fl_keyboard_manager_data_class_init |
( |
FlKeyboardManagerDataClass * |
klass | ) |
|
|
static |
◆ fl_keyboard_manager_data_dispose()
| static void fl_keyboard_manager_data_dispose |
( |
GObject * |
object | ) |
|
|
static |
Definition at line 85 of file fl_keyboard_manager.cc.
86 g_return_if_fail(FL_IS_KEYBOARD_MANAGER_DATA(
object));
87 FlKeyboardManagerData*
self = FL_KEYBOARD_MANAGER_DATA(
object);
89 g_weak_ref_clear(&self->manager);
91 G_OBJECT_CLASS(fl_keyboard_manager_data_parent_class)->dispose(
object);
Referenced by fl_keyboard_manager_data_class_init().
◆ fl_keyboard_manager_data_init()
| static void fl_keyboard_manager_data_init |
( |
FlKeyboardManagerData * |
self | ) |
|
|
static |
◆ fl_keyboard_manager_data_new()
| static FlKeyboardManagerData* fl_keyboard_manager_data_new |
( |
FlKeyboardManager * |
manager, |
|
|
FlKeyboardPendingEvent * |
pending |
|
) |
| |
|
static |
Definition at line 102 of file fl_keyboard_manager.cc.
105 FlKeyboardManagerData*
self = FL_KEYBOARD_MANAGER_DATA(
106 g_object_new(fl_keyboard_manager_data_get_type(),
nullptr));
108 g_weak_ref_init(&self->manager, manager);
109 self->pending = FL_KEYBOARD_PENDING_EVENT(g_object_ref(pending));
Referenced by fl_keyboard_manager_handle_event().
◆ fl_keyboard_manager_dispose()
| static void fl_keyboard_manager_dispose |
( |
GObject * |
object | ) |
|
|
static |
Definition at line 409 of file fl_keyboard_manager.cc.
410 FlKeyboardManager*
self = FL_KEYBOARD_MANAGER(
object);
412 g_cancellable_cancel(self->cancellable);
414 g_weak_ref_clear(&self->engine);
415 g_weak_ref_clear(&self->view_delegate);
417 self->keycode_to_goals.reset();
418 self->logical_to_mandatory_goals.reset();
420 g_clear_object(&self->key_embedder_responder);
421 g_clear_object(&self->key_channel_responder);
422 g_ptr_array_set_free_func(self->pending_responds, g_object_unref);
423 g_ptr_array_free(self->pending_responds,
TRUE);
424 g_ptr_array_free(self->pending_redispatches,
TRUE);
425 g_clear_object(&self->derived_layout);
426 if (self->keymap_keys_changed_cb_id != 0) {
427 g_signal_handler_disconnect(self->keymap, self->keymap_keys_changed_cb_id);
428 self->keymap_keys_changed_cb_id = 0;
430 g_clear_object(&self->cancellable);
432 G_OBJECT_CLASS(fl_keyboard_manager_parent_class)->dispose(
object);
References TRUE.
Referenced by fl_keyboard_manager_class_init().
◆ fl_keyboard_manager_get_pressed_state()
| 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.
567 g_return_val_if_fail(FL_IS_KEYBOARD_MANAGER(
self),
nullptr);
568 if (self->get_pressed_state_handler !=
nullptr) {
569 return self->get_pressed_state_handler(
570 self->get_pressed_state_handler_user_data);
573 self->key_embedder_responder);
References fl_key_embedder_responder_get_pressed_state().
Referenced by get_keyboard_state().
◆ fl_keyboard_manager_handle_event()
| 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.
524 g_return_val_if_fail(FL_IS_KEYBOARD_MANAGER(
self), FALSE);
525 g_return_val_if_fail(event !=
nullptr, FALSE);
536 g_ptr_array_add(self->pending_responds, pending);
537 g_autoptr(FlKeyboardManagerData) data =
543 self->key_embedder_responder, event, specified_logical_key,
546 self->key_channel_responder, event, specified_logical_key,
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().
◆ fl_keyboard_manager_init()
| static void fl_keyboard_manager_init |
( |
FlKeyboardManager * |
self | ) |
|
|
static |
Definition at line 439 of file fl_keyboard_manager.cc.
442 self->keycode_to_goals =
443 std::make_unique<std::map<uint16_t, const LayoutGoal*>>();
444 self->logical_to_mandatory_goals =
445 std::make_unique<std::map<uint64_t, const LayoutGoal*>>();
447 (*
self->keycode_to_goals)[goal.keycode] = &goal;
448 if (goal.mandatory) {
449 (*
self->logical_to_mandatory_goals)[goal.logical_key] = &goal;
453 self->pending_responds = g_ptr_array_new();
454 self->pending_redispatches = g_ptr_array_new_with_free_func(g_object_unref);
456 self->keymap = gdk_keymap_get_for_display(gdk_display_get_default());
457 self->keymap_keys_changed_cb_id = g_signal_connect_swapped(
459 self->cancellable = g_cancellable_new();
References fl_keyboard_layout_new(), if(), keymap_keys_changed_cb(), and layout_goals.
◆ fl_keyboard_manager_is_state_clear()
| 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.
553 g_return_val_if_fail(FL_IS_KEYBOARD_MANAGER(
self), FALSE);
554 return self->pending_responds->len == 0 &&
555 self->pending_redispatches->len == 0;
◆ fl_keyboard_manager_new()
| 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:
- Keyboard: Dispatch to the embedder responder and the channel responder simultaneously. After both responders have responded (asynchronously), the event is considered handled if either responder handles it.
- Text input: Events are sent to IM filter (usually owned by
TextInputManager) and are handled synchronously.
- Redispatching: Events are inserted back to the system for redispatching. fl_keyboard_manager_new: @engine: an #FlEngine. @view_delegate: An interface that the manager requires to communicate with the platform. Usually implemented by FlView.
Create a new #FlKeyboardManager.
Returns: a new #FlKeyboardManager.
Definition at line 462 of file fl_keyboard_manager.cc.
465 g_return_val_if_fail(FL_IS_KEYBOARD_VIEW_DELEGATE(view_delegate),
nullptr);
467 FlKeyboardManager*
self = FL_KEYBOARD_MANAGER(
468 g_object_new(fl_keyboard_manager_get_type(),
nullptr));
470 g_weak_ref_init(&self->engine, engine);
471 g_weak_ref_init(&self->view_delegate, view_delegate);
474 [](
const FlutterKeyEvent* event, FlutterKeyEventCallback callback,
475 void* callback_user_data,
void* send_key_event_user_data) {
476 FlKeyboardManager*
self = FL_KEYBOARD_MANAGER(send_key_event_user_data);
477 if (self->send_key_event_handler !=
nullptr) {
478 self->send_key_event_handler(event, callback, callback_user_data,
479 self->send_key_event_handler_user_data);
481 g_autoptr(FlEngine) engine = FL_ENGINE(g_weak_ref_get(&self->engine));
482 if (engine !=
nullptr) {
484 FlutterKeyEventCallback callback;
485 void* callback_user_data;
487 SendKeyEventData* data = g_new0(SendKeyEventData, 1);
488 data->callback = callback;
489 data->callback_user_data = callback_user_data;
491 engine, event, self->cancellable,
492 [](GObject*
object, GAsyncResult* result, gpointer
user_data) {
493 g_autofree SendKeyEventData* data =
494 static_cast<SendKeyEventData*>(user_data);
495 gboolean handled = FALSE;
496 g_autoptr(GError) error = nullptr;
497 if (!fl_engine_send_key_event_finish(
498 FL_ENGINE(object), result, &handled, &error)) {
499 if (g_error_matches(error, G_IO_ERROR,
500 G_IO_ERROR_CANCELLED)) {
504 g_warning(
"Failed to send key event: %s", error->message);
507 if (data->callback !=
nullptr) {
508 data->callback(handled, data->callback_user_data);
516 self->key_channel_responder =
References fl_engine_send_key_event(), fl_key_embedder_responder_new(), if(), and user_data.
Referenced by init_keyboard(), and TEST().
◆ fl_keyboard_manager_remove_redispatched()
| static bool fl_keyboard_manager_remove_redispatched |
( |
FlKeyboardManager * |
self, |
|
|
uint64_t |
hash |
|
) |
| |
|
static |
◆ fl_keyboard_manager_set_get_pressed_state_handler()
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.
608 g_return_if_fail(FL_IS_KEYBOARD_MANAGER(
self));
609 self->get_pressed_state_handler = get_pressed_state_handler;
610 self->get_pressed_state_handler_user_data =
user_data;
References user_data.
Referenced by TEST().
◆ fl_keyboard_manager_set_lookup_key_handler()
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.
590 g_return_if_fail(FL_IS_KEYBOARD_MANAGER(
self));
591 self->lookup_key_handler = lookup_key_handler;
592 self->lookup_key_handler_user_data =
user_data;
References user_data.
◆ fl_keyboard_manager_set_redispatch_handler()
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.
599 g_return_if_fail(FL_IS_KEYBOARD_MANAGER(
self));
600 self->redispatch_handler = redispatch_handler;
601 self->redispatch_handler_user_data =
user_data;
References user_data.
◆ fl_keyboard_manager_set_send_key_event_handler()
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.
581 g_return_if_fail(FL_IS_KEYBOARD_MANAGER(
self));
582 self->send_key_event_handler = send_key_event_handler;
583 self->send_key_event_handler_user_data =
user_data;
References user_data.
◆ fl_keyboard_manager_sync_modifier_if_needed()
| 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.
561 g_return_if_fail(FL_IS_KEYBOARD_MANAGER(
self));
563 self->key_embedder_responder,
state, event_time);
References fl_key_embedder_responder_sync_modifiers_if_needed(), and state.
Referenced by sync_modifier_if_needed().
◆ G_DECLARE_FINAL_TYPE()
| G_DECLARE_FINAL_TYPE |
( |
FlKeyboardManagerData |
, |
|
|
fl_keyboard_manager_data |
, |
|
|
FL |
, |
|
|
KEYBOARD_MANAGER_DATA |
, |
|
|
GObject |
|
|
) |
| |
◆ G_DEFINE_TYPE()
| G_DEFINE_TYPE |
( |
FlKeyboardManager |
, |
|
|
fl_keyboard_manager |
, |
|
|
G_TYPE_OBJECT |
|
|
) |
| |
◆ g_ptr_array_find_with_equal_func1()
| static gboolean g_ptr_array_find_with_equal_func1 |
( |
GPtrArray * |
haystack, |
|
|
gconstpointer |
needle, |
|
|
GEqualFunc |
equal_func, |
|
|
guint * |
index_ |
|
) |
| |
|
static |
Definition at line 185 of file fl_keyboard_manager.cc.
190 g_return_val_if_fail(haystack != NULL, FALSE);
191 if (equal_func == NULL) {
192 equal_func = g_direct_equal;
194 for (
i = 0;
i < haystack->len;
i++) {
195 if (equal_func(g_ptr_array_index(haystack,
i), needle)) {
196 if (index_ != NULL) {
References i, and TRUE.
Referenced by fl_keyboard_manager_remove_redispatched().
◆ guarantee_layout()
| static void guarantee_layout |
( |
FlKeyboardManager * |
self, |
|
|
FlKeyEvent * |
event |
|
) |
| |
|
static |
Definition at line 323 of file fl_keyboard_manager.cc.
324 g_autoptr(FlKeyboardViewDelegate) view_delegate =
325 FL_KEYBOARD_VIEW_DELEGATE(g_weak_ref_get(&self->view_delegate));
326 if (view_delegate ==
nullptr) {
335 self->keycode_to_goals->end()) {
341 std::map<uint64_t, const LayoutGoal*> remaining_mandatory_goals =
342 *
self->logical_to_mandatory_goals;
344 #ifdef DEBUG_PRINT_LAYOUT
345 std::string debug_layout_data;
346 for (uint16_t keycode = 0; keycode < 128; keycode += 1) {
347 std::vector<uint16_t> this_key_clues = {
351 debug_format_layout_data(debug_layout_data, keycode, this_key_clues[0],
361 uint16_t keycode = keycode_goal.keycode;
362 std::vector<uint16_t> this_key_clues = {
374 for (uint16_t clue : this_key_clues) {
375 auto matching_goal = remaining_mandatory_goals.find(clue);
376 if (matching_goal != remaining_mandatory_goals.end()) {
379 self->derived_layout, group, keycode) == 0);
382 remaining_mandatory_goals.erase(matching_goal);
386 bool has_any_eascii =
387 is_eascii(this_key_clues[0]) || is_eascii(this_key_clues[1]);
392 auto found_us_layout =
self->keycode_to_goals->find(keycode);
393 if (found_us_layout != self->keycode_to_goals->end()) {
395 self->derived_layout, group, keycode,
396 found_us_layout->second->logical_key);
402 for (
const auto mandatory_goal_iter : remaining_mandatory_goals) {
403 const LayoutGoal* goal = mandatory_goal_iter.second;
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().
◆ keymap_keys_changed_cb()
| static void keymap_keys_changed_cb |
( |
FlKeyboardManager * |
self | ) |
|
|
static |
◆ responder_handle_channel_event_cb()
| static void responder_handle_channel_event_cb |
( |
GObject * |
object, |
|
|
GAsyncResult * |
result, |
|
|
gpointer |
user_data |
|
) |
| |
|
static |
Definition at line 280 of file fl_keyboard_manager.cc.
283 g_autoptr(FlKeyboardManagerData) data = FL_KEYBOARD_MANAGER_DATA(
user_data);
285 g_autoptr(GError)
error =
nullptr;
288 FL_KEY_CHANNEL_RESPONDER(
object), result, &handled, &
error)) {
289 if (!g_error_matches(
error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
290 g_warning(
"Failed to handle key event in platform: %s",
error->message);
295 g_autoptr(FlKeyboardManager)
self =
296 FL_KEYBOARD_MANAGER(g_weak_ref_get(&data->manager));
297 if (
self ==
nullptr) {
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().
◆ responder_handle_embedder_event_callback()
| static void responder_handle_embedder_event_callback |
( |
bool |
handled, |
|
|
gpointer |
user_data |
|
) |
| |
|
static |
◆ responder_handle_event_callback()
| static void responder_handle_event_callback |
( |
FlKeyboardManager * |
self, |
|
|
FlKeyboardPendingEvent * |
pending |
|
) |
| |
|
static |
uint64_t fl_keyboard_pending_event_get_hash(FlKeyboardPendingEvent *self)
static void responder_handle_embedder_event_callback(bool handled, gpointer user_data)
FlKeyEvent * fl_keyboard_pending_event_get_event(FlKeyboardPendingEvent *self)
void fl_key_embedder_responder_handle_event(FlKeyEmbedderResponder *self, FlKeyEvent *event, uint64_t specified_logical_key, FlKeyEmbedderResponderAsyncCallback callback, gpointer user_data)
const std::vector< LayoutGoal > layout_goals
static void guarantee_layout(FlKeyboardManager *self, FlKeyEvent *event)
static uint16_t convert_key_to_char(FlKeyboardManager *self, guint keycode, gint group, gint level)
static void responder_handle_channel_event_cb(GObject *object, GAsyncResult *result, gpointer user_data)
guint8 fl_key_event_get_group(FlKeyEvent *self)
GHashTable * fl_key_embedder_responder_get_pressed_state(FlKeyEmbedderResponder *self)
static void responder_handle_event_callback(FlKeyboardManager *self, FlKeyboardPendingEvent *pending)
FlKeyChannelResponder * fl_key_channel_responder_new(FlBinaryMessenger *messenger)
void fl_keyboard_pending_event_mark_channel_replied(FlKeyboardPendingEvent *self, gboolean handled)
static void fl_keyboard_manager_dispose(GObject *object)
static void keymap_keys_changed_cb(FlKeyboardManager *self)
static bool fl_keyboard_manager_remove_redispatched(FlKeyboardManager *self, uint64_t hash)
G_MODULE_EXPORT FlBinaryMessenger * fl_engine_get_binary_messenger(FlEngine *self)
void fl_engine_send_key_event(FlEngine *self, const FlutterKeyEvent *event, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
uint64_t fl_keyboard_layout_get_logical_key(FlKeyboardLayout *self, uint8_t group, uint16_t keycode)
GdkEvent * fl_key_event_get_origin(FlKeyEvent *self)
void fl_keyboard_layout_set_logical_key(FlKeyboardLayout *self, uint8_t group, uint16_t keycode, uint64_t logical_key)
static gboolean compare_pending_by_hash(gconstpointer a, gconstpointer b)
gboolean fl_keyboard_pending_event_is_complete(FlKeyboardPendingEvent *self)
G_BEGIN_DECLS G_MODULE_EXPORT FlValue gpointer user_data
void fl_keyboard_pending_event_mark_embedder_replied(FlKeyboardPendingEvent *self, gboolean handled)
gboolean fl_keyboard_pending_event_get_any_handled(FlKeyboardPendingEvent *self)
FlKeyEmbedderResponder * fl_key_embedder_responder_new(EmbedderSendKeyEvent send_key_event, void *send_key_event_user_data)
static void fl_keyboard_manager_data_dispose(GObject *object)
FlKeyboardLayout * fl_keyboard_layout_new()
static gboolean g_ptr_array_find_with_equal_func1(GPtrArray *haystack, gconstpointer needle, GEqualFunc equal_func, guint *index_)
void fl_key_channel_responder_handle_event(FlKeyChannelResponder *self, FlKeyEvent *event, uint64_t specified_logical_key, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
gboolean fl_keyboard_view_delegate_text_filter_key_press(FlKeyboardViewDelegate *self, FlKeyEvent *event)
void fl_key_embedder_responder_sync_modifiers_if_needed(FlKeyEmbedderResponder *responder, guint state, double event_time)
uint64_t fl_key_event_hash(FlKeyEvent *self)
guint16 fl_key_event_get_keycode(FlKeyEvent *self)
FlKeyboardPendingEvent * fl_keyboard_pending_event_new(FlKeyEvent *event)
gboolean fl_key_channel_responder_handle_event_finish(FlKeyChannelResponder *self, GAsyncResult *result, gboolean *handled, GError **error)
const uint8_t uint32_t uint32_t GError ** error
gboolean fl_keyboard_layout_has_group(FlKeyboardLayout *self, uint8_t group)
static FlKeyboardManagerData * fl_keyboard_manager_data_new(FlKeyboardManager *manager, FlKeyboardPendingEvent *pending)