summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp')
-rw-r--r--Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp111
1 files changed, 41 insertions, 70 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp
index c5e4553aa..5a3a47273 100644
--- a/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp
+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitContextMenuItem.cpp
@@ -22,17 +22,16 @@
#include "APIArray.h"
#include "WebContextMenuItem.h"
-#include "WebContextMenuItemData.h"
+#include "WebContextMenuItemGtk.h"
#include "WebKitContextMenuActionsPrivate.h"
#include "WebKitContextMenuItemPrivate.h"
#include "WebKitContextMenuPrivate.h"
#include <WebCore/ContextMenu.h>
#include <WebCore/ContextMenuItem.h>
#include <gtk/gtk.h>
-#include <wtf/OwnPtr.h>
-#include <wtf/PassOwnPtr.h>
-#include <wtf/gobject/GRefPtr.h>
-#include <wtf/gobject/GUniquePtr.h>
+#include <memory>
+#include <wtf/glib/GRefPtr.h>
+#include <wtf/glib/GUniquePtr.h>
using namespace WebKit;
using namespace WebCore;
@@ -57,13 +56,13 @@ struct _WebKitContextMenuItemPrivate {
webkitContextMenuSetParentItem(subMenu.get(), 0);
}
- OwnPtr<ContextMenuItem> menuItem;
+ std::unique_ptr<WebContextMenuItemGtk> menuItem;
GRefPtr<WebKitContextMenu> subMenu;
};
WEBKIT_DEFINE_TYPE(WebKitContextMenuItem, webkit_context_menu_item, G_TYPE_INITIALLY_UNOWNED)
-static void webkit_context_menu_item_class_init(WebKitContextMenuItemClass* itemClass)
+static void webkit_context_menu_item_class_init(WebKitContextMenuItemClass*)
{
}
@@ -85,71 +84,44 @@ static void webkitContextMenuItemSetSubMenu(WebKitContextMenuItem* item, GRefPtr
return;
if (item->priv->subMenu)
- webkitContextMenuSetParentItem(item->priv->subMenu.get(), 0);
+ webkitContextMenuSetParentItem(item->priv->subMenu.get(), nullptr);
item->priv->subMenu = subMenu;
if (subMenu)
webkitContextMenuSetParentItem(subMenu.get(), item);
}
-WebKitContextMenuItem* webkitContextMenuItemCreate(WebContextMenuItem* webItem)
+WebKitContextMenuItem* webkitContextMenuItemCreate(const WebContextMenuItemData& itemData)
{
WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, NULL));
- WebContextMenuItemData* itemData = webItem->data();
- item->priv->menuItem = WTF::adoptPtr(new ContextMenuItem(itemData->type(), itemData->action(), itemData->title(), itemData->enabled(), itemData->checked()));
- const Vector<WebContextMenuItemData>& subMenu = itemData->submenu();
- if (!subMenu.size())
- return item;
-
- Vector<RefPtr<API::Object>> subMenuItems;
- subMenuItems.reserveInitialCapacity(subMenu.size());
- for (size_t i = 0; i < subMenu.size(); ++i)
- subMenuItems.uncheckedAppend(WebContextMenuItem::create(subMenu[i]).get());
- webkitContextMenuItemSetSubMenu(item, adoptGRef(webkitContextMenuCreate(API::Array::create(std::move(subMenuItems)).get())));
- return item;
-}
-
-static WebKitContextMenuItem* webkitContextMenuItemCreateForGtkItem(GtkMenuItem* menuItem)
-{
- WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, NULL));
- item->priv->menuItem = WTF::adoptPtr(new ContextMenuItem(menuItem));
- webkitContextMenuItemSetSubMenuFromGtkMenu(item, GTK_MENU(gtk_menu_item_get_submenu(menuItem)));
+ item->priv->menuItem = std::make_unique<WebContextMenuItemGtk>(itemData);
+ const Vector<WebContextMenuItemData>& subMenu = itemData.submenu();
+ if (!subMenu.isEmpty())
+ webkitContextMenuItemSetSubMenu(item, adoptGRef(webkitContextMenuCreate(subMenu)));
return item;
}
-void webkitContextMenuItemSetSubMenuFromGtkMenu(WebKitContextMenuItem* item, GtkMenu* subMenu)
+WebContextMenuItemGtk webkitContextMenuItemToWebContextMenuItemGtk(WebKitContextMenuItem* item)
{
- if (!subMenu)
- return;
-
- GUniquePtr<GList> children(gtk_container_get_children(GTK_CONTAINER(subMenu)));
- if (!g_list_length(children.get()))
- return;
-
- webkitContextMenuItemSetSubMenu(item, adoptGRef(webkit_context_menu_new()));
- for (GList* listItem = children.get(); listItem; listItem = g_list_next(listItem)) {
- GRefPtr<GtkWidget> widget = GTK_WIDGET(listItem->data);
- if (!GTK_IS_MENU_ITEM(widget.get()))
- continue;
-
- gtk_container_remove(GTK_CONTAINER(subMenu), widget.get());
- GtkMenuItem* menuItem = GTK_MENU_ITEM(widget.leakRef());
- g_object_force_floating(G_OBJECT(menuItem));
- webkit_context_menu_append(item->priv->subMenu.get(), webkitContextMenuItemCreateForGtkItem(menuItem));
+ if (item->priv->subMenu) {
+ Vector<WebContextMenuItemGtk> subMenuItems;
+ webkitContextMenuPopulate(item->priv->subMenu.get(), subMenuItems);
+ return WebContextMenuItemGtk(*item->priv->menuItem, WTFMove(subMenuItems));
}
+
+ return *item->priv->menuItem;
}
-GtkMenuItem* webkitContextMenuItemRelease(WebKitContextMenuItem* item)
+WebContextMenuItemData webkitContextMenuItemToWebContextMenuItemData(WebKitContextMenuItem* item)
{
if (item->priv->subMenu) {
- Vector<ContextMenuItem> subMenuItems;
+ Vector<WebContextMenuItemData> subMenuItems;
webkitContextMenuPopulate(item->priv->subMenu.get(), subMenuItems);
- ContextMenu subMenu(platformMenuDescription(subMenuItems));
- item->priv->menuItem->setSubMenu(&subMenu);
+ return WebContextMenuItemData(item->priv->menuItem->action(), item->priv->menuItem->title(), item->priv->menuItem->enabled(), subMenuItems);
}
- return item->priv->menuItem->releasePlatformDescription();
+ return WebContextMenuItemData(item->priv->menuItem->type(), item->priv->menuItem->action(), item->priv->menuItem->title(), item->priv->menuItem->enabled(), item->priv->menuItem->checked());
}
/**
@@ -162,11 +134,10 @@ GtkMenuItem* webkitContextMenuItemRelease(WebKitContextMenuItem* item)
*/
WebKitContextMenuItem* webkit_context_menu_item_new(GtkAction* action)
{
- g_return_val_if_fail(GTK_IS_ACTION(action), 0);
+ g_return_val_if_fail(GTK_IS_ACTION(action), nullptr);
- WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, NULL));
- item->priv->menuItem = WTF::adoptPtr(new ContextMenuItem(GTK_MENU_ITEM(gtk_action_create_menu_item(action))));
- item->priv->menuItem->setAction(ContextMenuItemBaseApplicationTag);
+ WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, nullptr));
+ item->priv->menuItem = std::make_unique<WebContextMenuItemGtk>(action);
return item;
}
@@ -189,11 +160,11 @@ WebKitContextMenuItem* webkit_context_menu_item_new(GtkAction* action)
*/
WebKitContextMenuItem* webkit_context_menu_item_new_from_stock_action(WebKitContextMenuAction action)
{
- g_return_val_if_fail(action > WEBKIT_CONTEXT_MENU_ACTION_NO_ACTION && action < WEBKIT_CONTEXT_MENU_ACTION_CUSTOM, 0);
+ g_return_val_if_fail(action > WEBKIT_CONTEXT_MENU_ACTION_NO_ACTION && action < WEBKIT_CONTEXT_MENU_ACTION_CUSTOM, nullptr);
- WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, NULL));
+ WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, nullptr));
ContextMenuItemType type = webkitContextMenuActionIsCheckable(action) ? CheckableActionType : ActionType;
- item->priv->menuItem = WTF::adoptPtr(new ContextMenuItem(type, webkitContextMenuActionGetActionTag(action), webkitContextMenuActionGetLabel(action)));
+ item->priv->menuItem = std::make_unique<WebContextMenuItemGtk>(type, webkitContextMenuActionGetActionTag(action), webkitContextMenuActionGetLabel(action));
return item;
}
@@ -211,11 +182,11 @@ WebKitContextMenuItem* webkit_context_menu_item_new_from_stock_action(WebKitCont
*/
WebKitContextMenuItem* webkit_context_menu_item_new_from_stock_action_with_label(WebKitContextMenuAction action, const gchar* label)
{
- g_return_val_if_fail(action > WEBKIT_CONTEXT_MENU_ACTION_NO_ACTION && action < WEBKIT_CONTEXT_MENU_ACTION_CUSTOM, 0);
+ g_return_val_if_fail(action > WEBKIT_CONTEXT_MENU_ACTION_NO_ACTION && action < WEBKIT_CONTEXT_MENU_ACTION_CUSTOM, nullptr);
- WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, NULL));
+ WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, nullptr));
ContextMenuItemType type = webkitContextMenuActionIsCheckable(action) ? CheckableActionType : ActionType;
- item->priv->menuItem = WTF::adoptPtr(new ContextMenuItem(type, webkitContextMenuActionGetActionTag(action), String::fromUTF8(label)));
+ item->priv->menuItem = std::make_unique<WebContextMenuItemGtk>(type, webkitContextMenuActionGetActionTag(action), String::fromUTF8(label));
return item;
}
@@ -231,14 +202,14 @@ WebKitContextMenuItem* webkit_context_menu_item_new_from_stock_action_with_label
*/
WebKitContextMenuItem* webkit_context_menu_item_new_with_submenu(const gchar* label, WebKitContextMenu* submenu)
{
- g_return_val_if_fail(label, 0);
- g_return_val_if_fail(WEBKIT_IS_CONTEXT_MENU(submenu), 0);
+ g_return_val_if_fail(label, nullptr);
+ g_return_val_if_fail(WEBKIT_IS_CONTEXT_MENU(submenu), nullptr);
if (checkAndWarnIfMenuHasParentItem(submenu))
- return 0;
+ return nullptr;
- WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, NULL));
- item->priv->menuItem = WTF::adoptPtr(new ContextMenuItem(SubmenuType, ContextMenuItemBaseApplicationTag, String::fromUTF8(label)));
+ WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, nullptr));
+ item->priv->menuItem = std::make_unique<WebContextMenuItemGtk>(ActionType, ContextMenuItemBaseApplicationTag, String::fromUTF8(label));
item->priv->subMenu = submenu;
webkitContextMenuSetParentItem(submenu, item);
@@ -254,8 +225,8 @@ WebKitContextMenuItem* webkit_context_menu_item_new_with_submenu(const gchar* la
*/
WebKitContextMenuItem* webkit_context_menu_item_new_separator(void)
{
- WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, NULL));
- item->priv->menuItem = WTF::adoptPtr(new ContextMenuItem(SeparatorType, ContextMenuItemTagNoAction, String()));
+ WebKitContextMenuItem* item = WEBKIT_CONTEXT_MENU_ITEM(g_object_new(WEBKIT_TYPE_CONTEXT_MENU_ITEM, nullptr));
+ item->priv->menuItem = std::make_unique<WebContextMenuItemGtk>(SeparatorType, ContextMenuItemTagNoAction, String());
return item;
}
@@ -271,7 +242,7 @@ WebKitContextMenuItem* webkit_context_menu_item_new_separator(void)
*/
GtkAction* webkit_context_menu_item_get_action(WebKitContextMenuItem* item)
{
- g_return_val_if_fail(WEBKIT_IS_CONTEXT_MENU_ITEM(item), 0);
+ g_return_val_if_fail(WEBKIT_IS_CONTEXT_MENU_ITEM(item), nullptr);
return item->priv->menuItem->gtkAction();
}
@@ -291,7 +262,7 @@ WebKitContextMenuAction webkit_context_menu_item_get_stock_action(WebKitContextM
{
g_return_val_if_fail(WEBKIT_IS_CONTEXT_MENU_ITEM(item), WEBKIT_CONTEXT_MENU_ACTION_NO_ACTION);
- return webkitContextMenuActionGetForContextMenuItem(item->priv->menuItem.get());
+ return webkitContextMenuActionGetForContextMenuItem(*item->priv->menuItem);
}
/**