Flutter Linux Embedder
fl_key_embedder_responder.h File Reference

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 896 of file fl_key_embedder_responder.cc.

897  {
898  return self->pressing_records;
899 }

Referenced by fl_keyboard_handler_get_pressed_state().

◆ 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 }

References FL_TYPE_EMBEDDER_RESPONDER_USER_DATA, initialize_lock_bit_to_checked_keys(), initialize_logical_key_to_lock_bit_loop_body(), initialize_modifier_bit_to_checked_keys(), and send_key_event().

Referenced by fl_keyboard_handler_new(), and TEST().

◆ 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 879 of file fl_key_embedder_responder.cc.

882  {
883  const double timestamp = event_time * kMicrosecondsPerMillisecond;
884 
885  SyncStateLoopContext sync_state_context;
886  sync_state_context.self = responder;
887  sync_state_context.state = state;
888  sync_state_context.timestamp = timestamp;
889 
890  // Update pressing states.
891  g_hash_table_foreach(responder->modifier_bit_to_checked_keys,
893  &sync_state_context);
894 }

References kMicrosecondsPerMillisecond, state, and synchronize_pressed_states_loop_body().

Referenced by fl_keyboard_handler_sync_modifier_if_needed().

◆ 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.

FL_TYPE_EMBEDDER_RESPONDER_USER_DATA
#define FL_TYPE_EMBEDDER_RESPONDER_USER_DATA
Definition: fl_key_embedder_responder.cc:204
synchronize_pressed_states_loop_body
static void synchronize_pressed_states_loop_body(gpointer key, gpointer value, gpointer user_data)
Definition: fl_key_embedder_responder.cc:444
state
AtkStateType state
Definition: fl_accessible_node.cc:10
initialize_modifier_bit_to_checked_keys
void initialize_modifier_bit_to_checked_keys(GHashTable *table)
Definition: key_mapping.g.cc:414
initialize_lock_bit_to_checked_keys
void initialize_lock_bit_to_checked_keys(GHashTable *table)
Definition: key_mapping.g.cc:446
kMicrosecondsPerMillisecond
constexpr uint64_t kMicrosecondsPerMillisecond
Definition: fl_key_embedder_responder.cc:14
send_key_event
static void send_key_event(FlTextInputHandler *handler, gint keyval, gint state=0)
Definition: fl_text_input_handler_test.cc:181
initialize_logical_key_to_lock_bit_loop_body
static void initialize_logical_key_to_lock_bit_loop_body(gpointer lock_bit, gpointer value, gpointer user_data)
Definition: fl_key_embedder_responder.cc:251