Flutter Linux Embedder
fl_window_monitor.cc File Reference

Go to the source code of this file.

Classes

struct  _FlWindowMonitor
 

Functions

static gboolean configure_event_cb (FlWindowMonitor *self, GdkEventConfigure *event)
 
static gboolean window_state_event_cb (FlWindowMonitor *self, GdkEventWindowState *event)
 
static void is_active_notify_cb (FlWindowMonitor *self)
 
static void title_notify_cb (FlWindowMonitor *self)
 
static void moved_to_rect_cb (FlWindowMonitor *self, GdkRectangle *flipped_rect, GdkRectangle *final_rect, gboolean flipped_x, gboolean flipped_y)
 
static gboolean delete_event_cb (FlWindowMonitor *self, GdkEvent *event)
 
static void destroy_cb (FlWindowMonitor *self)
 
static void fl_window_monitor_dispose (GObject *object)
 
static void fl_window_monitor_class_init (FlWindowMonitorClass *klass)
 
static void fl_window_monitor_init (FlWindowMonitor *self)
 
G_MODULE_EXPORT FlWindowMonitor * fl_window_monitor_new (GtkWindow *window, void(*on_configure)(void), void(*on_state_changed)(void), void(*on_is_active_notify)(void), void(*on_title_notify)(void), void(*on_moved_to_rect)(int, int, int, int), void(*on_close)(void), void(*on_destroy)(void))
 

Function Documentation

◆ configure_event_cb()

static gboolean configure_event_cb ( FlWindowMonitor *  self,
GdkEventConfigure *  event 
)
static

Definition at line 31 of file fl_window_monitor.cc.

32  {
33  flutter::IsolateScope scope(self->isolate);
34  self->on_configure();
35 
36  return FALSE;
37 }

Referenced by fl_window_monitor_new().

◆ delete_event_cb()

static gboolean delete_event_cb ( FlWindowMonitor *  self,
GdkEvent *  event 
)
static

Definition at line 67 of file fl_window_monitor.cc.

67  {
68  flutter::IsolateScope scope(self->isolate);
69  self->on_close();
70 
71  // Stop default behaviour of destroying the window.
72  return TRUE;
73 }
return TRUE

References TRUE.

Referenced by fl_window_monitor_new().

◆ destroy_cb()

static void destroy_cb ( FlWindowMonitor *  self)
static

Definition at line 75 of file fl_window_monitor.cc.

75  {
76  flutter::IsolateScope scope(self->isolate);
77  self->on_destroy();
78 }

Referenced by fl_window_monitor_new().

◆ fl_window_monitor_class_init()

static void fl_window_monitor_class_init ( FlWindowMonitorClass *  klass)
static

Definition at line 88 of file fl_window_monitor.cc.

88  {
89  G_OBJECT_CLASS(klass)->dispose = fl_window_monitor_dispose;
90 }
static void fl_window_monitor_dispose(GObject *object)

References fl_window_monitor_dispose().

◆ fl_window_monitor_dispose()

static void fl_window_monitor_dispose ( GObject *  object)
static

Definition at line 80 of file fl_window_monitor.cc.

80  {
81  FlWindowMonitor* self = FL_WINDOW_MONITOR(object);
82 
83  g_clear_object(&self->window);
84 
85  G_OBJECT_CLASS(fl_window_monitor_parent_class)->dispose(object);
86 }

Referenced by fl_window_monitor_class_init().

◆ fl_window_monitor_init()

static void fl_window_monitor_init ( FlWindowMonitor *  self)
static

Definition at line 92 of file fl_window_monitor.cc.

92 {}

◆ fl_window_monitor_new()

G_MODULE_EXPORT FlWindowMonitor* fl_window_monitor_new ( GtkWindow *  window,
void(*)(void)  on_configure,
void(*)(void)  on_state_changed,
void(*)(void)  on_is_active_notify,
void(*)(void)  on_title_notify,
void(*)(int, int, int, int)  on_moved_to_rect,
void(*)(void)  on_close,
void(*)(void)  on_destroy 
)

fl_window_monitor_new: @window: the window being monitored. @on_configure: the function to call when the window changes size, position or stacking. @on_state_changed: the function to call when the window state changes. @on_is_active_notify: the function to call when the is-active property changes. @on_moved_to_rect: the function to call when a popup window is moved to a new position. @on_close: the function to call when the user requests the window to be closed. @on_destroy: the function to call when the window is destroyed.

Helper class to allow the Flutter engine to monitor a GtkWindow using FFI. Callbacks are called in the isolate this class was created with.

Returns: a new #FlWindowMonitor.

Definition at line 94 of file fl_window_monitor.cc.

102  {
103  FlWindowMonitor* self =
104  FL_WINDOW_MONITOR(g_object_new(fl_window_monitor_get_type(), nullptr));
105 
106  self->window = GTK_WINDOW(g_object_ref(window));
107  self->isolate = flutter::Isolate::Current();
108  self->on_configure = on_configure;
109  self->on_state_changed = on_state_changed;
110  self->on_is_active_notify = on_is_active_notify;
111  self->on_title_notify = on_title_notify;
112  self->on_moved_to_rect = on_moved_to_rect;
113  self->on_close = on_close;
114  self->on_destroy = on_destroy;
115  g_signal_connect_object(window, "configure-event",
116  G_CALLBACK(configure_event_cb), self,
117  G_CONNECT_SWAPPED);
118  g_signal_connect_object(window, "window-state-event",
119  G_CALLBACK(window_state_event_cb), self,
120  G_CONNECT_SWAPPED);
121  g_signal_connect_object(window, "notify::is-active",
122  G_CALLBACK(is_active_notify_cb), self,
123  G_CONNECT_SWAPPED);
124  g_signal_connect_object(window, "notify::title", G_CALLBACK(title_notify_cb),
125  self, G_CONNECT_SWAPPED);
126  g_signal_connect_object(gtk_widget_get_window(GTK_WIDGET(window)),
127  "moved-to-rect", G_CALLBACK(moved_to_rect_cb), self,
128  G_CONNECT_SWAPPED);
129  g_signal_connect_object(window, "delete-event", G_CALLBACK(delete_event_cb),
130  self, G_CONNECT_SWAPPED);
131  g_signal_connect_object(window, "destroy", G_CALLBACK(destroy_cb), self,
132  G_CONNECT_SWAPPED);
133 
134  return self;
135 }
static Isolate Current()
Definition: isolate_scope.cc:9
static void destroy_cb(FlWindowMonitor *self)
static void is_active_notify_cb(FlWindowMonitor *self)
static void title_notify_cb(FlWindowMonitor *self)
static void moved_to_rect_cb(FlWindowMonitor *self, GdkRectangle *flipped_rect, GdkRectangle *final_rect, gboolean flipped_x, gboolean flipped_y)
static gboolean configure_event_cb(FlWindowMonitor *self, GdkEventConfigure *event)
static gboolean window_state_event_cb(FlWindowMonitor *self, GdkEventWindowState *event)
static gboolean delete_event_cb(FlWindowMonitor *self, GdkEvent *event)

References configure_event_cb(), flutter::Isolate::Current(), delete_event_cb(), destroy_cb(), is_active_notify_cb(), moved_to_rect_cb(), title_notify_cb(), and window_state_event_cb().

◆ is_active_notify_cb()

static void is_active_notify_cb ( FlWindowMonitor *  self)
static

Definition at line 47 of file fl_window_monitor.cc.

47  {
48  flutter::IsolateScope scope(self->isolate);
49  self->on_is_active_notify();
50 }

Referenced by fl_window_monitor_new().

◆ moved_to_rect_cb()

static void moved_to_rect_cb ( FlWindowMonitor *  self,
GdkRectangle *  flipped_rect,
GdkRectangle *  final_rect,
gboolean  flipped_x,
gboolean  flipped_y 
)
static

Definition at line 57 of file fl_window_monitor.cc.

61  {
62  flutter::IsolateScope scope(self->isolate);
63  self->on_moved_to_rect(final_rect->x, final_rect->y, final_rect->width,
64  final_rect->height);
65 }

Referenced by fl_window_monitor_new().

◆ title_notify_cb()

static void title_notify_cb ( FlWindowMonitor *  self)
static

Definition at line 52 of file fl_window_monitor.cc.

52  {
53  flutter::IsolateScope scope(self->isolate);
54  self->on_title_notify();
55 }

Referenced by fl_window_monitor_new().

◆ window_state_event_cb()

static gboolean window_state_event_cb ( FlWindowMonitor *  self,
GdkEventWindowState *  event 
)
static

Definition at line 39 of file fl_window_monitor.cc.

40  {
41  flutter::IsolateScope scope(self->isolate);
42  self->on_state_changed();
43 
44  return FALSE;
45 }

Referenced by fl_window_monitor_new().