|
Lines 466-472
static void webkitWebViewBaseUnrealize(GtkWidget* widget)
a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec1
|
| 466 |
static bool webkitWebViewChildIsInternalWidget(WebKitWebViewBase* webViewBase, GtkWidget* widget) |
466 |
static bool webkitWebViewChildIsInternalWidget(WebKitWebViewBase* webViewBase, GtkWidget* widget) |
| 467 |
{ |
467 |
{ |
| 468 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
468 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
| 469 |
return widget == priv->inspectorView || widget == priv->dialog; |
469 |
return widget == priv->inspectorView || widget == priv->dialog || widget == priv->keyBindingTranslator.widget(); |
| 470 |
} |
470 |
} |
| 471 |
|
471 |
|
| 472 |
static void webkitWebViewBaseContainerAdd(GtkContainer* container, GtkWidget* widget) |
472 |
static void webkitWebViewBaseContainerAdd(GtkContainer* container, GtkWidget* widget) |
|
Lines 528-534
static void webkitWebViewBaseContainerRemove(GtkContainer* container, GtkWidget*
a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec2
|
| 528 |
priv->dialog = nullptr; |
528 |
priv->dialog = nullptr; |
| 529 |
if (gtk_widget_get_visible(widgetContainer)) |
529 |
if (gtk_widget_get_visible(widgetContainer)) |
| 530 |
gtk_widget_grab_focus(widgetContainer); |
530 |
gtk_widget_grab_focus(widgetContainer); |
| 531 |
} else { |
531 |
} else if (priv->keyBindingTranslator.widget() == widget) |
|
|
532 |
priv->keyBindingTranslator.destroyed(); |
| 533 |
else { |
| 532 |
ASSERT(priv->children.contains(widget)); |
534 |
ASSERT(priv->children.contains(widget)); |
| 533 |
priv->children.remove(widget); |
535 |
priv->children.remove(widget); |
| 534 |
} |
536 |
} |
|
Lines 553-558
static void webkitWebViewBaseContainerForall(GtkContainer* container, gboolean i
a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec3
|
| 553 |
(*callback)(child, callbackData); |
555 |
(*callback)(child, callbackData); |
| 554 |
} |
556 |
} |
| 555 |
|
557 |
|
|
|
558 |
if (includeInternals && priv->keyBindingTranslator.widget()) |
| 559 |
(*callback)(priv->keyBindingTranslator.widget(), callbackData); |
| 560 |
|
| 556 |
if (includeInternals && priv->inspectorView) |
561 |
if (includeInternals && priv->inspectorView) |
| 557 |
(*callback)(priv->inspectorView, callbackData); |
562 |
(*callback)(priv->inspectorView, callbackData); |
| 558 |
|
563 |
|
|
Lines 876-882
static gboolean webkitWebViewBaseKeyReleaseEvent(GtkWidget* widget, GdkEventKey*
a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec4
|
| 876 |
|
881 |
|
| 877 |
return GDK_EVENT_STOP; |
882 |
return GDK_EVENT_STOP; |
| 878 |
} |
883 |
} |
|
|
884 |
#endif |
| 885 |
|
| 886 |
#if USE(GTK4) |
| 887 |
static void webkitWebViewBaseFocusEnter(WebKitWebViewBase* webViewBase, GtkEventController*) |
| 888 |
{ |
| 889 |
webkitWebViewBaseSetFocus(webViewBase, true); |
| 890 |
} |
| 891 |
|
| 892 |
static void webkitWebViewBaseFocusLeave(WebKitWebViewBase* webViewBase, GtkEventController*) |
| 893 |
{ |
| 894 |
webkitWebViewBaseSetFocus(webViewBase, false); |
| 895 |
} |
| 896 |
|
| 897 |
static gboolean webkitWebViewBaseKeyPressed(WebKitWebViewBase* webViewBase, unsigned keyval, unsigned, GdkModifierType state, GtkEventController* controller) |
| 898 |
{ |
| 899 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
| 900 |
|
| 901 |
#if ENABLE(DEVELOPER_MODE) && OS(LINUX) |
| 902 |
if ((state & GDK_CONTROL_MASK) && (state & GDK_SHIFT_MASK) && keyval == GDK_KEY_G) { |
| 903 |
auto& preferences = priv->pageProxy->preferences(); |
| 904 |
preferences.setResourceUsageOverlayVisible(!preferences.resourceUsageOverlayVisible()); |
| 905 |
return GDK_EVENT_STOP; |
| 906 |
} |
| 907 |
#endif |
| 879 |
|
908 |
|
|
|
909 |
if (priv->dialog) |
| 910 |
return gtk_event_controller_key_forward(GTK_EVENT_CONTROLLER_KEY(controller), priv->dialog); |
| 911 |
|
| 912 |
#if ENABLE(FULLSCREEN_API) |
| 913 |
if (priv->fullScreenModeActive) { |
| 914 |
switch (keyval) { |
| 915 |
case GDK_KEY_Escape: |
| 916 |
case GDK_KEY_f: |
| 917 |
case GDK_KEY_F: |
| 918 |
priv->pageProxy->fullScreenManager()->requestExitFullScreen(); |
| 919 |
return GDK_EVENT_STOP; |
| 920 |
default: |
| 921 |
break; |
| 922 |
} |
| 923 |
} |
| 924 |
#endif |
| 925 |
|
| 926 |
auto* event = gtk_event_controller_get_current_event(controller); |
| 927 |
auto filterResult = priv->inputMethodFilter.filterKeyEvent(event); |
| 928 |
if (!filterResult.handled) { |
| 929 |
priv->pageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(event, filterResult.keyText, |
| 930 |
NativeWebKeyboardEvent::HandledByInputMethod::No, WTF::nullopt, WTF::nullopt, priv->keyBindingTranslator.commandsForKeyEvent(GTK_EVENT_CONTROLLER_KEY(controller)))); |
| 931 |
} |
| 932 |
|
| 933 |
return GDK_EVENT_STOP; |
| 934 |
} |
| 935 |
|
| 936 |
static void webkitWebViewBaseKeyReleased(WebKitWebViewBase* webViewBase, unsigned, unsigned, GdkModifierType, GtkEventController* controller) |
| 937 |
{ |
| 938 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
| 939 |
|
| 940 |
auto* event = gtk_event_controller_get_current_event(controller); |
| 941 |
if (!priv->inputMethodFilter.filterKeyEvent(event).handled) { |
| 942 |
priv->pageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(event, { }, |
| 943 |
NativeWebKeyboardEvent::HandledByInputMethod::No, WTF::nullopt, WTF::nullopt, { })); |
| 944 |
} |
| 945 |
} |
| 946 |
#endif |
| 947 |
|
| 948 |
#if !USE(GTK4) |
| 880 |
static void webkitWebViewBaseHandleMouseEvent(WebKitWebViewBase* webViewBase, GdkEvent* event) |
949 |
static void webkitWebViewBaseHandleMouseEvent(WebKitWebViewBase* webViewBase, GdkEvent* event) |
| 881 |
{ |
950 |
{ |
| 882 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
951 |
WebKitWebViewBasePrivate* priv = webViewBase->priv; |
|
Lines 1524-1529
static void webkitWebViewBaseHierarchyChanged(GtkWidget* widget, GtkWidget* oldT
a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec5
|
| 1524 |
} |
1593 |
} |
| 1525 |
#endif |
1594 |
#endif |
| 1526 |
|
1595 |
|
|
|
1596 |
#if USE(GTK4) |
| 1597 |
static gboolean webkitWebViewBaseGrabFocus(GtkWidget* widget) |
| 1598 |
{ |
| 1599 |
gtk_root_set_focus(gtk_widget_get_root(widget), widget); |
| 1600 |
return TRUE; |
| 1601 |
} |
| 1602 |
#endif |
| 1603 |
|
| 1527 |
static gboolean webkitWebViewBaseFocus(GtkWidget* widget, GtkDirectionType direction) |
1604 |
static gboolean webkitWebViewBaseFocus(GtkWidget* widget, GtkDirectionType direction) |
| 1528 |
{ |
1605 |
{ |
| 1529 |
// If a dialog is active, we need to forward focus events there. This |
1606 |
// If a dialog is active, we need to forward focus events there. This |
|
Lines 1553-1567
static void webkitWebViewBaseConstructed(GObject* object)
a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec6
|
| 1553 |
|
1630 |
|
| 1554 |
GtkWidget* viewWidget = GTK_WIDGET(object); |
1631 |
GtkWidget* viewWidget = GTK_WIDGET(object); |
| 1555 |
gtk_widget_set_can_focus(viewWidget, TRUE); |
1632 |
gtk_widget_set_can_focus(viewWidget, TRUE); |
|
|
1633 |
|
| 1634 |
WebKitWebViewBasePrivate* priv = WEBKIT_WEB_VIEW_BASE(object)->priv; |
| 1635 |
priv->pageClient = makeUnique<PageClientImpl>(viewWidget); |
| 1636 |
gtk_container_add(GTK_CONTAINER(viewWidget), priv->keyBindingTranslator.widget()); |
| 1637 |
|
| 1556 |
#if !USE(GTK4) |
1638 |
#if !USE(GTK4) |
| 1557 |
gtk_drag_dest_set(viewWidget, static_cast<GtkDestDefaults>(0), nullptr, 0, |
1639 |
gtk_drag_dest_set(viewWidget, static_cast<GtkDestDefaults>(0), nullptr, 0, |
| 1558 |
static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_PRIVATE)); |
1640 |
static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_PRIVATE)); |
| 1559 |
gtk_drag_dest_set_target_list(viewWidget, PasteboardHelper::singleton().targetList()); |
1641 |
gtk_drag_dest_set_target_list(viewWidget, PasteboardHelper::singleton().targetList()); |
| 1560 |
#endif |
1642 |
#endif |
| 1561 |
|
1643 |
|
| 1562 |
WebKitWebViewBasePrivate* priv = WEBKIT_WEB_VIEW_BASE(object)->priv; |
|
|
| 1563 |
priv->pageClient = makeUnique<PageClientImpl>(viewWidget); |
| 1564 |
|
| 1565 |
#if USE(GTK4) |
1644 |
#if USE(GTK4) |
| 1566 |
auto* controller = gtk_event_controller_scroll_new(GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES); |
1645 |
auto* controller = gtk_event_controller_scroll_new(GTK_EVENT_CONTROLLER_SCROLL_BOTH_AXES); |
| 1567 |
g_signal_connect_object(controller, "scroll", G_CALLBACK(webkitWebViewBaseScroll), viewWidget, G_CONNECT_SWAPPED); |
1646 |
g_signal_connect_object(controller, "scroll", G_CALLBACK(webkitWebViewBaseScroll), viewWidget, G_CONNECT_SWAPPED); |
|
Lines 1572-1577
static void webkitWebViewBaseConstructed(GObject* object)
a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec7
|
| 1572 |
g_signal_connect_object(controller, "motion", G_CALLBACK(webkitWebViewBaseMotion), viewWidget, G_CONNECT_SWAPPED); |
1651 |
g_signal_connect_object(controller, "motion", G_CALLBACK(webkitWebViewBaseMotion), viewWidget, G_CONNECT_SWAPPED); |
| 1573 |
g_signal_connect_object(controller, "leave", G_CALLBACK(webkitWebViewBaseLeave), viewWidget, G_CONNECT_SWAPPED); |
1652 |
g_signal_connect_object(controller, "leave", G_CALLBACK(webkitWebViewBaseLeave), viewWidget, G_CONNECT_SWAPPED); |
| 1574 |
gtk_widget_add_controller(viewWidget, controller); |
1653 |
gtk_widget_add_controller(viewWidget, controller); |
|
|
1654 |
|
| 1655 |
controller = gtk_event_controller_focus_new(); |
| 1656 |
g_signal_connect_object(controller, "enter", G_CALLBACK(webkitWebViewBaseFocusEnter), viewWidget, G_CONNECT_SWAPPED); |
| 1657 |
g_signal_connect_object(controller, "leave", G_CALLBACK(webkitWebViewBaseFocusLeave), viewWidget, G_CONNECT_SWAPPED); |
| 1658 |
gtk_widget_add_controller(viewWidget, controller); |
| 1659 |
|
| 1660 |
controller = gtk_event_controller_key_new(); |
| 1661 |
g_signal_connect_object(controller, "key-pressed", G_CALLBACK(webkitWebViewBaseKeyPressed), viewWidget, G_CONNECT_SWAPPED); |
| 1662 |
g_signal_connect_object(controller, "key-released", G_CALLBACK(webkitWebViewBaseKeyReleased), viewWidget, G_CONNECT_SWAPPED); |
| 1663 |
gtk_widget_add_controller(viewWidget, controller); |
| 1575 |
#endif |
1664 |
#endif |
| 1576 |
} |
1665 |
} |
| 1577 |
|
1666 |
|
|
Lines 1594-1601
static void webkit_web_view_base_class_init(WebKitWebViewBaseClass* webkitWebVie
a/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp_sec8
|
| 1594 |
#endif |
1683 |
#endif |
| 1595 |
widgetClass->map = webkitWebViewBaseMap; |
1684 |
widgetClass->map = webkitWebViewBaseMap; |
| 1596 |
widgetClass->unmap = webkitWebViewBaseUnmap; |
1685 |
widgetClass->unmap = webkitWebViewBaseUnmap; |
| 1597 |
#if !USE(GTK4) |
1686 |
#if USE(GTK4) |
|
|
1687 |
widgetClass->grab_focus = webkitWebViewBaseGrabFocus; |
| 1598 |
widgetClass->focus = webkitWebViewBaseFocus; |
1688 |
widgetClass->focus = webkitWebViewBaseFocus; |
|
|
1689 |
#else |
| 1599 |
widgetClass->focus_in_event = webkitWebViewBaseFocusInEvent; |
1690 |
widgetClass->focus_in_event = webkitWebViewBaseFocusInEvent; |
| 1600 |
widgetClass->focus_out_event = webkitWebViewBaseFocusOutEvent; |
1691 |
widgetClass->focus_out_event = webkitWebViewBaseFocusOutEvent; |
| 1601 |
widgetClass->key_press_event = webkitWebViewBaseKeyPressEvent; |
1692 |
widgetClass->key_press_event = webkitWebViewBaseKeyPressEvent; |