18 G_DEFINE_TYPE(FlKeyChannelResponder, fl_key_channel_responder, G_TYPE_OBJECT)
25 g_autoptr(GTask) task = G_TASK(
user_data);
27 gboolean handled = FALSE;
28 g_autoptr(GError)
error =
nullptr;
30 g_warning(
"Unable to retrieve framework response: %s",
error->message);
33 gboolean* return_value = g_new0(gboolean, 1);
34 *return_value = handled;
35 g_task_return_pointer(task, return_value, g_free);
40 FlKeyChannelResponder*
self = FL_KEY_CHANNEL_RESPONDER(
object);
42 g_clear_object(&self->channel);
44 G_OBJECT_CLASS(fl_key_channel_responder_parent_class)->dispose(
object);
49 FlKeyChannelResponderClass* klass) {
60 FlBinaryMessenger* messenger) {
61 g_return_val_if_fail(FL_IS_BINARY_MESSENGER(messenger),
nullptr);
63 FlKeyChannelResponder*
self = FL_KEY_CHANNEL_RESPONDER(
64 g_object_new(fl_key_channel_responder_get_type(),
nullptr));
73 uint64_t specified_logical_key,
74 GCancellable* cancellable,
75 GAsyncReadyCallback callback,
77 g_return_if_fail(event !=
nullptr);
78 g_return_if_fail(callback !=
nullptr);
84 int64_t unicode_scalar_values =
113 static bool shift_lock_pressed = FALSE;
114 static bool caps_lock_pressed = FALSE;
115 static bool num_lock_pressed = FALSE;
117 case GDK_KEY_Num_Lock:
120 case GDK_KEY_Caps_Lock:
123 case GDK_KEY_Shift_Lock:
130 state |= (shift_lock_pressed || caps_lock_pressed) ? GDK_LOCK_MASK : 0x0;
131 state |= num_lock_pressed ? GDK_MOD2_MASK : 0x0;
135 unicode_scalar_values, specified_logical_key,
nullptr,
handle_response,
136 g_task_new(
self, cancellable, callback,
user_data));
140 FlKeyChannelResponder*
self,
141 GAsyncResult* result,
144 g_return_val_if_fail(g_task_is_valid(result,
self), FALSE);
146 g_autofree gboolean* return_value =
147 static_cast<gboolean*
>(g_task_propagate_pointer(G_TASK(result),
error));
148 if (return_value ==
nullptr) {
152 *handled = *return_value;