Flutter Engine
 
Loading...
Searching...
No Matches
fl_key_event_channel.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
9
10static constexpr char kChannelName[] = "flutter/keyevent";
11static constexpr char kTypeKey[] = "type";
12static constexpr char kTypeValueUp[] = "keyup";
13static constexpr char kTypeValueDown[] = "keydown";
14static constexpr char kKeymapKey[] = "keymap";
15static constexpr char kKeyCodeKey[] = "keyCode";
16static constexpr char kScanCodeKey[] = "scanCode";
17static constexpr char kModifiersKey[] = "modifiers";
18static constexpr char kToolkitKey[] = "toolkit";
19static constexpr char kSpecifiedLogicalKey[] = "specifiedLogicalKey";
20static constexpr char kUnicodeScalarValuesKey[] = "unicodeScalarValues";
21
22static constexpr char kGtkToolkit[] = "gtk";
23static constexpr char kLinuxKeymap[] = "linux";
24
25static constexpr int64_t kUnicodeScalarValuesUnset = 0;
26static constexpr int64_t kSpecifiedLogicalKeyUnset = 0;
27
30
31 FlBasicMessageChannel* channel;
32};
33
34G_DEFINE_TYPE(FlKeyEventChannel, fl_key_event_channel, G_TYPE_OBJECT)
35
36static void fl_key_event_channel_dispose(GObject* object) {
37 FlKeyEventChannel* self = FL_KEY_EVENT_CHANNEL(object);
38
39 g_clear_object(&self->channel);
40
41 G_OBJECT_CLASS(fl_key_event_channel_parent_class)->dispose(object);
42}
43
44static void fl_key_event_channel_class_init(FlKeyEventChannelClass* klass) {
45 G_OBJECT_CLASS(klass)->dispose = fl_key_event_channel_dispose;
46}
47
48static void fl_key_event_channel_init(FlKeyEventChannel* self) {}
49
50FlKeyEventChannel* fl_key_event_channel_new(FlBinaryMessenger* messenger) {
51 g_return_val_if_fail(FL_IS_BINARY_MESSENGER(messenger), nullptr);
52
53 FlKeyEventChannel* self = FL_KEY_EVENT_CHANNEL(
54 g_object_new(fl_key_event_channel_get_type(), nullptr));
55
56 g_autoptr(FlJsonMessageCodec) codec = fl_json_message_codec_new();
58 FL_MESSAGE_CODEC(codec));
59
60 return self;
61}
62
63void fl_key_event_channel_send(FlKeyEventChannel* self,
65 int64_t scan_code,
66 int64_t key_code,
67 int64_t modifiers,
68 int64_t unicode_scalar_values,
69 int64_t specified_logical_key,
70 GCancellable* cancellable,
71 GAsyncReadyCallback callback,
72 gpointer user_data) {
73 g_return_if_fail(FL_IS_KEY_EVENT_CHANNEL(self));
74
75 const gchar* type_string;
76 switch (type) {
78 type_string = kTypeValueUp;
79 break;
81 type_string = kTypeValueDown;
82 break;
83 default:
84 g_assert_not_reached();
85 }
86
96 if (unicode_scalar_values != kUnicodeScalarValuesUnset) {
98 fl_value_new_int(unicode_scalar_values));
99 }
100 if (specified_logical_key != kSpecifiedLogicalKeyUnset) {
102 fl_value_new_int(specified_logical_key));
103 }
104 fl_basic_message_channel_send(self->channel, message, cancellable, callback,
105 user_data);
106}
107
108gboolean fl_key_event_channel_send_finish(GObject* object,
109 GAsyncResult* result,
110 gboolean* handled,
111 GError** error) {
113 FL_BASIC_MESSAGE_CHANNEL(object), result, error);
114 if (message == nullptr) {
115 return FALSE;
116 }
117
118 FlValue* handled_value = fl_value_lookup_string(message, "handled");
119 *handled = fl_value_get_bool(handled_value);
120
121 return TRUE;
122}
GLenum type
G_MODULE_EXPORT FlBasicMessageChannel * fl_basic_message_channel_new(FlBinaryMessenger *messenger, const gchar *name, FlMessageCodec *codec)
G_MODULE_EXPORT FlValue * fl_basic_message_channel_send_finish(FlBasicMessageChannel *self, GAsyncResult *result, GError **error)
G_MODULE_EXPORT void fl_basic_message_channel_send(FlBasicMessageChannel *self, FlValue *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
G_DEFINE_TYPE(FlBasicMessageChannelResponseHandle, fl_basic_message_channel_response_handle, G_TYPE_OBJECT) static void fl_basic_message_channel_response_handle_dispose(GObject *object)
g_autoptr(GMutexLocker) locker
return TRUE
G_MODULE_EXPORT FlJsonMessageCodec * fl_json_message_codec_new()
static constexpr char kScanCodeKey[]
static void fl_key_event_channel_class_init(FlKeyEventChannelClass *klass)
static constexpr char kToolkitKey[]
static constexpr int64_t kSpecifiedLogicalKeyUnset
static constexpr char kTypeKey[]
static void fl_key_event_channel_init(FlKeyEventChannel *self)
static constexpr char kGtkToolkit[]
static constexpr int64_t kUnicodeScalarValuesUnset
FlKeyEventChannel * fl_key_event_channel_new(FlBinaryMessenger *messenger)
static constexpr char kChannelName[]
gboolean fl_key_event_channel_send_finish(GObject *object, GAsyncResult *result, gboolean *handled, GError **error)
static constexpr char kModifiersKey[]
static constexpr char kSpecifiedLogicalKey[]
static constexpr char kLinuxKeymap[]
static void fl_key_event_channel_dispose(GObject *object)
static constexpr char kKeyCodeKey[]
static constexpr char kUnicodeScalarValuesKey[]
static constexpr char kKeymapKey[]
void fl_key_event_channel_send(FlKeyEventChannel *self, FlKeyEventType type, int64_t scan_code, int64_t key_code, int64_t modifiers, int64_t unicode_scalar_values, int64_t specified_logical_key, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
static constexpr char kTypeValueUp[]
static constexpr char kTypeValueDown[]
@ FL_KEY_EVENT_TYPE_KEYDOWN
@ FL_KEY_EVENT_TYPE_KEYUP
G_BEGIN_DECLS GBytes * message
const uint8_t uint32_t uint32_t GError ** error
G_MODULE_EXPORT FlValue * fl_value_new_map()
Definition fl_value.cc:366
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_lookup_string(FlValue *self, const gchar *key)
Definition fl_value.cc:811
G_MODULE_EXPORT FlValue * fl_value_new_string(const gchar *value)
Definition fl_value.cc:276
G_MODULE_EXPORT FlValue * fl_value_new_int(int64_t value)
Definition fl_value.cc:262
G_MODULE_EXPORT bool fl_value_get_bool(FlValue *self)
Definition fl_value.cc:661
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition fl_value.h:42
FlutterDesktopBinaryReply callback
FlBasicMessageChannel * channel