Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions ci/licenses_golden/licenses_flutter
Original file line number Diff line number Diff line change
Expand Up @@ -44791,8 +44791,6 @@ ORIGIN: ../../../flutter/shell/platform/linux/fl_key_embedder_responder_private.
ORIGIN: ../../../flutter/shell/platform/linux/fl_key_embedder_responder_test.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/shell/platform/linux/fl_key_event.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/shell/platform/linux/fl_key_event.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/shell/platform/linux/fl_key_responder.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/shell/platform/linux/fl_key_responder.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/shell/platform/linux/fl_keyboard_handler.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/shell/platform/linux/fl_keyboard_handler.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/shell/platform/linux/fl_keyboard_handler_test.cc + ../../../flutter/LICENSE
Expand Down Expand Up @@ -47694,8 +47692,6 @@ FILE: ../../../flutter/shell/platform/linux/fl_key_embedder_responder_private.h
FILE: ../../../flutter/shell/platform/linux/fl_key_embedder_responder_test.cc
FILE: ../../../flutter/shell/platform/linux/fl_key_event.cc
FILE: ../../../flutter/shell/platform/linux/fl_key_event.h
FILE: ../../../flutter/shell/platform/linux/fl_key_responder.cc
FILE: ../../../flutter/shell/platform/linux/fl_key_responder.h
FILE: ../../../flutter/shell/platform/linux/fl_keyboard_handler.cc
FILE: ../../../flutter/shell/platform/linux/fl_keyboard_handler.h
FILE: ../../../flutter/shell/platform/linux/fl_keyboard_handler_test.cc
Expand Down
2 changes: 0 additions & 2 deletions shell/platform/linux/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ source_set("flutter_linux_sources") {
"fl_keyboard_pending_event.h",
"fl_keyboard_view_delegate.h",
"fl_key_event.h",
"fl_key_responder.h",
"fl_key_channel_responder.h",
"fl_key_embedder_responder.h",
"fl_key_embedder_responder_private.h",
Expand Down Expand Up @@ -116,7 +115,6 @@ source_set("flutter_linux_sources") {
"fl_key_channel_responder.cc",
"fl_key_embedder_responder.cc",
"fl_key_event.cc",
"fl_key_responder.cc",
"fl_keyboard_handler.cc",
"fl_keyboard_layout.cc",
"fl_keyboard_manager.cc",
Expand Down
1 change: 0 additions & 1 deletion shell/platform/linux/fl_accessible_node.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ G_BEGIN_DECLS
G_DEFINE_AUTOPTR_CLEANUP_FUNC(AtkObject, g_object_unref)
#endif

#define FL_TYPE_ACCESSIBLE_NODE fl_accessible_node_get_type()
G_DECLARE_DERIVABLE_TYPE(FlAccessibleNode,
fl_accessible_node,
FL,
Expand Down
2 changes: 1 addition & 1 deletion shell/platform/linux/fl_accessible_text_field.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ static void fl_accessible_editable_text_iface_init(AtkEditableTextIface* iface);
G_DEFINE_TYPE_WITH_CODE(
FlAccessibleTextField,
fl_accessible_text_field,
FL_TYPE_ACCESSIBLE_NODE,
fl_accessible_node_get_type(),
G_IMPLEMENT_INTERFACE(ATK_TYPE_TEXT, fl_accessible_text_iface_init)
G_IMPLEMENT_INTERFACE(ATK_TYPE_EDITABLE_TEXT,
fl_accessible_editable_text_iface_init))
Expand Down
35 changes: 6 additions & 29 deletions shell/platform/linux/fl_key_channel_responder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ struct _FlKeyChannelUserData {
// The current responder.
GWeakRef responder;
// The callback provided by the caller #FlKeyboardHandler.
FlKeyResponderAsyncCallback callback;
FlKeyChannelResponderAsyncCallback callback;
// The user_data provided by the caller #FlKeyboardHandler.
gpointer user_data;
};
Expand Down Expand Up @@ -76,7 +76,7 @@ static void fl_key_channel_user_data_init(FlKeyChannelUserData* self) {}
// The callback and the user_data might be nullptr.
static FlKeyChannelUserData* fl_key_channel_user_data_new(
FlKeyChannelResponder* responder,
FlKeyResponderAsyncCallback callback,
FlKeyChannelResponderAsyncCallback callback,
gpointer user_data) {
FlKeyChannelUserData* self = FL_KEY_CHANNEL_USER_DATA(
g_object_new(fl_key_channel_user_data_get_type(), nullptr));
Expand All @@ -98,28 +98,7 @@ struct _FlKeyChannelResponder {
FlKeyChannelResponderMock* mock;
};

static void fl_key_channel_responder_iface_init(FlKeyResponderInterface* iface);

G_DEFINE_TYPE_WITH_CODE(
FlKeyChannelResponder,
fl_key_channel_responder,
G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE(FL_TYPE_KEY_RESPONDER,
fl_key_channel_responder_iface_init))

static void fl_key_channel_responder_handle_event(
FlKeyResponder* responder,
FlKeyEvent* event,
uint64_t specified_logical_key,
FlKeyResponderAsyncCallback callback,
gpointer user_data);

static void fl_key_channel_responder_iface_init(
FlKeyResponderInterface* iface) {
iface->handle_event = fl_key_channel_responder_handle_event;
}

/* Implement FlKeyChannelResponder */
G_DEFINE_TYPE(FlKeyChannelResponder, fl_key_channel_responder, G_TYPE_OBJECT)

// Handles a response from the method channel to a key event sent to the
// framework earlier.
Expand Down Expand Up @@ -194,14 +173,12 @@ FlKeyChannelResponder* fl_key_channel_responder_new(
return self;
}

// Sends a key event to the framework.
static void fl_key_channel_responder_handle_event(
FlKeyResponder* responder,
void fl_key_channel_responder_handle_event(
FlKeyChannelResponder* self,
FlKeyEvent* event,
uint64_t specified_logical_key,
FlKeyResponderAsyncCallback callback,
FlKeyChannelResponderAsyncCallback callback,
gpointer user_data) {
FlKeyChannelResponder* self = FL_KEY_CHANNEL_RESPONDER(responder);
g_return_if_fail(event != nullptr);
g_return_if_fail(callback != nullptr);

Expand Down
40 changes: 35 additions & 5 deletions shell/platform/linux/fl_key_channel_responder.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
#ifndef FLUTTER_SHELL_PLATFORM_LINUX_FL_KEY_CHANNEL_RESPONDER_H_
#define FLUTTER_SHELL_PLATFORM_LINUX_FL_KEY_CHANNEL_RESPONDER_H_

#include <gdk/gdk.h>

#include "flutter/shell/platform/linux/fl_key_responder.h"
#include "flutter/shell/platform/linux/fl_keyboard_handler.h"
#include "flutter/shell/platform/linux/fl_key_event.h"
#include "flutter/shell/platform/linux/public/flutter_linux/fl_binary_messenger.h"
#include "flutter/shell/platform/linux/public/flutter_linux/fl_value.h"

Expand Down Expand Up @@ -37,13 +34,24 @@ typedef struct _FlKeyChannelResponderMock {

G_BEGIN_DECLS

#define FL_TYPE_KEY_CHANNEL_RESPONDER fl_key_channel_responder_get_type()
G_DECLARE_FINAL_TYPE(FlKeyChannelResponder,
fl_key_channel_responder,
FL,
KEY_CHANNEL_RESPONDER,
GObject);

/**
* FlKeyChannelResponderAsyncCallback:
* @event: whether the event has been handled.
* @user_data: the same value as user_data sent by
* #fl_key_responder_handle_event.
*
* The signature for a callback with which a #FlKeyChannelResponder
*asynchronously reports whether the responder handles the event.
**/
typedef void (*FlKeyChannelResponderAsyncCallback)(bool handled,
gpointer user_data);

/**
* FlKeyChannelResponder:
*
Expand All @@ -66,6 +74,28 @@ FlKeyChannelResponder* fl_key_channel_responder_new(
FlBinaryMessenger* messenger,
FlKeyChannelResponderMock* mock = nullptr);

/**
* fl_key_channel_responder_handle_event:
* @responder: the #FlKeyChannelResponder self.
* @event: the event to be handled. Must not be null. The object is managed by
* callee and must not be assumed available after this function.
* @specified_logical_key:
* @callback: the callback to report the result. It should be called exactly
* once. Must not be null.
* @user_data: a value that will be sent back in the callback. Can be null.
*
* Let the responder handle an event, expecting the responder to report
* whether to handle the event. The result will be reported by invoking
* `callback` exactly once, which might happen after
* `fl_key_channel_responder_handle_event` or during it.
*/
void fl_key_channel_responder_handle_event(
FlKeyChannelResponder* responder,
FlKeyEvent* event,
uint64_t specified_logical_key,
FlKeyChannelResponderAsyncCallback callback,
gpointer user_data);

G_END_DECLS

#endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_KEY_CHANNEL_RESPONDER_H_
35 changes: 20 additions & 15 deletions shell/platform/linux/fl_key_channel_responder_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,13 @@ TEST(FlKeyChannelResponderTest, SendKeyEvent) {
.value_converter = echo_response_cb,
.channel_name = "test/echo",
};
g_autoptr(FlKeyResponder) responder =
FL_KEY_RESPONDER(fl_key_channel_responder_new(messenger, &mock));
g_autoptr(FlKeyChannelResponder) responder =
fl_key_channel_responder_new(messenger, &mock);

g_autoptr(FlKeyEvent) event1 = fl_key_event_new(
12345, TRUE, 0x04, GDK_KEY_A, static_cast<GdkModifierType>(0), 0);
fl_key_responder_handle_event(responder, event1, responder_callback, loop);
fl_key_channel_responder_handle_event(responder, event1, 0,
responder_callback, loop);
expected_value =
"{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, keyCode: 65, "
"modifiers: 0, unicodeScalarValues: 65}";
Expand All @@ -55,7 +56,8 @@ TEST(FlKeyChannelResponderTest, SendKeyEvent) {

g_autoptr(FlKeyEvent) event2 = fl_key_event_new(
23456, FALSE, 0x04, GDK_KEY_A, static_cast<GdkModifierType>(0), 0);
fl_key_responder_handle_event(responder, event2, responder_callback, loop);
fl_key_channel_responder_handle_event(responder, event2, 0,
responder_callback, loop);
expected_value =
"{type: keyup, keymap: linux, scanCode: 4, toolkit: gtk, keyCode: 65, "
"modifiers: 0, unicodeScalarValues: 65}";
Expand All @@ -76,12 +78,13 @@ void test_lock_event(guint key_code,
.value_converter = echo_response_cb,
.channel_name = "test/echo",
};
g_autoptr(FlKeyResponder) responder =
FL_KEY_RESPONDER(fl_key_channel_responder_new(messenger, &mock));
g_autoptr(FlKeyChannelResponder) responder =
fl_key_channel_responder_new(messenger, &mock);

g_autoptr(FlKeyEvent) event1 = fl_key_event_new(
12345, TRUE, 0x04, key_code, static_cast<GdkModifierType>(0), 0);
fl_key_responder_handle_event(responder, event1, responder_callback, loop);
fl_key_channel_responder_handle_event(responder, event1, 0,
responder_callback, loop);
expected_value = down_expected;
expected_handled = FALSE;

Expand All @@ -92,7 +95,8 @@ void test_lock_event(guint key_code,
expected_handled = FALSE;
g_autoptr(FlKeyEvent) event2 = fl_key_event_new(
12346, FALSE, 0x04, key_code, static_cast<GdkModifierType>(0), 0);
fl_key_responder_handle_event(responder, event2, responder_callback, loop);
fl_key_channel_responder_handle_event(responder, event2, 0,
responder_callback, loop);

// Blocks here until echo_response_cb is called.
g_main_loop_run(loop);
Expand Down Expand Up @@ -134,12 +138,13 @@ TEST(FlKeyChannelResponderTest, TestKeyEventHandledByFramework) {
.value_converter = echo_response_cb,
.channel_name = "test/echo",
};
g_autoptr(FlKeyResponder) responder =
FL_KEY_RESPONDER(fl_key_channel_responder_new(messenger, &mock));
g_autoptr(FlKeyChannelResponder) responder =
fl_key_channel_responder_new(messenger, &mock);

g_autoptr(FlKeyEvent) event = fl_key_event_new(
12345, TRUE, 0x04, GDK_KEY_A, static_cast<GdkModifierType>(0), 0);
fl_key_responder_handle_event(responder, event, responder_callback, loop);
fl_key_channel_responder_handle_event(responder, event, 0, responder_callback,
loop);
expected_handled = TRUE;
expected_value =
"{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
Expand All @@ -158,13 +163,13 @@ TEST(FlKeyChannelResponderTest, UseSpecifiedLogicalKey) {
.value_converter = echo_response_cb,
.channel_name = "test/echo",
};
g_autoptr(FlKeyResponder) responder =
FL_KEY_RESPONDER(fl_key_channel_responder_new(messenger, &mock));
g_autoptr(FlKeyChannelResponder) responder =
fl_key_channel_responder_new(messenger, &mock);

g_autoptr(FlKeyEvent) event = fl_key_event_new(
12345, TRUE, 0x04, GDK_KEY_A, static_cast<GdkModifierType>(0), 0);
fl_key_responder_handle_event(responder, event, responder_callback, loop,
888);
fl_key_channel_responder_handle_event(responder, event, 888,
responder_callback, loop);
expected_handled = TRUE;
expected_value =
"{type: keydown, keymap: linux, scanCode: 4, toolkit: gtk, "
Expand Down
Loading