1111
1212#include < cstring>
1313
14+ #include " flutter/common/constants.h"
1415#include " flutter/shell/platform/linux/fl_accessible_node.h"
1516#include " flutter/shell/platform/linux/fl_backing_store_provider.h"
1617#include " flutter/shell/platform/linux/fl_engine_private.h"
@@ -39,6 +40,9 @@ struct _FlView {
3940 // Project being run.
4041 FlDartProject* project;
4142
43+ // ID for this view.
44+ FlutterViewId view_id;
45+
4246 // Rendering output.
4347 FlRendererGdk* renderer;
4448
@@ -207,9 +211,10 @@ static gboolean send_pointer_button_event(FlView* self, GdkEvent* event) {
207211 fl_keyboard_handler_sync_modifier_if_needed (self->keyboard_handler ,
208212 event_state, event_time);
209213 fl_engine_send_mouse_pointer_event (
210- self->engine , phase, event_time * kMicrosecondsPerMillisecond ,
211- event_x * scale_factor, event_y * scale_factor,
212- get_device_kind ((GdkEvent*)event), 0 , 0 , self->button_state );
214+ self->engine , self->view_id , phase,
215+ event_time * kMicrosecondsPerMillisecond , event_x * scale_factor,
216+ event_y * scale_factor, get_device_kind ((GdkEvent*)event), 0 , 0 ,
217+ self->button_state );
213218
214219 return TRUE ;
215220}
@@ -224,7 +229,7 @@ static void check_pointer_inside(FlView* self, GdkEvent* event) {
224229 gint scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (self));
225230
226231 fl_engine_send_mouse_pointer_event (
227- self->engine , kAdd ,
232+ self->engine , self-> view_id , kAdd ,
228233 gdk_event_get_time (event) * kMicrosecondsPerMillisecond ,
229234 x * scale_factor, y * scale_factor, get_device_kind (event), 0 , 0 ,
230235 self->button_state );
@@ -238,7 +243,7 @@ static void handle_geometry_changed(FlView* self) {
238243 gtk_widget_get_allocation (GTK_WIDGET (self), &allocation);
239244 gint scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (self));
240245 fl_engine_send_window_metrics_event (
241- self->engine , allocation.width * scale_factor,
246+ self->engine , self-> view_id , allocation.width * scale_factor,
242247 allocation.height * scale_factor, scale_factor);
243248
244249 // Make sure the view has been realized and its size has been allocated before
@@ -354,9 +359,9 @@ static void fl_view_scrolling_delegate_iface_init(
354359 double scroll_delta_y, int64_t buttons) {
355360 FlView* self = FL_VIEW (view_delegate);
356361 if (self->engine != nullptr ) {
357- fl_engine_send_mouse_pointer_event (self-> engine , phase, timestamp, x,
358- y, device_kind, scroll_delta_x ,
359- scroll_delta_y, buttons);
362+ fl_engine_send_mouse_pointer_event (
363+ self-> engine , self-> view_id , phase, timestamp, x, y, device_kind,
364+ scroll_delta_x, scroll_delta_y, buttons);
360365 }
361366 };
362367 iface->send_pointer_pan_zoom_event =
@@ -365,9 +370,9 @@ static void fl_view_scrolling_delegate_iface_init(
365370 double scale, double rotation) {
366371 FlView* self = FL_VIEW (view_delegate);
367372 if (self->engine != nullptr ) {
368- fl_engine_send_pointer_pan_zoom_event (self->engine , timestamp, x, y ,
369- phase, pan_x, pan_y, scale ,
370- rotation);
373+ fl_engine_send_pointer_pan_zoom_event (self->engine , self-> view_id ,
374+ timestamp, x, y, phase, pan_x ,
375+ pan_y, scale, rotation);
371376 };
372377 };
373378}
@@ -441,7 +446,7 @@ static gboolean motion_notify_event_cb(FlView* self,
441446 fl_keyboard_handler_sync_modifier_if_needed (self->keyboard_handler ,
442447 event_state, event_time);
443448 fl_engine_send_mouse_pointer_event (
444- self->engine , self->button_state != 0 ? kMove : kHover ,
449+ self->engine , self->view_id , self-> button_state != 0 ? kMove : kHover ,
445450 event_time * kMicrosecondsPerMillisecond , event_x * scale_factor,
446451 event_y * scale_factor, get_device_kind ((GdkEvent*)event), 0 , 0 ,
447452 self->button_state );
@@ -486,9 +491,10 @@ static gboolean leave_notify_event_cb(FlView* self,
486491 if (self->pointer_inside && self->button_state == 0 ) {
487492 gint scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (self));
488493 fl_engine_send_mouse_pointer_event (
489- self->engine , kRemove , event_time * kMicrosecondsPerMillisecond ,
490- event_x * scale_factor, event_y * scale_factor,
491- get_device_kind ((GdkEvent*)event), 0 , 0 , self->button_state );
494+ self->engine , self->view_id , kRemove ,
495+ event_time * kMicrosecondsPerMillisecond , event_x * scale_factor,
496+ event_y * scale_factor, get_device_kind ((GdkEvent*)event), 0 , 0 ,
497+ self->button_state );
492498 self->pointer_inside = FALSE ;
493499 }
494500
@@ -755,6 +761,10 @@ static void fl_view_class_init(FlViewClass* klass) {
755761static void fl_view_init (FlView* self) {
756762 gtk_widget_set_can_focus (GTK_WIDGET (self), TRUE );
757763
764+ // When we support multiple views this will become variable.
765+ // https://github.com/flutter/flutter/issues/138178
766+ self->view_id = flutter::kFlutterImplicitViewId ;
767+
758768 self->event_box = gtk_event_box_new ();
759769 gtk_widget_set_hexpand (self->event_box , TRUE );
760770 gtk_widget_set_vexpand (self->event_box , TRUE );
0 commit comments