From a2918c806fcd2e56f8c1d2bb98c1821e77714d4a Mon Sep 17 00:00:00 2001 From: Robert Ancell Date: Tue, 22 Oct 2024 15:25:42 +0200 Subject: [PATCH] Move platform handler from FlView to FlEngine --- shell/platform/linux/fl_engine.cc | 12 ++++++++++++ shell/platform/linux/fl_engine_private.h | 10 +++++++++- shell/platform/linux/fl_view.cc | 6 +----- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/shell/platform/linux/fl_engine.cc b/shell/platform/linux/fl_engine.cc index c56193e1d504b..2592c63b730d8 100644 --- a/shell/platform/linux/fl_engine.cc +++ b/shell/platform/linux/fl_engine.cc @@ -15,6 +15,7 @@ #include "flutter/shell/platform/linux/fl_dart_project_private.h" #include "flutter/shell/platform/linux/fl_engine_private.h" #include "flutter/shell/platform/linux/fl_pixel_buffer_texture_private.h" +#include "flutter/shell/platform/linux/fl_platform_handler.h" #include "flutter/shell/platform/linux/fl_plugin_registrar_private.h" #include "flutter/shell/platform/linux/fl_renderer.h" #include "flutter/shell/platform/linux/fl_renderer_gdk.h" @@ -42,6 +43,7 @@ struct _FlEngine { FlRenderer* renderer; FlBinaryMessenger* binary_messenger; FlSettingsHandler* settings_handler; + FlPlatformHandler* platform_handler; FlTextureRegistrar* texture_registrar; FlTaskRunner* task_runner; FlutterEngineAOTData aot_data; @@ -426,6 +428,7 @@ static void fl_engine_dispose(GObject* object) { g_clear_object(&self->texture_registrar); g_clear_object(&self->binary_messenger); g_clear_object(&self->settings_handler); + g_clear_object(&self->platform_handler); g_clear_object(&self->task_runner); if (self->platform_message_handler_destroy_notify) { @@ -604,6 +607,8 @@ gboolean fl_engine_start(FlEngine* self, GError** error) { self->settings_handler = fl_settings_handler_new(self); fl_settings_handler_start(self->settings_handler, settings); + self->platform_handler = fl_platform_handler_new(self->binary_messenger); + result = self->embedder_api.UpdateSemanticsEnabled(self->engine, TRUE); if (result != kSuccess) { g_warning("Failed to enable accessibility features on Flutter engine"); @@ -1022,9 +1027,16 @@ void fl_engine_update_accessibility_features(FlEngine* self, int32_t flags) { } GPtrArray* fl_engine_get_switches(FlEngine* self) { + g_return_val_if_fail(FL_IS_ENGINE(self), nullptr); + GPtrArray* switches = g_ptr_array_new_with_free_func(g_free); for (const auto& env_switch : flutter::GetSwitchesFromEnvironment()) { g_ptr_array_add(switches, g_strdup(env_switch.c_str())); } return switches; } + +void fl_engine_request_app_exit(FlEngine* self) { + g_return_if_fail(FL_IS_ENGINE(self)); + fl_platform_handler_request_app_exit(self->platform_handler); +} diff --git a/shell/platform/linux/fl_engine_private.h b/shell/platform/linux/fl_engine_private.h index 6980ae4019db1..ed5d3197f04ec 100644 --- a/shell/platform/linux/fl_engine_private.h +++ b/shell/platform/linux/fl_engine_private.h @@ -418,7 +418,7 @@ void fl_engine_update_accessibility_features(FlEngine* engine, int32_t flags); /** * fl_engine_get_switches: - * @project: an #FlEngine. + * @engine: an #FlEngine. * * Determines the switches that should be passed to the Flutter engine. * @@ -426,6 +426,14 @@ void fl_engine_update_accessibility_features(FlEngine* engine, int32_t flags); */ GPtrArray* fl_engine_get_switches(FlEngine* engine); +/** + * fl_engine_request_app_exit: + * @engine: an #FlEngine. + * + * Request the application exits. + */ +void fl_engine_request_app_exit(FlEngine* engine); + G_END_DECLS #endif // FLUTTER_SHELL_PLATFORM_LINUX_FL_ENGINE_PRIVATE_H_ diff --git a/shell/platform/linux/fl_view.cc b/shell/platform/linux/fl_view.cc index 58d234601f2be..c39d11aa031cf 100644 --- a/shell/platform/linux/fl_view.cc +++ b/shell/platform/linux/fl_view.cc @@ -20,7 +20,6 @@ #include "flutter/shell/platform/linux/fl_keyboard_manager.h" #include "flutter/shell/platform/linux/fl_keyboard_view_delegate.h" #include "flutter/shell/platform/linux/fl_mouse_cursor_handler.h" -#include "flutter/shell/platform/linux/fl_platform_handler.h" #include "flutter/shell/platform/linux/fl_plugin_registrar_private.h" #include "flutter/shell/platform/linux/fl_renderer_gdk.h" #include "flutter/shell/platform/linux/fl_scrolling_manager.h" @@ -70,7 +69,6 @@ struct _FlView { FlKeyboardHandler* keyboard_handler; FlTextInputHandler* text_input_handler; FlMouseCursorHandler* mouse_cursor_handler; - FlPlatformHandler* platform_handler; GtkWidget* event_box; GtkGLArea* gl_area; @@ -128,7 +126,7 @@ static gboolean first_frame_idle_cb(gpointer user_data) { // Signal handler for GtkWidget::delete-event static gboolean window_delete_event_cb(FlView* self) { - fl_platform_handler_request_app_exit(self->platform_handler); + fl_engine_request_app_exit(self->engine); // Stop the event from propagating. return TRUE; } @@ -573,7 +571,6 @@ static GdkGLContext* create_context_cb(FlView* self) { FlBinaryMessenger* messenger = fl_engine_get_binary_messenger(self->engine); init_scrolling(self); self->mouse_cursor_handler = fl_mouse_cursor_handler_new(messenger, self); - self->platform_handler = fl_platform_handler_new(messenger); g_autoptr(GError) error = nullptr; if (!fl_renderer_gdk_create_contexts(self->renderer, &error)) { @@ -702,7 +699,6 @@ static void fl_view_dispose(GObject* object) { g_clear_object(&self->keyboard_manager); g_clear_object(&self->keyboard_handler); g_clear_object(&self->mouse_cursor_handler); - g_clear_object(&self->platform_handler); g_clear_object(&self->view_accessible); g_clear_object(&self->cancellable);