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

Commit 5ef39f3

Browse files
committed
Set the view ID for FlView
1 parent 133cb59 commit 5ef39f3

File tree

4 files changed

+57
-31
lines changed

4 files changed

+57
-31
lines changed

shell/platform/linux/fl_engine.cc

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,7 @@ GBytes* fl_engine_send_platform_message_finish(FlEngine* self,
838838
}
839839

840840
void fl_engine_send_window_metrics_event(FlEngine* self,
841+
FlutterViewId view_id,
841842
size_t width,
842843
size_t height,
843844
double pixel_ratio) {
@@ -852,14 +853,12 @@ void fl_engine_send_window_metrics_event(FlEngine* self,
852853
event.width = width;
853854
event.height = height;
854855
event.pixel_ratio = pixel_ratio;
855-
// TODO(dkwingsmt): Assign the correct view ID once the Linux embedder
856-
// supports multiple views.
857-
// https://github.com/flutter/flutter/issues/138178
858-
event.view_id = flutter::kFlutterImplicitViewId;
856+
event.view_id = view_id;
859857
self->embedder_api.SendWindowMetricsEvent(self->engine, &event);
860858
}
861859

862860
void fl_engine_send_mouse_pointer_event(FlEngine* self,
861+
FlutterViewId view_id,
863862
FlutterPointerPhase phase,
864863
size_t timestamp,
865864
double x,
@@ -888,14 +887,12 @@ void fl_engine_send_mouse_pointer_event(FlEngine* self,
888887
fl_event.device_kind = device_kind;
889888
fl_event.buttons = buttons;
890889
fl_event.device = kMousePointerDeviceId;
891-
// TODO(dkwingsmt): Assign the correct view ID once the Linux embedder
892-
// supports multiple views.
893-
// https://github.com/flutter/flutter/issues/138178
894-
fl_event.view_id = flutter::kFlutterImplicitViewId;
890+
fl_event.view_id = view_id;
895891
self->embedder_api.SendPointerEvent(self->engine, &fl_event, 1);
896892
}
897893

898894
void fl_engine_send_pointer_pan_zoom_event(FlEngine* self,
895+
FlutterViewId view_id,
899896
size_t timestamp,
900897
double x,
901898
double y,
@@ -922,10 +919,7 @@ void fl_engine_send_pointer_pan_zoom_event(FlEngine* self,
922919
fl_event.rotation = rotation;
923920
fl_event.device = kPointerPanZoomDeviceId;
924921
fl_event.device_kind = kFlutterPointerDeviceKindTrackpad;
925-
// TODO(dkwingsmt): Assign the correct view ID once the Linux embedder
926-
// supports multiple views.
927-
// https://github.com/flutter/flutter/issues/138178
928-
fl_event.view_id = flutter::kFlutterImplicitViewId;
922+
fl_event.view_id = view_id;
929923
self->embedder_api.SendPointerEvent(self->engine, &fl_event, 1);
930924
}
931925

shell/platform/linux/fl_engine_private.h

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,13 +233,15 @@ void fl_engine_set_on_pre_engine_restart_handler(
233233
* Sends a window metrics event to the engine.
234234
*/
235235
void fl_engine_send_window_metrics_event(FlEngine* engine,
236+
FlutterViewId view_id,
236237
size_t width,
237238
size_t height,
238239
double pixel_ratio);
239240

240241
/**
241242
* fl_engine_send_mouse_pointer_event:
242243
* @engine: an #FlEngine.
244+
* @view_id: the view that the event occured on.
243245
* @phase: mouse phase.
244246
* @timestamp: time when event occurred in microseconds.
245247
* @x: x location of mouse cursor.
@@ -252,6 +254,7 @@ void fl_engine_send_window_metrics_event(FlEngine* engine,
252254
* Sends a mouse pointer event to the engine.
253255
*/
254256
void fl_engine_send_mouse_pointer_event(FlEngine* engine,
257+
FlutterViewId view_id,
255258
FlutterPointerPhase phase,
256259
size_t timestamp,
257260
double x,
@@ -261,7 +264,23 @@ void fl_engine_send_mouse_pointer_event(FlEngine* engine,
261264
double scroll_delta_y,
262265
int64_t buttons);
263266

264-
void fl_engine_send_pointer_pan_zoom_event(FlEngine* self,
267+
/**
268+
* fl_engine_send_pointer_pan_zoom_event:
269+
* @engine: an #FlEngine.
270+
* @view_id: the view that the event occured on.
271+
* @timestamp: time when event occurred in microseconds.
272+
* @x: x location of mouse cursor.
273+
* @y: y location of mouse cursor.
274+
* @phase: mouse phase.
275+
* @pan_x: x offset of the pan/zoom in pixels.
276+
* @pan_y: y offset of the pan/zoom in pixels.
277+
* @scale: scale of the pan/zoom.
278+
* @rotation: rotation of the pan/zoom in radians.
279+
*
280+
* Sends a pan/zoom pointer event to the engine.
281+
*/
282+
void fl_engine_send_pointer_pan_zoom_event(FlEngine* engine,
283+
FlutterViewId view_id,
265284
size_t timestamp,
266285
double x,
267286
double y,

shell/platform/linux/fl_engine_test.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ TEST(FlEngineTest, WindowMetrics) {
2525
SendWindowMetricsEvent,
2626
([&called](auto engine, const FlutterWindowMetricsEvent* event) {
2727
called = true;
28+
EXPECT_EQ(event->view_id, 1);
2829
EXPECT_EQ(event->width, static_cast<size_t>(3840));
2930
EXPECT_EQ(event->height, static_cast<size_t>(2160));
3031
EXPECT_EQ(event->pixel_ratio, 2.0);
@@ -35,7 +36,7 @@ TEST(FlEngineTest, WindowMetrics) {
3536
g_autoptr(GError) error = nullptr;
3637
EXPECT_TRUE(fl_engine_start(engine, &error));
3738
EXPECT_EQ(error, nullptr);
38-
fl_engine_send_window_metrics_event(engine, 3840, 2160, 2.0);
39+
fl_engine_send_window_metrics_event(engine, 1, 3840, 2160, 2.0);
3940

4041
EXPECT_TRUE(called);
4142
}
@@ -52,6 +53,7 @@ TEST(FlEngineTest, MousePointer) {
5253
size_t events_count) {
5354
called = true;
5455
EXPECT_EQ(events_count, static_cast<size_t>(1));
56+
EXPECT_EQ(events[0].view_id, 1);
5557
EXPECT_EQ(events[0].phase, kDown);
5658
EXPECT_EQ(events[0].timestamp, static_cast<size_t>(1234567890));
5759
EXPECT_EQ(events[0].x, 800);
@@ -69,7 +71,7 @@ TEST(FlEngineTest, MousePointer) {
6971
g_autoptr(GError) error = nullptr;
7072
EXPECT_TRUE(fl_engine_start(engine, &error));
7173
EXPECT_EQ(error, nullptr);
72-
fl_engine_send_mouse_pointer_event(engine, kDown, 1234567890, 800, 600,
74+
fl_engine_send_mouse_pointer_event(engine, 1, kDown, 1234567890, 800, 600,
7375
kFlutterPointerDeviceKindMouse, 1.2, -3.4,
7476
kFlutterPointerButtonMouseSecondary);
7577

@@ -88,6 +90,7 @@ TEST(FlEngineTest, PointerPanZoom) {
8890
size_t events_count) {
8991
called = true;
9092
EXPECT_EQ(events_count, static_cast<size_t>(1));
93+
EXPECT_EQ(events[0].view_id, 1);
9194
EXPECT_EQ(events[0].phase, kPanZoomUpdate);
9295
EXPECT_EQ(events[0].timestamp, static_cast<size_t>(1234567890));
9396
EXPECT_EQ(events[0].x, 800);
@@ -107,7 +110,7 @@ TEST(FlEngineTest, PointerPanZoom) {
107110
g_autoptr(GError) error = nullptr;
108111
EXPECT_TRUE(fl_engine_start(engine, &error));
109112
EXPECT_EQ(error, nullptr);
110-
fl_engine_send_pointer_pan_zoom_event(engine, 1234567890, 800, 600,
113+
fl_engine_send_pointer_pan_zoom_event(engine, 1, 1234567890, 800, 600,
111114
kPanZoomUpdate, 1.5, 2.5, 3.5, 4.5);
112115

113116
EXPECT_TRUE(called);

shell/platform/linux/fl_view.cc

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
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) {
755761
static 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

Comments
 (0)