Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Remove FlKeyEvent.dispose_origin and use GdkEvent type for origin #50483

Merged
merged 1 commit into from
Feb 12, 2024
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
1 change: 0 additions & 1 deletion shell/platform/linux/fl_key_channel_responder_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ static FlKeyEvent* fl_key_event_new_by_mock(guint32 time_in_milliseconds,
_g_key_event.keyval = keyval;
_g_key_event.keycode = keycode;
_g_key_event.origin = nullptr;
_g_key_event.dispose_origin = nullptr;
return &_g_key_event;
}

Expand Down
1 change: 0 additions & 1 deletion shell/platform/linux/fl_key_embedder_responder_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ static FlKeyEvent* fl_key_event_new_by_mock(guint32 time_in_milliseconds,
_g_key_event.keyval = keyval;
_g_key_event.keycode = keycode;
_g_key_event.origin = nullptr;
_g_key_event.dispose_origin = nullptr;
return &_g_key_event;
}

Expand Down
10 changes: 2 additions & 8 deletions shell/platform/linux/fl_key_event.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@

#include "flutter/shell/platform/linux/fl_key_event.h"

static void dispose_origin_from_gdk_event(gpointer origin) {
g_return_if_fail(origin != nullptr);
gdk_event_free(reinterpret_cast<GdkEvent*>(origin));
}

FlKeyEvent* fl_key_event_new_from_gdk_event(GdkEvent* event) {
g_return_val_if_fail(event != nullptr, nullptr);
GdkEventType type = gdk_event_get_event_type(event);
Expand All @@ -30,14 +25,13 @@ FlKeyEvent* fl_key_event_new_from_gdk_event(GdkEvent* event) {
result->state = state;
result->group = event->key.group;
result->origin = event;
result->dispose_origin = dispose_origin_from_gdk_event;

return result;
}

void fl_key_event_dispose(FlKeyEvent* event) {
if (event->dispose_origin != nullptr) {
event->dispose_origin(event->origin);
if (event->origin != nullptr) {
gdk_event_free(event->origin);
}
g_free(event);
}
Expand Down
20 changes: 2 additions & 18 deletions shell/platform/linux/fl_key_event.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,6 @@

#include <gdk/gdk.h>

/**
* FlKeyEventDispose:
* @origin: the #FlKeyEvent::origin to dispose.
*
* The signature for #FlKeyEvent::dispose_origin, which
* frees #FlKeyEvent::origin.
**/
typedef void (*FlKeyEventDisposeOrigin)(gpointer origin);

/**
* FlKeyEvent:
* A struct that stores information from GdkEvent.
Expand All @@ -41,15 +32,8 @@ typedef struct _FlKeyEvent {
int state;
// Keyboard group.
guint8 group;
// An opaque pointer to the original event.
//
// This is used when dispatching. For native events, this is #GdkEvent
// pointer. For unit tests, this is a dummy pointer.
gpointer origin;
// A callback to free #origin, called in #fl_key_event_dispose.
//
// Can be nullptr.
FlKeyEventDisposeOrigin dispose_origin;
// The original event.
GdkEvent* origin;
} FlKeyEvent;

/**
Expand Down
19 changes: 1 addition & 18 deletions shell/platform/linux/fl_keyboard_manager_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -346,8 +346,6 @@ static void fl_mock_view_delegate_class_init(FlMockViewDelegateClass* klass) {
G_OBJECT_CLASS(klass)->finalize = fl_mock_view_delegate_finalize;
}

static FlKeyEvent* fl_key_event_clone_information_only(FlKeyEvent* event);

static void fl_mock_view_keyboard_send_key_event(
FlKeyboardViewDelegate* view_delegate,
const FlutterKeyEvent* event,
Expand Down Expand Up @@ -469,35 +467,20 @@ static void fl_mock_view_set_layout(FlMockViewDelegate* self,

/***** End FlMockViewDelegate *****/

// Return a newly allocated #FlKeyEvent that is a clone to the given #event
// but with #origin and #dispose set to 0.
static FlKeyEvent* fl_key_event_clone_information_only(FlKeyEvent* event) {
FlKeyEvent* new_event = fl_key_event_clone(event);
new_event->origin = nullptr;
new_event->dispose_origin = nullptr;
return new_event;
}

// Create a new #FlKeyEvent with the given information.
//
// The #origin will be another #FlKeyEvent with the exact information,
// so that it can be used to redispatch, and is freed upon disposal.
static FlKeyEvent* fl_key_event_new_by_mock(bool is_press,
guint keyval,
guint16 keycode,
int state,
gboolean is_modifier,
guint8 group = 0) {
FlKeyEvent* event = g_new(FlKeyEvent, 1);
FlKeyEvent* event = g_new0(FlKeyEvent, 1);
event->is_press = is_press;
event->time = 0;
event->state = state;
event->keyval = keyval;
event->group = group;
event->keycode = keycode;
FlKeyEvent* origin_event = fl_key_event_clone_information_only(event);
event->origin = origin_event;
event->dispose_origin = [](gpointer origin) { g_free(origin); };
return event;
}

Expand Down
4 changes: 2 additions & 2 deletions shell/platform/linux/fl_text_input_plugin.cc
Original file line number Diff line number Diff line change
Expand Up @@ -626,8 +626,8 @@ static gboolean fl_text_input_plugin_filter_keypress_default(
return FALSE;
}

GdkEventKey* key_event = reinterpret_cast<GdkEventKey*>(event->origin);
if (gtk_im_context_filter_keypress(priv->im_context, key_event)) {
if (gtk_im_context_filter_keypress(
priv->im_context, reinterpret_cast<GdkEventKey*>(event->origin))) {
return TRUE;
}

Expand Down
5 changes: 2 additions & 3 deletions shell/platform/linux/fl_view.cc
Original file line number Diff line number Diff line change
Expand Up @@ -290,11 +290,10 @@ static void fl_view_keyboard_delegate_iface_init(
iface->redispatch_event = [](FlKeyboardViewDelegate* view_delegate,
std::unique_ptr<FlKeyEvent> in_event) {
FlKeyEvent* event = in_event.release();
GdkEvent* gdk_event = reinterpret_cast<GdkEvent*>(event->origin);
GdkEventType event_type = gdk_event_get_event_type(gdk_event);
GdkEventType event_type = gdk_event_get_event_type(event->origin);
g_return_if_fail(event_type == GDK_KEY_PRESS ||
event_type == GDK_KEY_RELEASE);
gdk_event_put(gdk_event);
gdk_event_put(event->origin);
fl_key_event_dispose(event);
};

Expand Down