Flutter Engine
The Flutter Engine
Macros | Typedefs | Functions | Variables
fl_key_embedder_responder.h File Reference
#include <gdk/gdk.h>
#include <functional>
#include "flutter/shell/platform/linux/fl_key_responder.h"
#include "flutter/shell/platform/linux/fl_keyboard_manager.h"
#include "flutter/shell/platform/linux/public/flutter_linux/fl_binary_messenger.h"
#include "flutter/shell/platform/linux/public/flutter_linux/fl_value.h"

Go to the source code of this file.

Macros

#define FL_TYPE_KEY_EMBEDDER_RESPONDER   fl_key_embedder_responder_get_type()
 

Typedefs

typedef void(* EmbedderSendKeyEvent) (const FlutterKeyEvent *event, FlutterKeyEventCallback callback, void *callback_user_data, void *send_key_event_user_data)
 

Functions

 G_DECLARE_FINAL_TYPE (FlKeyEmbedderResponder, fl_key_embedder_responder, FL, KEY_EMBEDDER_RESPONDER, GObject)
 
FlKeyEmbedderResponder * fl_key_embedder_responder_new (EmbedderSendKeyEvent send_key_event, void *send_key_event_user_data)
 
void fl_key_embedder_responder_sync_modifiers_if_needed (FlKeyEmbedderResponder *responder, guint state, double event_time)
 
GHashTable * fl_key_embedder_responder_get_pressed_state (FlKeyEmbedderResponder *responder)
 

Variables

constexpr int kMaxConvertedKeyData = 3
 

Macro Definition Documentation

◆ FL_TYPE_KEY_EMBEDDER_RESPONDER

#define FL_TYPE_KEY_EMBEDDER_RESPONDER   fl_key_embedder_responder_get_type()

Definition at line 36 of file fl_key_embedder_responder.h.

Typedef Documentation

◆ EmbedderSendKeyEvent

typedef void(* EmbedderSendKeyEvent) (const FlutterKeyEvent *event, FlutterKeyEventCallback callback, void *callback_user_data, void *send_key_event_user_data)

Definition at line 29 of file fl_key_embedder_responder.h.

Function Documentation

◆ fl_key_embedder_responder_get_pressed_state()

GHashTable * fl_key_embedder_responder_get_pressed_state ( FlKeyEmbedderResponder *  responder)

fl_key_embedder_responder_get_pressed_state: @responder: the #FlKeyEmbedderResponder 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 895 of file fl_key_embedder_responder.cc.

896 {
897 return self->pressing_records;
898}

◆ fl_key_embedder_responder_new()

FlKeyEmbedderResponder * fl_key_embedder_responder_new ( EmbedderSendKeyEvent  send_key_event,
void *  send_key_event_user_data 
)

FlKeyEmbedderResponder:

A #FlKeyResponder that handles events by sending the converted events through the embedder API.

This class communicates with the HardwareKeyboard API in the framework. fl_key_embedder_responder_new: @engine: The #FlEngine, whose the embedder API will be used to send the event.

Creates a new #FlKeyEmbedderResponder. @send_key_event: a function that is called on every key event. @send_key_event_user_data: an opaque pointer that will be sent back as the last argument of send_key_event, created and managed by the object that holds FlKeyEmbedderResponder.

Returns: a new #FlKeyEmbedderResponder.

Definition at line 263 of file fl_key_embedder_responder.cc.

265 {
266 FlKeyEmbedderResponder* self = FL_KEY_EMBEDDER_RESPONDER(
267 g_object_new(FL_TYPE_EMBEDDER_RESPONDER_USER_DATA, nullptr));
268
269 self->send_key_event = send_key_event;
270 self->send_key_event_user_data = send_key_event_user_data;
271
272 self->pressing_records = g_hash_table_new(g_direct_hash, g_direct_equal);
273 self->mapping_records = g_hash_table_new(g_direct_hash, g_direct_equal);
274 self->lock_records = 0;
275 self->caps_lock_state_logic_inferrence = kStateLogicUndecided;
276
277 self->modifier_bit_to_checked_keys =
278 g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free);
279 initialize_modifier_bit_to_checked_keys(self->modifier_bit_to_checked_keys);
280
281 self->lock_bit_to_checked_keys =
282 g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, g_free);
283 initialize_lock_bit_to_checked_keys(self->lock_bit_to_checked_keys);
284
285 self->logical_key_to_lock_bit =
286 g_hash_table_new(g_direct_hash, g_direct_equal);
287 g_hash_table_foreach(self->lock_bit_to_checked_keys,
289 self->logical_key_to_lock_bit);
290
291 return self;
292}
#define FL_TYPE_EMBEDDER_RESPONDER_USER_DATA
static void initialize_logical_key_to_lock_bit_loop_body(gpointer lock_bit, gpointer value, gpointer user_data)
static void send_key_event(FlTextInputPlugin *plugin, gint keyval, gint state=0)
void initialize_modifier_bit_to_checked_keys(GHashTable *table)
void initialize_lock_bit_to_checked_keys(GHashTable *table)

◆ fl_key_embedder_responder_sync_modifiers_if_needed()

void fl_key_embedder_responder_sync_modifiers_if_needed ( FlKeyEmbedderResponder *  responder,
guint  state,
double  event_time 
)

fl_key_embedder_responder_sync_modifiers_if_needed: @responder: the #FlKeyEmbedderResponder 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 878 of file fl_key_embedder_responder.cc.

881 {
882 const double timestamp = event_time * kMicrosecondsPerMillisecond;
883
884 SyncStateLoopContext sync_state_context;
885 sync_state_context.self = responder;
886 sync_state_context.state = state;
887 sync_state_context.timestamp = timestamp;
888
889 // Update pressing states.
890 g_hash_table_foreach(responder->modifier_bit_to_checked_keys,
892 &sync_state_context);
893}
AtkStateType state
static void synchronize_pressed_states_loop_body(gpointer key, gpointer value, gpointer user_data)
constexpr uint64_t kMicrosecondsPerMillisecond

◆ G_DECLARE_FINAL_TYPE()

G_DECLARE_FINAL_TYPE ( FlKeyEmbedderResponder  ,
fl_key_embedder_responder  ,
FL  ,
KEY_EMBEDDER_RESPONDER  ,
GObject   
)

Variable Documentation

◆ kMaxConvertedKeyData

constexpr int kMaxConvertedKeyData = 3
constexpr

Definition at line 16 of file fl_key_embedder_responder.h.