Flutter Linux Embedder
fl_text_input_channel.cc File Reference

Go to the source code of this file.

Classes

struct  _FlTextInputChannel
 

Functions

static FlMethodResponse * update_config (FlTextInputChannel *self, FlValue *config_value)
 
static const gchar * text_affinity_to_string (FlTextAffinity affinity)
 
static void fl_text_input_parse_input_type_name (const gchar *input_type_name, FlTextInputType *input_type, GtkInputPurpose *im_purpose, GtkInputHints *im_hints)
 
static FlMethodResponse * set_client (FlTextInputChannel *self, FlValue *args)
 
static FlMethodResponse * hide (FlTextInputChannel *self)
 
static FlMethodResponse * show (FlTextInputChannel *self)
 
static FlMethodResponse * set_editing_state (FlTextInputChannel *self, FlValue *args)
 
static FlMethodResponse * clear_client (FlTextInputChannel *self)
 
static FlMethodResponse * set_editable_size_and_transform (FlTextInputChannel *self, FlValue *args)
 
static FlMethodResponse * set_marked_text_rect (FlTextInputChannel *self, FlValue *args)
 
static void method_call_cb (FlMethodChannel *channel, FlMethodCall *method_call, gpointer user_data)
 
static void fl_text_input_channel_dispose (GObject *object)
 
static void fl_text_input_channel_class_init (FlTextInputChannelClass *klass)
 
static void fl_text_input_channel_init (FlTextInputChannel *self)
 
FlTextInputChannel * fl_text_input_channel_new (FlBinaryMessenger *messenger, FlTextInputChannelVTable *vtable, gpointer user_data)
 
void fl_text_input_channel_update_editing_state (FlTextInputChannel *self, int64_t client_id, const gchar *text, int64_t selection_base, int64_t selection_extent, FlTextAffinity selection_affinity, gboolean selection_is_directional, int64_t composing_base, int64_t composing_extent, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
 
gboolean fl_text_input_channel_update_editing_state_finish (GObject *object, GAsyncResult *result, GError **error)
 
void fl_text_input_channel_update_editing_state_with_deltas (FlTextInputChannel *self, int64_t client_id, const gchar *old_text, const gchar *delta_text, int64_t delta_start, int64_t delta_end, int64_t selection_base, int64_t selection_extent, FlTextAffinity selection_affinity, gboolean selection_is_directional, int64_t composing_base, int64_t composing_extent, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
 
gboolean fl_text_input_channel_update_editing_state_with_deltas_finish (GObject *object, GAsyncResult *result, GError **error)
 
void fl_text_input_channel_perform_action (FlTextInputChannel *self, int64_t client_id, const gchar *input_action, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
 
gboolean fl_text_input_channel_perform_action_finish (GObject *object, GAsyncResult *result, GError **error)
 

Variables

static constexpr char kChannelName [] = "flutter/textinput"
 
static constexpr char kBadArgumentsError [] = "Bad Arguments"
 
static constexpr char kSetClientMethod [] = "TextInput.setClient"
 
static constexpr char kUpdateConfigMethod [] = "TextInput.updateConfig"
 
static constexpr char kShowMethod [] = "TextInput.show"
 
static constexpr char kSetEditingStateMethod [] = "TextInput.setEditingState"
 
static constexpr char kClearClientMethod [] = "TextInput.clearClient"
 
static constexpr char kHideMethod [] = "TextInput.hide"
 
static constexpr char kUpdateEditingStateMethod []
 
static constexpr char kUpdateEditingStateWithDeltasMethod []
 
static constexpr char kPerformActionMethod [] = "TextInputClient.performAction"
 
static constexpr char kSetEditableSizeAndTransform []
 
static constexpr char kSetMarkedTextRect [] = "TextInput.setMarkedTextRect"
 
static constexpr char kInputActionKey [] = "inputAction"
 
static constexpr char kTextInputTypeKey [] = "inputType"
 
static constexpr char kEnableDeltaModel [] = "enableDeltaModel"
 
static constexpr char kTextInputTypeNameKey [] = "name"
 
static constexpr char kTextKey [] = "text"
 
static constexpr char kSelectionBaseKey [] = "selectionBase"
 
static constexpr char kSelectionExtentKey [] = "selectionExtent"
 
static constexpr char kSelectionAffinityKey [] = "selectionAffinity"
 
static constexpr char kSelectionIsDirectionalKey [] = "selectionIsDirectional"
 
static constexpr char kComposingBaseKey [] = "composingBase"
 
static constexpr char kComposingExtentKey [] = "composingExtent"
 
static constexpr char kTransform [] = "transform"
 
static constexpr char kTextInputType [] = "TextInputType.text"
 
static constexpr char kMultilineInputType [] = "TextInputType.multiline"
 
static constexpr char kNumberInputType [] = "TextInputType.number"
 
static constexpr char kPhoneInputType [] = "TextInputType.phone"
 
static constexpr char kDatetimeInputType [] = "TextInputType.datetime"
 
static constexpr char kEmailAddressInputType [] = "TextInputType.emailAddress"
 
static constexpr char kUrlInputType [] = "TextInputType.url"
 
static constexpr char kPasswordInputType [] = "TextInputType.visiblePassword"
 
static constexpr char kNameInputType [] = "TextInputType.name"
 
static constexpr char kAddressInputType [] = "TextInputType.address"
 
static constexpr char kNoneInputType [] = "TextInputType.none"
 
static constexpr char kWebSearchInputType [] = "TextInputType.webSearch"
 
static constexpr char kTwitterInputType [] = "TextInputType.twitter"
 
static constexpr char kTextAffinityUpstream [] = "TextAffinity.upstream"
 
static constexpr char kTextAffinityDownstream [] = "TextAffinity.downstream"
 

Function Documentation

◆ clear_client()

static FlMethodResponse* clear_client ( FlTextInputChannel *  self)
static

Definition at line 215 of file fl_text_input_channel.cc.

215  {
216  self->vtable->clear_client(self->user_data);
217  return FL_METHOD_RESPONSE(fl_method_success_response_new(nullptr));
218 }
G_MODULE_EXPORT FlMethodSuccessResponse * fl_method_success_response_new(FlValue *result)

References fl_method_success_response_new().

Referenced by method_call_cb().

◆ fl_text_input_channel_class_init()

static void fl_text_input_channel_class_init ( FlTextInputChannelClass *  klass)
static

Definition at line 307 of file fl_text_input_channel.cc.

307  {
308  G_OBJECT_CLASS(klass)->dispose = fl_text_input_channel_dispose;
309 }
static void fl_text_input_channel_dispose(GObject *object)

References fl_text_input_channel_dispose().

◆ fl_text_input_channel_dispose()

static void fl_text_input_channel_dispose ( GObject *  object)
static

Definition at line 299 of file fl_text_input_channel.cc.

299  {
300  FlTextInputChannel* self = FL_TEXT_INPUT_CHANNEL(object);
301 
302  g_clear_object(&self->channel);
303 
304  G_OBJECT_CLASS(fl_text_input_channel_parent_class)->dispose(object);
305 }

Referenced by fl_text_input_channel_class_init().

◆ fl_text_input_channel_init()

static void fl_text_input_channel_init ( FlTextInputChannel *  self)
static

Definition at line 311 of file fl_text_input_channel.cc.

311 {}

◆ fl_text_input_channel_new()

FlTextInputChannel* fl_text_input_channel_new ( FlBinaryMessenger *  messenger,
FlTextInputChannelVTable vtable,
gpointer  user_data 
)

fl_text_input_channel_new: @messenger: an #FlBinaryMessenger. @vtable: callbacks for incoming method calls. @user_data: data to pass in callbacks.

Creates a new channel that implements SystemChannels.textInput from the Flutter services library.

Returns: a new #FlTextInputChannel.

Definition at line 313 of file fl_text_input_channel.cc.

315  {
316  g_return_val_if_fail(FL_IS_BINARY_MESSENGER(messenger), nullptr);
317  g_return_val_if_fail(vtable != nullptr, nullptr);
318 
319  FlTextInputChannel* self = FL_TEXT_INPUT_CHANNEL(
320  g_object_new(fl_text_input_channel_get_type(), nullptr));
321 
322  self->vtable = vtable;
323  self->user_data = user_data;
324 
325  g_autoptr(FlJsonMethodCodec) codec = fl_json_method_codec_new();
326  self->channel =
327  fl_method_channel_new(messenger, kChannelName, FL_METHOD_CODEC(codec));
329  nullptr);
330 
331  return self;
332 }
g_autoptr(FlEngine) engine
const char FlTextDirection FlAssertiveness gpointer user_data
G_MODULE_EXPORT FlJsonMethodCodec * fl_json_method_codec_new()
G_MODULE_EXPORT FlMethodChannel * fl_method_channel_new(FlBinaryMessenger *messenger, const gchar *name, FlMethodCodec *codec)
G_MODULE_EXPORT void fl_method_channel_set_method_call_handler(FlMethodChannel *self, FlMethodChannelMethodCallHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
static void method_call_cb(FlMethodChannel *channel, FlMethodCall *method_call, gpointer user_data)
static constexpr char kChannelName[]

References fl_json_method_codec_new(), fl_method_channel_new(), fl_method_channel_set_method_call_handler(), g_autoptr(), kChannelName, method_call_cb(), and user_data.

Referenced by fl_text_input_handler_new().

◆ fl_text_input_channel_perform_action()

void fl_text_input_channel_perform_action ( FlTextInputChannel *  channel,
int64_t  client_id,
const gchar *  input_action,
GCancellable *  cancellable,
GAsyncReadyCallback  callback,
gpointer  user_data 
)

fl_text_input_channel_perform_action: @channel: an #FlTextInputChannel. @client_id: @input_action: action to perform. @cancellable: (allow-none): a #GCancellable or NULL. @callback: (scope async): a #GAsyncReadyCallback to call when the method returns. @user_data: (closure): user data to pass to @callback.

Definition at line 452 of file fl_text_input_channel.cc.

457  {
458  g_return_if_fail(FL_IS_TEXT_INPUT_CHANNEL(self));
459 
463 
465  cancellable, callback, user_data);
466 }
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
G_MODULE_EXPORT void fl_method_channel_invoke_method(FlMethodChannel *self, const gchar *method, FlValue *args, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
static constexpr char kPerformActionMethod[]
G_MODULE_EXPORT FlValue * fl_value_new_string(const gchar *value)
Definition: fl_value.cc:276
G_MODULE_EXPORT FlValue * fl_value_new_list()
Definition: fl_value.cc:349
G_MODULE_EXPORT void fl_value_append_take(FlValue *self, FlValue *value)
Definition: fl_value.cc:600
G_MODULE_EXPORT FlValue * fl_value_new_int(int64_t value)
Definition: fl_value.cc:262
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition: fl_value.h:42

References args, fl_method_channel_invoke_method(), fl_value_append_take(), fl_value_new_int(), fl_value_new_list(), fl_value_new_string(), g_autoptr(), kPerformActionMethod, and user_data.

Referenced by perform_action().

◆ fl_text_input_channel_perform_action_finish()

gboolean fl_text_input_channel_perform_action_finish ( GObject *  object,
GAsyncResult *  result,
GError **  error 
)

fl_text_input_channel_perform_action_finish: @object:

Returns
: a #GAsyncResult. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Completes request started with fl_text_input_channel_perform_action().

Returns: TRUE on success.

Definition at line 468 of file fl_text_input_channel.cc.

470  {
471  g_autoptr(FlMethodResponse) response = fl_method_channel_invoke_method_finish(
472  FL_METHOD_CHANNEL(object), result, error);
473  if (response == nullptr) {
474  return FALSE;
475  }
476  return fl_method_response_get_result(response, error) != nullptr;
477 }
G_MODULE_EXPORT FlMethodResponse * fl_method_channel_invoke_method_finish(FlMethodChannel *self, GAsyncResult *result, GError **error)
G_MODULE_EXPORT FlValue * fl_method_response_get_result(FlMethodResponse *self, GError **error)
const uint8_t uint32_t uint32_t GError ** error

References error, fl_method_channel_invoke_method_finish(), fl_method_response_get_result(), and g_autoptr().

Referenced by perform_action_response_cb().

◆ fl_text_input_channel_update_editing_state()

void fl_text_input_channel_update_editing_state ( FlTextInputChannel *  channel,
int64_t  client_id,
const gchar *  text,
int64_t  selection_base,
int64_t  selection_extent,
FlTextAffinity  selection_affinity,
gboolean  selection_is_directional,
int64_t  composing_base,
int64_t  composing_extent,
GCancellable *  cancellable,
GAsyncReadyCallback  callback,
gpointer  user_data 
)

fl_text_input_channel_update_editing_state: @channel: an #FlTextInputChannel. @client_id: @text: @selection_base: @selection_extent: @selection_affinity: @selection_is_directional: @composing_base: @composing_extent: @cancellable: (allow-none): a #GCancellable or NULL. @callback: (scope async): a #GAsyncReadyCallback to call when the method returns. @user_data: (closure): user data to pass to @callback.

Definition at line 334 of file fl_text_input_channel.cc.

346  {
347  g_return_if_fail(FL_IS_TEXT_INPUT_CHANNEL(self));
348 
352 
355  fl_value_new_int(selection_base));
357  fl_value_new_int(selection_extent));
360  fl_value_new_string(text_affinity_to_string(selection_affinity)));
362  fl_value_new_bool(selection_is_directional));
364  fl_value_new_int(composing_base));
366  fl_value_new_int(composing_extent));
367 
369 
371  args, cancellable, callback, user_data);
372 }
uint8_t value
static constexpr char kSelectionIsDirectionalKey[]
static constexpr char kSelectionExtentKey[]
static const gchar * text_affinity_to_string(FlTextAffinity affinity)
static constexpr char kUpdateEditingStateMethod[]
static constexpr char kComposingExtentKey[]
static constexpr char kComposingBaseKey[]
static constexpr char kSelectionAffinityKey[]
static constexpr char kTextKey[]
static constexpr char kSelectionBaseKey[]
G_MODULE_EXPORT void fl_value_set_string_take(FlValue *self, const gchar *key, FlValue *value)
Definition: fl_value.cc:650
G_MODULE_EXPORT FlValue * fl_value_new_bool(bool value)
Definition: fl_value.cc:255
G_MODULE_EXPORT void fl_value_append(FlValue *self, FlValue *value)
Definition: fl_value.cc:592
G_MODULE_EXPORT FlValue * fl_value_new_map()
Definition: fl_value.cc:366

References args, fl_method_channel_invoke_method(), fl_value_append(), fl_value_append_take(), fl_value_new_bool(), fl_value_new_int(), fl_value_new_list(), fl_value_new_map(), fl_value_new_string(), fl_value_set_string_take(), g_autoptr(), kComposingBaseKey, kComposingExtentKey, kSelectionAffinityKey, kSelectionBaseKey, kSelectionExtentKey, kSelectionIsDirectionalKey, kTextKey, kUpdateEditingStateMethod, text_affinity_to_string(), user_data, and value.

Referenced by update_editing_state().

◆ fl_text_input_channel_update_editing_state_finish()

gboolean fl_text_input_channel_update_editing_state_finish ( GObject *  object,
GAsyncResult *  result,
GError **  error 
)

fl_text_input_channel_update_editing_state_finish: @object:

Returns
: a #GAsyncResult. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Completes request started with fl_text_input_channel_update_editing_state().

Returns: TRUE on success.

Definition at line 374 of file fl_text_input_channel.cc.

376  {
377  g_autoptr(FlMethodResponse) response = fl_method_channel_invoke_method_finish(
378  FL_METHOD_CHANNEL(object), result, error);
379  if (response == nullptr) {
380  return FALSE;
381  }
382  return fl_method_response_get_result(response, error) != nullptr;
383 }

References error, fl_method_channel_invoke_method_finish(), fl_method_response_get_result(), and g_autoptr().

Referenced by update_editing_state_response_cb().

◆ fl_text_input_channel_update_editing_state_with_deltas()

void fl_text_input_channel_update_editing_state_with_deltas ( FlTextInputChannel *  channel,
int64_t  client_id,
const gchar *  old_text,
const gchar *  delta_text,
int64_t  delta_start,
int64_t  delta_end,
int64_t  selection_base,
int64_t  selection_extent,
FlTextAffinity  selection_affinity,
gboolean  selection_is_directional,
int64_t  composing_base,
int64_t  composing_extent,
GCancellable *  cancellable,
GAsyncReadyCallback  callback,
gpointer  user_data 
)

fl_text_input_channel_update_editing_state_with_deltas: @channel: an #FlTextInputChannel. @client_id: @old_text: @delta_text: @delta_start: @delta_end: @selection_base: @selection_extent: @selection_affinity: @selection_is_directional: @composing_base: @composing_extent: @cancellable: (allow-none): a #GCancellable or NULL. @callback: (scope async): a #GAsyncReadyCallback to call when the method returns. @user_data: (closure): user data to pass to @callback.

Definition at line 385 of file fl_text_input_channel.cc.

400  {
401  g_return_if_fail(FL_IS_TEXT_INPUT_CHANNEL(self));
402 
405 
406  g_autoptr(FlValue) deltaValue = fl_value_new_map();
407  fl_value_set_string_take(deltaValue, "oldText",
408  fl_value_new_string(old_text));
409  fl_value_set_string_take(deltaValue, "deltaText",
410  fl_value_new_string(delta_text));
411  fl_value_set_string_take(deltaValue, "deltaStart",
412  fl_value_new_int(delta_start));
413  fl_value_set_string_take(deltaValue, "deltaEnd", fl_value_new_int(delta_end));
414  fl_value_set_string_take(deltaValue, "selectionBase",
415  fl_value_new_int(selection_base));
416  fl_value_set_string_take(deltaValue, "selectionExtent",
417  fl_value_new_int(selection_extent));
419  deltaValue, "selectionAffinity",
420  fl_value_new_string(text_affinity_to_string(selection_affinity)));
421  fl_value_set_string_take(deltaValue, "selectionIsDirectional",
422  fl_value_new_bool(selection_is_directional));
423  fl_value_set_string_take(deltaValue, "composingBase",
424  fl_value_new_int(composing_base));
425  fl_value_set_string_take(deltaValue, "composingExtent",
426  fl_value_new_int(composing_extent));
427 
428  g_autoptr(FlValue) deltas = fl_value_new_list();
429  fl_value_append(deltas, deltaValue);
431  fl_value_set_string(value, "deltas", deltas);
432 
434 
435  fl_method_channel_invoke_method(self->channel,
437  cancellable, callback, user_data);
438 }
static constexpr char kUpdateEditingStateWithDeltasMethod[]
G_MODULE_EXPORT void fl_value_set_string(FlValue *self, const gchar *key, FlValue *value)
Definition: fl_value.cc:639

References args, fl_method_channel_invoke_method(), fl_value_append(), fl_value_append_take(), fl_value_new_bool(), fl_value_new_int(), fl_value_new_list(), fl_value_new_map(), fl_value_new_string(), fl_value_set_string(), fl_value_set_string_take(), g_autoptr(), kUpdateEditingStateWithDeltasMethod, text_affinity_to_string(), user_data, and value.

Referenced by update_editing_state_with_delta().

◆ fl_text_input_channel_update_editing_state_with_deltas_finish()

gboolean fl_text_input_channel_update_editing_state_with_deltas_finish ( GObject *  object,
GAsyncResult *  result,
GError **  error 
)

fl_text_input_channel_update_editing_state_with_deltas_finish: @object:

Returns
: a #GAsyncResult. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore. If error is not NULL, *error must be initialized (typically NULL, but an error from a previous call using GLib error handling is explicitly valid).

Completes request started with fl_text_input_channel_update_editing_state_with_deltas().

Returns: TRUE on success.

Definition at line 440 of file fl_text_input_channel.cc.

443  {
444  g_autoptr(FlMethodResponse) response = fl_method_channel_invoke_method_finish(
445  FL_METHOD_CHANNEL(object), result, error);
446  if (response == nullptr) {
447  return FALSE;
448  }
449  return fl_method_response_get_result(response, error) != nullptr;
450 }

References error, fl_method_channel_invoke_method_finish(), fl_method_response_get_result(), and g_autoptr().

Referenced by update_editing_state_with_deltas_response_cb().

◆ fl_text_input_parse_input_type_name()

static void fl_text_input_parse_input_type_name ( const gchar *  input_type_name,
FlTextInputType input_type,
GtkInputPurpose *  im_purpose,
GtkInputHints *  im_hints 
)
static

Definition at line 86 of file fl_text_input_channel.cc.

89  {
90  if (input_type_name == nullptr) {
91  input_type_name = kTextInputType;
92  }
93 
94  if (g_strcmp0(input_type_name, kTextInputType) == 0) {
95  // default
96  } else if (g_strcmp0(input_type_name, kMultilineInputType) == 0) {
97  *im_hints = static_cast<GtkInputHints>(GTK_INPUT_HINT_SPELLCHECK |
98  GTK_INPUT_HINT_UPPERCASE_SENTENCES);
99  *input_type = FL_TEXT_INPUT_TYPE_MULTILINE;
100  } else if (g_strcmp0(input_type_name, kNumberInputType) == 0) {
101  *im_purpose = GTK_INPUT_PURPOSE_NUMBER;
102  } else if (g_strcmp0(input_type_name, kPhoneInputType) == 0) {
103  *im_purpose = GTK_INPUT_PURPOSE_PHONE;
104  } else if (g_strcmp0(input_type_name, kDatetimeInputType) == 0) {
105  // Not in GTK 3
106  } else if (g_strcmp0(input_type_name, kEmailAddressInputType) == 0) {
107  *im_purpose = GTK_INPUT_PURPOSE_EMAIL;
108  } else if (g_strcmp0(input_type_name, kUrlInputType) == 0) {
109  *im_purpose = GTK_INPUT_PURPOSE_URL;
110  } else if (g_strcmp0(input_type_name, kPasswordInputType) == 0) {
111  *im_purpose = GTK_INPUT_PURPOSE_PASSWORD;
112  } else if (g_strcmp0(input_type_name, kNameInputType) == 0) {
113  *im_purpose = GTK_INPUT_PURPOSE_NAME;
114  *im_hints = GTK_INPUT_HINT_UPPERCASE_WORDS;
115  } else if (g_strcmp0(input_type_name, kAddressInputType) == 0) {
116  *im_hints = GTK_INPUT_HINT_UPPERCASE_WORDS;
117  } else if (g_strcmp0(input_type_name, kNoneInputType) == 0) {
118  // keep defaults
119  *input_type = FL_TEXT_INPUT_TYPE_NONE;
120  } else if (g_strcmp0(input_type_name, kWebSearchInputType) == 0) {
121  *im_hints = GTK_INPUT_HINT_LOWERCASE;
122  } else if (g_strcmp0(input_type_name, kTwitterInputType) == 0) {
123  *im_hints = static_cast<GtkInputHints>(GTK_INPUT_HINT_SPELLCHECK |
124  GTK_INPUT_HINT_UPPERCASE_SENTENCES);
125  } else {
126  g_warning("Unhandled input type name: %s", input_type_name);
127  }
128 }
static constexpr char kNoneInputType[]
static constexpr char kAddressInputType[]
static constexpr char kTwitterInputType[]
static constexpr char kMultilineInputType[]
static constexpr char kPhoneInputType[]
static constexpr char kEmailAddressInputType[]
static constexpr char kUrlInputType[]
static constexpr char kTextInputType[]
static constexpr char kPasswordInputType[]
static constexpr char kWebSearchInputType[]
static constexpr char kDatetimeInputType[]
static constexpr char kNameInputType[]
static constexpr char kNumberInputType[]
@ FL_TEXT_INPUT_TYPE_MULTILINE
@ FL_TEXT_INPUT_TYPE_NONE

References FL_TEXT_INPUT_TYPE_MULTILINE, FL_TEXT_INPUT_TYPE_NONE, kAddressInputType, kDatetimeInputType, kEmailAddressInputType, kMultilineInputType, kNameInputType, kNoneInputType, kNumberInputType, kPasswordInputType, kPhoneInputType, kTextInputType, kTwitterInputType, kUrlInputType, and kWebSearchInputType.

Referenced by update_config().

◆ hide()

static FlMethodResponse* hide ( FlTextInputChannel *  self)
static

Definition at line 182 of file fl_text_input_channel.cc.

182  {
183  self->vtable->hide(self->user_data);
184  return FL_METHOD_RESPONSE(fl_method_success_response_new(nullptr));
185 }

References fl_method_success_response_new().

Referenced by method_call_cb().

◆ method_call_cb()

static void method_call_cb ( FlMethodChannel *  channel,
FlMethodCall *  method_call,
gpointer  user_data 
)
static

Definition at line 264 of file fl_text_input_channel.cc.

266  {
267  FlTextInputChannel* self = FL_TEXT_INPUT_CHANNEL(user_data);
268 
269  const gchar* method = fl_method_call_get_name(method_call);
271 
272  g_autoptr(FlMethodResponse) response = nullptr;
273  if (strcmp(method, kSetClientMethod) == 0) {
274  response = set_client(self, args);
275  } else if (strcmp(method, kShowMethod) == 0) {
276  response = show(self);
277  } else if (strcmp(method, kSetEditingStateMethod) == 0) {
278  response = set_editing_state(self, args);
279  } else if (strcmp(method, kClearClientMethod) == 0) {
280  response = clear_client(self);
281  } else if (strcmp(method, kHideMethod) == 0) {
282  response = hide(self);
283  } else if (strcmp(method, kSetEditableSizeAndTransform) == 0) {
284  response = set_editable_size_and_transform(self, args);
285  } else if (strcmp(method, kSetMarkedTextRect) == 0) {
286  response = set_marked_text_rect(self, args);
287  } else if (strcmp(method, kUpdateConfigMethod) == 0) {
288  response = update_config(self, args);
289  } else {
290  response = FL_METHOD_RESPONSE(fl_method_not_implemented_response_new());
291  }
292 
293  g_autoptr(GError) error = nullptr;
294  if (!fl_method_call_respond(method_call, response, &error)) {
295  g_warning("Failed to send method call response: %s", error->message);
296  }
297 }
G_MODULE_EXPORT gboolean fl_method_call_respond(FlMethodCall *self, FlMethodResponse *response, GError **error)
G_MODULE_EXPORT const gchar * fl_method_call_get_name(FlMethodCall *self)
G_MODULE_EXPORT FlValue * fl_method_call_get_args(FlMethodCall *self)
G_BEGIN_DECLS G_MODULE_EXPORT FlMethodCall * method_call
G_MODULE_EXPORT FlMethodNotImplementedResponse * fl_method_not_implemented_response_new()
static constexpr char kClearClientMethod[]
static constexpr char kSetEditableSizeAndTransform[]
static FlMethodResponse * set_editing_state(FlTextInputChannel *self, FlValue *args)
static constexpr char kSetMarkedTextRect[]
static constexpr char kHideMethod[]
static FlMethodResponse * set_editable_size_and_transform(FlTextInputChannel *self, FlValue *args)
static constexpr char kSetEditingStateMethod[]
static FlMethodResponse * hide(FlTextInputChannel *self)
static constexpr char kSetClientMethod[]
static constexpr char kShowMethod[]
static FlMethodResponse * set_client(FlTextInputChannel *self, FlValue *args)
static FlMethodResponse * show(FlTextInputChannel *self)
static constexpr char kUpdateConfigMethod[]
static FlMethodResponse * update_config(FlTextInputChannel *self, FlValue *config_value)
static FlMethodResponse * set_marked_text_rect(FlTextInputChannel *self, FlValue *args)
static FlMethodResponse * clear_client(FlTextInputChannel *self)

References args, clear_client(), error, fl_method_call_get_args(), fl_method_call_get_name(), fl_method_call_respond(), fl_method_not_implemented_response_new(), g_autoptr(), hide(), kClearClientMethod, kHideMethod, kSetClientMethod, kSetEditableSizeAndTransform, kSetEditingStateMethod, kSetMarkedTextRect, kShowMethod, kUpdateConfigMethod, method_call, set_client(), set_editable_size_and_transform(), set_editing_state(), set_marked_text_rect(), show(), update_config(), and user_data.

Referenced by fl_text_input_channel_new().

◆ set_client()

static FlMethodResponse* set_client ( FlTextInputChannel *  self,
FlValue args 
)
static

Definition at line 131 of file fl_text_input_channel.cc.

131  {
133  fl_value_get_length(args) < 2) {
134  return FL_METHOD_RESPONSE(fl_method_error_response_new(
135  kBadArgumentsError, "Expected 2-element list", nullptr));
136  }
137 
138  int64_t client_id = fl_value_get_int(fl_value_get_list_value(args, 0));
139  FlValue* config_value = fl_value_get_list_value(args, 1);
140 
141  self->vtable->set_client(client_id, self->user_data);
142 
143  return update_config(self, config_value);
144 }
G_MODULE_EXPORT FlMethodErrorResponse * fl_method_error_response_new(const gchar *code, const gchar *message, FlValue *details)
static constexpr char kBadArgumentsError[]
G_MODULE_EXPORT FlValue * fl_value_get_list_value(FlValue *self, size_t index)
Definition: fl_value.cc:776
G_MODULE_EXPORT int64_t fl_value_get_int(FlValue *self)
Definition: fl_value.cc:668
G_MODULE_EXPORT FlValueType fl_value_get_type(FlValue *self)
Definition: fl_value.cc:466
G_MODULE_EXPORT size_t fl_value_get_length(FlValue *self)
Definition: fl_value.cc:724
@ FL_VALUE_TYPE_LIST
Definition: fl_value.h:73

References args, fl_method_error_response_new(), fl_value_get_int(), fl_value_get_length(), fl_value_get_list_value(), fl_value_get_type(), FL_VALUE_TYPE_LIST, kBadArgumentsError, and update_config().

Referenced by method_call_cb().

◆ set_editable_size_and_transform()

static FlMethodResponse* set_editable_size_and_transform ( FlTextInputChannel *  self,
FlValue args 
)
static

Definition at line 226 of file fl_text_input_channel.cc.

228  {
229  FlValue* transform_value = fl_value_lookup_string(args, kTransform);
230  if (fl_value_get_length(transform_value) != 16) {
231  return FL_METHOD_RESPONSE(fl_method_error_response_new(
232  kBadArgumentsError, "Invalid transform", nullptr));
233  }
234 
235  double transform[16];
236  for (size_t i = 0; i < 16; i++) {
237  transform[i] =
238  fl_value_get_float(fl_value_get_list_value(transform_value, i));
239  }
240  self->vtable->set_editable_size_and_transform(transform, self->user_data);
241 
242  return FL_METHOD_RESPONSE(fl_method_success_response_new(nullptr));
243 }
static constexpr char kTransform[]
G_MODULE_EXPORT FlValue * fl_value_lookup_string(FlValue *self, const gchar *key)
Definition: fl_value.cc:811
G_MODULE_EXPORT double fl_value_get_float(FlValue *self)
Definition: fl_value.cc:675

References args, fl_method_error_response_new(), fl_method_success_response_new(), fl_value_get_float(), fl_value_get_length(), fl_value_get_list_value(), fl_value_lookup_string(), i, kBadArgumentsError, and kTransform.

Referenced by method_call_cb().

◆ set_editing_state()

static FlMethodResponse* set_editing_state ( FlTextInputChannel *  self,
FlValue args 
)
static

Definition at line 194 of file fl_text_input_channel.cc.

195  {
196  const gchar* text =
198  int64_t selection_base =
200  int64_t selection_extent =
202  int64_t composing_base =
204  int64_t composing_extent =
206 
207  self->vtable->set_editing_state(text, selection_base, selection_extent,
208  composing_base, composing_extent,
209  self->user_data);
210 
211  return FL_METHOD_RESPONSE(fl_method_success_response_new(nullptr));
212 }
G_MODULE_EXPORT const gchar * fl_value_get_string(FlValue *self)
Definition: fl_value.cc:682

References args, fl_method_success_response_new(), fl_value_get_int(), fl_value_get_string(), fl_value_lookup_string(), kComposingBaseKey, kComposingExtentKey, kSelectionBaseKey, kSelectionExtentKey, and kTextKey.

Referenced by method_call_cb().

◆ set_marked_text_rect()

static FlMethodResponse* set_marked_text_rect ( FlTextInputChannel *  self,
FlValue args 
)
static

Definition at line 251 of file fl_text_input_channel.cc.

252  {
257 
258  self->vtable->set_marked_text_rect(x, y, width, height, self->user_data);
259 
260  return FL_METHOD_RESPONSE(fl_method_success_response_new(nullptr));
261 }
self height
self width

References args, fl_method_success_response_new(), fl_value_get_float(), fl_value_lookup_string(), height, and width.

Referenced by method_call_cb().

◆ show()

static FlMethodResponse* show ( FlTextInputChannel *  self)
static

Definition at line 188 of file fl_text_input_channel.cc.

188  {
189  self->vtable->show(self->user_data);
190  return FL_METHOD_RESPONSE(fl_method_success_response_new(nullptr));
191 }

References fl_method_success_response_new().

Referenced by method_call_cb().

◆ text_affinity_to_string()

static const gchar* text_affinity_to_string ( FlTextAffinity  affinity)
static

Definition at line 75 of file fl_text_input_channel.cc.

75  {
76  switch (affinity) {
78  return kTextAffinityUpstream;
81  default:
82  g_assert_not_reached();
83  }
84 }
static constexpr char kTextAffinityUpstream[]
static constexpr char kTextAffinityDownstream[]
@ FL_TEXT_AFFINITY_DOWNSTREAM
@ FL_TEXT_AFFINITY_UPSTREAM

References FL_TEXT_AFFINITY_DOWNSTREAM, FL_TEXT_AFFINITY_UPSTREAM, kTextAffinityDownstream, and kTextAffinityUpstream.

Referenced by fl_text_input_channel_update_editing_state(), and fl_text_input_channel_update_editing_state_with_deltas().

◆ update_config()

static FlMethodResponse * update_config ( FlTextInputChannel *  self,
FlValue config_value 
)
static

Definition at line 146 of file fl_text_input_channel.cc.

147  {
148  const gchar* input_action = nullptr;
149  FlValue* input_action_value =
151  if (fl_value_get_type(input_action_value) == FL_VALUE_TYPE_STRING) {
152  input_action = fl_value_get_string(input_action_value);
153  }
154 
155  FlValue* enable_delta_model_value =
157  gboolean enable_delta_model = fl_value_get_bool(enable_delta_model_value);
158 
159  // Reset the input type, then set only if appropriate.
161  GtkInputPurpose im_purpose = GTK_INPUT_PURPOSE_FREE_FORM;
162  GtkInputHints im_hints = GTK_INPUT_HINT_NONE;
163  FlValue* input_type_value =
165  if (fl_value_get_type(input_type_value) == FL_VALUE_TYPE_MAP) {
166  FlValue* input_type_name_value =
168  if (fl_value_get_type(input_type_name_value) == FL_VALUE_TYPE_STRING) {
169  const gchar* input_type_name = fl_value_get_string(input_type_name_value);
170  fl_text_input_parse_input_type_name(input_type_name, &input_type,
171  &im_purpose, &im_hints);
172  }
173  }
174 
175  self->vtable->configure(input_action, enable_delta_model, input_type,
176  im_purpose, im_hints, self->user_data);
177 
178  return FL_METHOD_RESPONSE(fl_method_success_response_new(nullptr));
179 }
static constexpr char kEnableDeltaModel[]
static void fl_text_input_parse_input_type_name(const gchar *input_type_name, FlTextInputType *input_type, GtkInputPurpose *im_purpose, GtkInputHints *im_hints)
static constexpr char kTextInputTypeNameKey[]
static constexpr char kTextInputTypeKey[]
static constexpr char kInputActionKey[]
@ FL_TEXT_INPUT_TYPE_TEXT
G_MODULE_EXPORT bool fl_value_get_bool(FlValue *self)
Definition: fl_value.cc:661
@ FL_VALUE_TYPE_STRING
Definition: fl_value.h:68
@ FL_VALUE_TYPE_MAP
Definition: fl_value.h:74

References fl_method_success_response_new(), fl_text_input_parse_input_type_name(), FL_TEXT_INPUT_TYPE_TEXT, fl_value_get_bool(), fl_value_get_string(), fl_value_get_type(), fl_value_lookup_string(), FL_VALUE_TYPE_MAP, FL_VALUE_TYPE_STRING, kEnableDeltaModel, kInputActionKey, kTextInputTypeKey, and kTextInputTypeNameKey.

Referenced by method_call_cb(), and set_client().

Variable Documentation

◆ kAddressInputType

constexpr char kAddressInputType[] = "TextInputType.address"
staticconstexpr

Definition at line 52 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kBadArgumentsError

constexpr char kBadArgumentsError[] = "Bad Arguments"
staticconstexpr

Definition at line 12 of file fl_text_input_channel.cc.

Referenced by set_client(), and set_editable_size_and_transform().

◆ kChannelName

constexpr char kChannelName[] = "flutter/textinput"
staticconstexpr

Definition at line 10 of file fl_text_input_channel.cc.

Referenced by fl_text_input_channel_new().

◆ kClearClientMethod

constexpr char kClearClientMethod[] = "TextInput.clearClient"
staticconstexpr

Definition at line 18 of file fl_text_input_channel.cc.

Referenced by method_call_cb().

◆ kComposingBaseKey

constexpr char kComposingBaseKey[] = "composingBase"
staticconstexpr

◆ kComposingExtentKey

constexpr char kComposingExtentKey[] = "composingExtent"
staticconstexpr

◆ kDatetimeInputType

constexpr char kDatetimeInputType[] = "TextInputType.datetime"
staticconstexpr

Definition at line 47 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kEmailAddressInputType

constexpr char kEmailAddressInputType[] = "TextInputType.emailAddress"
staticconstexpr

Definition at line 48 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kEnableDeltaModel

constexpr char kEnableDeltaModel[] = "enableDeltaModel"
staticconstexpr

Definition at line 31 of file fl_text_input_channel.cc.

Referenced by update_config().

◆ kHideMethod

constexpr char kHideMethod[] = "TextInput.hide"
staticconstexpr

Definition at line 19 of file fl_text_input_channel.cc.

Referenced by method_call_cb().

◆ kInputActionKey

constexpr char kInputActionKey[] = "inputAction"
staticconstexpr

Definition at line 29 of file fl_text_input_channel.cc.

Referenced by update_config().

◆ kMultilineInputType

constexpr char kMultilineInputType[] = "TextInputType.multiline"
staticconstexpr

Definition at line 44 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kNameInputType

constexpr char kNameInputType[] = "TextInputType.name"
staticconstexpr

Definition at line 51 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kNoneInputType

constexpr char kNoneInputType[] = "TextInputType.none"
staticconstexpr

Definition at line 53 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kNumberInputType

constexpr char kNumberInputType[] = "TextInputType.number"
staticconstexpr

Definition at line 45 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kPasswordInputType

constexpr char kPasswordInputType[] = "TextInputType.visiblePassword"
staticconstexpr

Definition at line 50 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kPerformActionMethod

constexpr char kPerformActionMethod[] = "TextInputClient.performAction"
staticconstexpr

Definition at line 24 of file fl_text_input_channel.cc.

Referenced by fl_text_input_channel_perform_action().

◆ kPhoneInputType

constexpr char kPhoneInputType[] = "TextInputType.phone"
staticconstexpr

Definition at line 46 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kSelectionAffinityKey

constexpr char kSelectionAffinityKey[] = "selectionAffinity"
staticconstexpr

Definition at line 36 of file fl_text_input_channel.cc.

Referenced by fl_text_input_channel_update_editing_state().

◆ kSelectionBaseKey

constexpr char kSelectionBaseKey[] = "selectionBase"
staticconstexpr

◆ kSelectionExtentKey

constexpr char kSelectionExtentKey[] = "selectionExtent"
staticconstexpr

◆ kSelectionIsDirectionalKey

constexpr char kSelectionIsDirectionalKey[] = "selectionIsDirectional"
staticconstexpr

Definition at line 37 of file fl_text_input_channel.cc.

Referenced by fl_text_input_channel_update_editing_state().

◆ kSetClientMethod

constexpr char kSetClientMethod[] = "TextInput.setClient"
staticconstexpr

Definition at line 14 of file fl_text_input_channel.cc.

Referenced by method_call_cb().

◆ kSetEditableSizeAndTransform

constexpr char kSetEditableSizeAndTransform[]
staticconstexpr
Initial value:
=
"TextInput.setEditableSizeAndTransform"

Definition at line 25 of file fl_text_input_channel.cc.

Referenced by method_call_cb().

◆ kSetEditingStateMethod

constexpr char kSetEditingStateMethod[] = "TextInput.setEditingState"
staticconstexpr

Definition at line 17 of file fl_text_input_channel.cc.

Referenced by method_call_cb().

◆ kSetMarkedTextRect

constexpr char kSetMarkedTextRect[] = "TextInput.setMarkedTextRect"
staticconstexpr

Definition at line 27 of file fl_text_input_channel.cc.

Referenced by method_call_cb().

◆ kShowMethod

constexpr char kShowMethod[] = "TextInput.show"
staticconstexpr

Definition at line 16 of file fl_text_input_channel.cc.

Referenced by method_call_cb().

◆ kTextAffinityDownstream

constexpr char kTextAffinityDownstream[] = "TextAffinity.downstream"
staticconstexpr

Definition at line 58 of file fl_text_input_channel.cc.

Referenced by text_affinity_to_string().

◆ kTextAffinityUpstream

constexpr char kTextAffinityUpstream[] = "TextAffinity.upstream"
staticconstexpr

Definition at line 57 of file fl_text_input_channel.cc.

Referenced by text_affinity_to_string().

◆ kTextInputType

constexpr char kTextInputType[] = "TextInputType.text"
staticconstexpr

Definition at line 43 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kTextInputTypeKey

constexpr char kTextInputTypeKey[] = "inputType"
staticconstexpr

Definition at line 30 of file fl_text_input_channel.cc.

Referenced by update_config().

◆ kTextInputTypeNameKey

constexpr char kTextInputTypeNameKey[] = "name"
staticconstexpr

Definition at line 32 of file fl_text_input_channel.cc.

Referenced by update_config().

◆ kTextKey

constexpr char kTextKey[] = "text"
staticconstexpr

◆ kTransform

constexpr char kTransform[] = "transform"
staticconstexpr

Definition at line 41 of file fl_text_input_channel.cc.

Referenced by set_editable_size_and_transform().

◆ kTwitterInputType

constexpr char kTwitterInputType[] = "TextInputType.twitter"
staticconstexpr

Definition at line 55 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kUpdateConfigMethod

constexpr char kUpdateConfigMethod[] = "TextInput.updateConfig"
staticconstexpr

Definition at line 15 of file fl_text_input_channel.cc.

Referenced by method_call_cb().

◆ kUpdateEditingStateMethod

constexpr char kUpdateEditingStateMethod[]
staticconstexpr
Initial value:
=
"TextInputClient.updateEditingState"

Definition at line 20 of file fl_text_input_channel.cc.

Referenced by fl_text_input_channel_update_editing_state().

◆ kUpdateEditingStateWithDeltasMethod

constexpr char kUpdateEditingStateWithDeltasMethod[]
staticconstexpr
Initial value:
=
"TextInputClient.updateEditingStateWithDeltas"

Definition at line 22 of file fl_text_input_channel.cc.

Referenced by fl_text_input_channel_update_editing_state_with_deltas().

◆ kUrlInputType

constexpr char kUrlInputType[] = "TextInputType.url"
staticconstexpr

Definition at line 49 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().

◆ kWebSearchInputType

constexpr char kWebSearchInputType[] = "TextInputType.webSearch"
staticconstexpr

Definition at line 54 of file fl_text_input_channel.cc.

Referenced by fl_text_input_parse_input_type_name().