5#include "flutter/shell/platform/linux/fl_mouse_cursor_plugin.h"
10#include "flutter/shell/platform/linux/public/flutter_linux/fl_method_channel.h"
11#include "flutter/shell/platform/linux/public/flutter_linux/fl_standard_method_codec.h"
30G_DEFINE_TYPE(FlMouseCursorPlugin, fl_mouse_cursor_plugin, G_TYPE_OBJECT)
38 return g_hash_table_insert(
39 table,
reinterpret_cast<gpointer
>(
const_cast<gchar*
>(
key)),
40 reinterpret_cast<gpointer
>(
const_cast<gchar*
>(
value)));
96 const gchar* kind =
nullptr;
101 if (
self->system_cursor_table ==
nullptr) {
102 self->system_cursor_table = g_hash_table_new(g_str_hash, g_str_equal);
106 const gchar* cursor_name =
reinterpret_cast<const gchar*
>(
107 g_hash_table_lookup(
self->system_cursor_table, kind));
108 if (cursor_name ==
nullptr) {
113 gtk_widget_get_window(gtk_widget_get_toplevel(GTK_WIDGET(
self->view)));
114 g_autoptr(GdkCursor) cursor =
115 gdk_cursor_new_from_name(gdk_window_get_display(
window), cursor_name);
116 gdk_window_set_cursor(
window, cursor);
125 FlMouseCursorPlugin*
self = FL_MOUSE_CURSOR_PLUGIN(
user_data);
130 g_autoptr(FlMethodResponse) response =
nullptr;
137 g_autoptr(GError)
error =
nullptr;
139 g_warning(
"Failed to send method call response: %s",
error->message);
144 FlMouseCursorPlugin*
self = FL_MOUSE_CURSOR_PLUGIN(
object);
146 g_clear_object(&
self->channel);
147 if (
self->view !=
nullptr) {
148 g_object_remove_weak_pointer(G_OBJECT(
self->view),
149 reinterpret_cast<gpointer*
>(&(
self->view)));
150 self->view =
nullptr;
152 g_clear_pointer(&
self->system_cursor_table, g_hash_table_unref);
154 G_OBJECT_CLASS(fl_mouse_cursor_plugin_parent_class)->dispose(
object);
165 g_return_val_if_fail(FL_IS_BINARY_MESSENGER(messenger),
nullptr);
167 FlMouseCursorPlugin*
self = FL_MOUSE_CURSOR_PLUGIN(
168 g_object_new(fl_mouse_cursor_plugin_get_type(),
nullptr));
176 if (view !=
nullptr) {
177 g_object_add_weak_pointer(G_OBJECT(view),
178 reinterpret_cast<gpointer*
>(&(
self->view)));
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_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
G_MODULE_EXPORT const gchar * fl_method_call_get_name(FlMethodCall *self)
G_MODULE_EXPORT gboolean fl_method_call_respond(FlMethodCall *self, FlMethodResponse *response, GError **error)
G_MODULE_EXPORT FlValue * fl_method_call_get_args(FlMethodCall *self)
G_MODULE_EXPORT FlMethodChannel * fl_method_channel_new(FlBinaryMessenger *messenger, const gchar *name, FlMethodCodec *codec)
G_MODULE_EXPORT void fl_method_channel_set_method_call_handler(FlMethodChannel *self, FlMethodChannelMethodCallHandler handler, gpointer user_data, GDestroyNotify destroy_notify)
G_BEGIN_DECLS G_MODULE_EXPORT FlMethodCall * method_call
G_MODULE_EXPORT FlMethodErrorResponse * fl_method_error_response_new(const gchar *code, const gchar *message, FlValue *details)
G_MODULE_EXPORT FlMethodSuccessResponse * fl_method_success_response_new(FlValue *result)
G_MODULE_EXPORT FlMethodNotImplementedResponse * fl_method_not_implemented_response_new()
static void method_call_cb(FlMethodChannel *channel, FlMethodCall *method_call, gpointer user_data)
static void populate_system_cursor_table(GHashTable *table)
static void fl_mouse_cursor_plugin_init(FlMouseCursorPlugin *self)
static constexpr char kActivateSystemCursorMethod[]
static constexpr char kKindKey[]
static constexpr char kChannelName[]
FlMouseCursorPlugin * fl_mouse_cursor_plugin_new(FlBinaryMessenger *messenger, FlView *view)
static constexpr char kFallbackCursor[]
static constexpr char kBadArgumentsError[]
static void fl_mouse_cursor_plugin_dispose(GObject *object)
FlMethodResponse * activate_system_cursor(FlMouseCursorPlugin *self, FlValue *args)
static bool define_system_cursor(GHashTable *table, const gchar *key, const gchar *value)
static void fl_mouse_cursor_plugin_class_init(FlMouseCursorPluginClass *klass)
const uint8_t uint32_t uint32_t GError ** error
G_MODULE_EXPORT FlStandardMethodCodec * fl_standard_method_codec_new()
G_MODULE_EXPORT FlValue * fl_value_lookup_string(FlValue *self, const gchar *key)
G_MODULE_EXPORT FlValueType fl_value_get_type(FlValue *self)
G_MODULE_EXPORT const gchar * fl_value_get_string(FlValue *self)
typedefG_BEGIN_DECLS struct _FlValue FlValue
GHashTable * system_cursor_table
FlMethodChannel * channel