fix(engine/linux): update scroll handling for GTK4 events

This commit is contained in:
Rich Young 2026-02-04 11:17:18 -05:00
parent 2e062a89a9
commit b333ec392b
4 changed files with 14 additions and 13 deletions

View File

@ -69,7 +69,7 @@ void fl_scrolling_manager_set_last_mouse_position(FlScrollingManager* self,
}
void fl_scrolling_manager_handle_scroll_event(FlScrollingManager* self,
GdkEventScroll* scroll_event,
GdkEvent* event,
gint scale_factor) {
g_return_if_fail(FL_IS_SCROLLING_MANAGER(self));
@ -78,8 +78,6 @@ void fl_scrolling_manager_handle_scroll_event(FlScrollingManager* self,
return;
}
GdkEvent* event = reinterpret_cast<GdkEvent*>(scroll_event);
guint event_time = gdk_event_get_time(event);
gdouble event_x = 0.0, event_y = 0.0;
gdk_event_get_coords(event, &event_x, &event_y);

View File

@ -52,7 +52,7 @@ void fl_scrolling_manager_set_last_mouse_position(FlScrollingManager* manager,
* Inform the scrolling manager of a scroll event.
*/
void fl_scrolling_manager_handle_scroll_event(FlScrollingManager* manager,
GdkEventScroll* event,
GdkEvent* event,
gint scale_factor);
/**

View File

@ -12,6 +12,7 @@
#include "gtest/gtest.h"
#if !FLUTTER_LINUX_GTK4
TEST(FlScrollingManagerTest, DiscreteDirectional) {
g_autoptr(FlDartProject) project = fl_dart_project_new();
g_autoptr(FlEngine) engine = fl_engine_new(project);
@ -44,7 +45,7 @@ TEST(FlScrollingManagerTest, DiscreteDirectional) {
event->y = 8.0;
event->device = mouse;
event->direction = GDK_SCROLL_UP;
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
EXPECT_EQ(pointer_events.size(), 1u);
EXPECT_EQ(pointer_events[0].x, 4.0);
EXPECT_EQ(pointer_events[0].y, 8.0);
@ -54,7 +55,7 @@ TEST(FlScrollingManagerTest, DiscreteDirectional) {
EXPECT_EQ(pointer_events[0].scroll_delta_x, 0);
EXPECT_EQ(pointer_events[0].scroll_delta_y, 53 * -1.0);
event->direction = GDK_SCROLL_DOWN;
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
EXPECT_EQ(pointer_events.size(), 2u);
EXPECT_EQ(pointer_events[1].x, 4.0);
EXPECT_EQ(pointer_events[1].y, 8.0);
@ -64,7 +65,7 @@ TEST(FlScrollingManagerTest, DiscreteDirectional) {
EXPECT_EQ(pointer_events[1].scroll_delta_x, 0);
EXPECT_EQ(pointer_events[1].scroll_delta_y, 53 * 1.0);
event->direction = GDK_SCROLL_LEFT;
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
EXPECT_EQ(pointer_events.size(), 3u);
EXPECT_EQ(pointer_events[2].x, 4.0);
EXPECT_EQ(pointer_events[2].y, 8.0);
@ -74,7 +75,7 @@ TEST(FlScrollingManagerTest, DiscreteDirectional) {
EXPECT_EQ(pointer_events[2].scroll_delta_x, 53 * -1.0);
EXPECT_EQ(pointer_events[2].scroll_delta_y, 0);
event->direction = GDK_SCROLL_RIGHT;
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
EXPECT_EQ(pointer_events.size(), 4u);
EXPECT_EQ(pointer_events[3].x, 4.0);
EXPECT_EQ(pointer_events[3].y, 8.0);
@ -119,7 +120,7 @@ TEST(FlScrollingManagerTest, DiscreteScrolling) {
event->delta_y = 2.0;
event->device = mouse;
event->direction = GDK_SCROLL_SMOOTH;
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
EXPECT_EQ(pointer_events.size(), 1u);
EXPECT_EQ(pointer_events[0].x, 4.0);
EXPECT_EQ(pointer_events[0].y, 8.0);
@ -164,7 +165,7 @@ TEST(FlScrollingManagerTest, Panning) {
event->delta_y = 2.0;
event->device = touchpad;
event->direction = GDK_SCROLL_SMOOTH;
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
EXPECT_EQ(pointer_events.size(), 2u);
EXPECT_EQ(pointer_events[0].x, 4.0);
EXPECT_EQ(pointer_events[0].y, 8.0);
@ -180,7 +181,7 @@ TEST(FlScrollingManagerTest, Panning) {
EXPECT_EQ(pointer_events[1].pan_y, 53 * -2.0);
EXPECT_EQ(pointer_events[1].scale, 1.0);
EXPECT_EQ(pointer_events[1].rotation, 0.0);
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
EXPECT_EQ(pointer_events.size(), 3u);
EXPECT_EQ(pointer_events[2].x, 4.0);
EXPECT_EQ(pointer_events[2].y, 8.0);
@ -192,7 +193,7 @@ TEST(FlScrollingManagerTest, Panning) {
EXPECT_EQ(pointer_events[2].scale, 1.0);
EXPECT_EQ(pointer_events[2].rotation, 0.0);
event->is_stop = true;
fl_scrolling_manager_handle_scroll_event(manager, event, 1.0);
fl_scrolling_manager_handle_scroll_event(manager, reinterpret_cast<GdkEvent*>(event), 1.0);
EXPECT_EQ(pointer_events.size(), 4u);
EXPECT_EQ(pointer_events[3].x, 4.0);
EXPECT_EQ(pointer_events[3].y, 8.0);
@ -429,3 +430,5 @@ TEST(FlScrollingManagerTest, UnsynchronizedZoomingAndRotating) {
EXPECT_EQ(pointer_events[4].phase, kPanZoomEnd);
EXPECT_GE(pointer_events[4].timestamp, pointer_events[3].timestamp);
}
#endif // !FLUTTER_LINUX_GTK4

View File

@ -364,7 +364,7 @@ static gboolean scroll_event_cb(FlView* self, GdkEventScroll* event) {
// depend on GTK 3.24.
fl_scrolling_manager_handle_scroll_event(
self->scrolling_manager, event,
self->scrolling_manager, reinterpret_cast<GdkEvent*>(event),
gtk_widget_get_scale_factor(GTK_WIDGET(self)));
return TRUE;
}