Modified: trunk/Source/WebKit/ChangeLog (262136 => 262137)
--- trunk/Source/WebKit/ChangeLog 2020-05-26 04:48:57 UTC (rev 262136)
+++ trunk/Source/WebKit/ChangeLog 2020-05-26 07:59:30 UTC (rev 262137)
@@ -1,3 +1,19 @@
+2020-05-26 Carlos Garcia Campos <[email protected]>
+
+ [GTK4] Fix context menu
+ https://bugs.webkit.org/show_bug.cgi?id=212344
+
+ Reviewed by Adrian Perez de Castro.
+
+ * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+ (webkitWebViewBaseSizeAllocate): Call gtk_native_check_resize() on the popover to make it appear.
+ * UIProcess/gtk/WebContextMenuProxyGtk.cpp:
+ (WebKit::destroyMenuWidget): There's no gtk_widget_destroy() in GTK4 so we can just unparent it.
+ (WebKit::bindModelToMenuWidget): Do not set the action namespace because that's not possible in GTK4.
+ (WebKit::WebContextMenuProxyGtk::append): Use group.name again for the action name passed to
+ g_menu_item_set_action_and_target_value().
+ (WebKit::WebContextMenuProxyGtk::~WebContextMenuProxyGtk): Use destroyMenuWidget().
+
2020-05-25 Alex Christensen <[email protected]>
Expose more network metrics to WebCoreNSURLSession
Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp (262136 => 262137)
--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp 2020-05-26 04:48:57 UTC (rev 262136)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp 2020-05-26 07:59:30 UTC (rev 262137)
@@ -778,6 +778,11 @@
gtk_widget_size_allocate(priv->dialog, &childAllocation);
}
+#if USE(GTK4)
+ if (priv->activeContextMenuProxy)
+ gtk_native_check_resize(GTK_NATIVE(priv->activeContextMenuProxy->gtkWidget()));
+#endif
+
if (auto* drawingArea = static_cast<DrawingAreaProxyCoordinatedGraphics*>(priv->pageProxy->drawingArea()))
drawingArea->setSize(viewRect.size());
}
Modified: trunk/Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.cpp (262136 => 262137)
--- trunk/Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.cpp 2020-05-26 04:48:57 UTC (rev 262136)
+++ trunk/Source/WebKit/UIProcess/gtk/WebContextMenuProxyGtk.cpp 2020-05-26 07:59:30 UTC (rev 262137)
@@ -79,6 +79,11 @@
{
gtk_popover_menu_set_menu_model(GTK_POPOVER_MENU(widget), model);
}
+
+static inline void destroyMenuWidget(GtkWidget* widget)
+{
+ gtk_widget_unparent(widget);
+}
#else
const char* WebContextMenuProxyGtk::widgetDismissedSignal = "deactivate";
@@ -121,8 +126,13 @@
static inline void bindModelToMenuWidget(GtkWidget* widget, GMenuModel* model)
{
- gtk_menu_shell_bind_model(GTK_MENU_SHELL(widget), model, gContextMenuItemGroup, TRUE);
+ gtk_menu_shell_bind_model(GTK_MENU_SHELL(widget), model, nullptr, TRUE);
}
+
+static inline void destroyMenuWidget(GtkWidget* widget)
+{
+ gtk_widget_destroy(widget);
+}
#endif // USE(GTK4)
static void contextMenuItemActivatedCallback(GAction* action, GVariant*, WebPageProxy* page)
@@ -151,7 +161,8 @@
case ActionType:
case CheckableActionType: {
gMenuItem = adoptGRef(g_menu_item_new(menuItem.title().utf8().data(), nullptr));
- g_menu_item_set_action_and_target_value(gMenuItem.get(), g_action_get_name(action), menuItem.gActionTarget());
+ GUniquePtr<char> actionName(g_strdup_printf("%s.%s", gContextMenuItemGroup, g_action_get_name(action)));
+ g_menu_item_set_action_and_target_value(gMenuItem.get(), actionName.get(), menuItem.gActionTarget());
if (menuItem.action() < ContextMenuItemBaseApplicationTag) {
g_object_set_data(G_OBJECT(action), gContextMenuActionId, GINT_TO_POINTER(menuItem.action()));
@@ -280,9 +291,7 @@
m_signalHandlers.clear();
gtk_widget_insert_action_group(GTK_WIDGET(m_menu), gContextMenuItemGroup, nullptr);
-#if !USE(GTK4)
- gtk_widget_destroy(m_menu);
-#endif
+ destroyMenuWidget(m_menu);
}
} // namespace WebKit