|
69 | 69 | #include <pal/system/SleepDisabler.h> |
70 | 70 | #include <wtf/Compiler.h> |
71 | 71 | #include <wtf/HashMap.h> |
| 72 | +#include <wtf/MathExtras.h> |
72 | 73 | #include <wtf/glib/GRefPtr.h> |
73 | 74 | #include <wtf/glib/RunLoopSourcePriority.h> |
74 | 75 | #include <wtf/glib/WTFGType.h> |
@@ -597,23 +598,6 @@ static void webkitWebViewBaseDispose(GObject* gobject) |
597 | 598 | G_OBJECT_CLASS(webkit_web_view_base_parent_class)->dispose(gobject); |
598 | 599 | } |
599 | 600 |
|
600 | | -static void webkitWebViewBaseConstructed(GObject* object) |
601 | | -{ |
602 | | - G_OBJECT_CLASS(webkit_web_view_base_parent_class)->constructed(object); |
603 | | - |
604 | | - GtkWidget* viewWidget = GTK_WIDGET(object); |
605 | | - gtk_widget_set_can_focus(viewWidget, TRUE); |
606 | | -#if !USE(GTK4) |
607 | | - gtk_drag_dest_set(viewWidget, static_cast<GtkDestDefaults>(0), nullptr, 0, |
608 | | - static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_PRIVATE)); |
609 | | - gtk_drag_dest_set_target_list(viewWidget, PasteboardHelper::singleton().targetList()); |
610 | | -#endif |
611 | | - |
612 | | - WebKitWebViewBasePrivate* priv = WEBKIT_WEB_VIEW_BASE(object)->priv; |
613 | | - priv->pageClient = makeUnique<PageClientImpl>(viewWidget); |
614 | | - priv->dialog = nullptr; |
615 | | -} |
616 | | - |
617 | 601 | #if USE(GTK4) |
618 | 602 | void webkitWebViewBaseSnapshot(GtkWidget* widget, GtkSnapshot* snapshot) |
619 | 603 | { |
@@ -1025,7 +1009,22 @@ static gboolean webkitWebViewBaseScrollEvent(GtkWidget* widget, GdkEventScroll* |
1025 | 1009 |
|
1026 | 1010 | return GDK_EVENT_STOP; |
1027 | 1011 | } |
| 1012 | +#endif |
| 1013 | + |
| 1014 | +#if USE(GTK4) |
| 1015 | +static gboolean webkitWebViewBaseScroll(WebKitWebViewBase* webViewBase, double x, double y, GtkEventController* controller) |
| 1016 | +{ |
| 1017 | + if (webViewBase->priv->dialog) |
| 1018 | + return GDK_EVENT_PROPAGATE; |
| 1019 | + |
| 1020 | + // FIXME: invert axis in case of SHIFT. |
| 1021 | + webViewBase->priv->pageProxy->handleWheelEvent(NativeWebWheelEvent(gtk_event_controller_get_current_event(controller), { clampToInteger(x), clampToInteger(y) })); |
| 1022 | + |
| 1023 | + return GDK_EVENT_STOP; |
| 1024 | +} |
| 1025 | +#endif |
1028 | 1026 |
|
| 1027 | +#if !USE(GTK4) |
1029 | 1028 | static gboolean webkitWebViewBasePopupMenu(GtkWidget* widget) |
1030 | 1029 | { |
1031 | 1030 | WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget); |
@@ -1503,6 +1502,28 @@ static void webkitWebViewBaseDestroy(GtkWidget* widget) |
1503 | 1502 | GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->destroy(widget); |
1504 | 1503 | } |
1505 | 1504 |
|
| 1505 | +static void webkitWebViewBaseConstructed(GObject* object) |
| 1506 | +{ |
| 1507 | + G_OBJECT_CLASS(webkit_web_view_base_parent_class)->constructed(object); |
| 1508 | + |
| 1509 | + GtkWidget* viewWidget = GTK_WIDGET(object); |
| 1510 | + gtk_widget_set_can_focus(viewWidget, TRUE); |
| 1511 | +#if !USE(GTK4) |
| 1512 | + gtk_drag_dest_set(viewWidget, static_cast<GtkDestDefaults>(0), nullptr, 0, |
| 1513 | + static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_PRIVATE)); |
| 1514 | + gtk_drag_dest_set_target_list(viewWidget, PasteboardHelper::singleton().targetList()); |
| 1515 | +#endif |
| 1516 | + |
| 1517 | + WebKitWebViewBasePrivate* priv = WEBKIT_WEB_VIEW_BASE(object)->priv; |
| 1518 | + priv->pageClient = makeUnique<PageClientImpl>(viewWidget); |
| 1519 | + |
| 1520 | +#if USE(GTK4) |
| 1521 | + auto* controller = gtk_event_controller_scroll_new(GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES); |
| 1522 | + g_signal_connect_object(controller, "scroll", G_CALLBACK(webkitWebViewBaseScroll), viewWidget, G_CONNECT_SWAPPED); |
| 1523 | + gtk_widget_add_controller(viewWidget, controller); |
| 1524 | +#endif |
| 1525 | +} |
| 1526 | + |
1506 | 1527 | static void webkit_web_view_base_class_init(WebKitWebViewBaseClass* webkitWebViewBaseClass) |
1507 | 1528 | { |
1508 | 1529 | GtkWidgetClass* widgetClass = GTK_WIDGET_CLASS(webkitWebViewBaseClass); |
|
0 commit comments