ewk_context_menu_item.cpp [plain text]
#include "config.h"
#include "ewk_context_menu_item.h"
#include "ewk_context_menu_item_private.h"
#include "ewk_context_menu_private.h"
#include <WebKit/WKContextMenuItemTypes.h>
#include <wtf/text/CString.h>
using namespace WebKit;
static Ewk_Context_Menu_Item_Action getEwkActionFromWKTag(WKContextMenuItemTag action);
EwkContextMenuItem::EwkContextMenuItem(WKContextMenuItemRef item, EwkContextMenu* parentMenu)
: m_type(static_cast<Ewk_Context_Menu_Item_Type>(WKContextMenuItemGetType(item)))
, m_action(getEwkActionFromWKTag((WKContextMenuItemGetTag(item))))
, m_title(WKEinaSharedString(AdoptWK, WKContextMenuItemCopyTitle(item)))
, m_isChecked(WKContextMenuItemGetChecked(item))
, m_isEnabled(WKContextMenuItemGetEnabled(item))
, m_parentMenu(parentMenu)
{
if (WKContextMenuItemGetType(item) == kWKContextMenuItemTypeSubmenu) {
WKRetainPtr<WKArrayRef> menuItems = adoptWK(WKContextMenuCopySubmenuItems(item));
m_subMenu = EwkContextMenu::create(m_parentMenu->ewkView(), menuItems.get());
}
}
EwkContextMenuItem::EwkContextMenuItem(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled, PassRefPtr<EwkContextMenu> subMenu, EwkContextMenu* parentMenu)
: m_type(type)
, m_action(action)
, m_title(title)
, m_isChecked(checked)
, m_isEnabled(enabled)
, m_parentMenu(parentMenu)
, m_subMenu(subMenu)
{
}
Ewk_Context_Menu_Item* ewk_context_menu_item_new(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled)
{
return std::make_unique<Ewk_Context_Menu_Item>(type, action, title, checked, enabled).release();
}
Ewk_Context_Menu_Item* ewk_context_menu_item_new_with_submenu(Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool enabled, Ewk_Context_Menu* subMenu)
{
EWK_OBJ_GET_IMPL_OR_RETURN(EwkContextMenu, subMenu, subMenuImpl, nullptr);
return std::make_unique<Ewk_Context_Menu_Item>(EWK_SUBMENU_TYPE, action, title, false, enabled, subMenuImpl).release();
}
Ewk_Context_Menu_Item_Type ewk_context_menu_item_type_get(const Ewk_Context_Menu_Item* item)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, EWK_ACTION_TYPE);
return item->type();
}
Eina_Bool ewk_context_menu_item_type_set(Ewk_Context_Menu_Item* item, Ewk_Context_Menu_Item_Type type)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
item->setType(type);
return true;
}
Ewk_Context_Menu_Item_Action ewk_context_menu_item_action_get(const Ewk_Context_Menu_Item* item)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION);
return item->action();
}
Eina_Bool ewk_context_menu_item_action_set(Ewk_Context_Menu_Item* item, Ewk_Context_Menu_Item_Action action)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
item->setAction(action);
return true;
}
const char* ewk_context_menu_item_title_get(const Ewk_Context_Menu_Item* item)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, nullptr);
return item->title();
}
Eina_Bool ewk_context_menu_item_title_set(Ewk_Context_Menu_Item* item, const char* title)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
item->setTitle(title);
return true;
}
Eina_Bool ewk_context_menu_item_checked_get(const Ewk_Context_Menu_Item* item)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
return item->checked();
}
Eina_Bool ewk_context_menu_item_checked_set(Ewk_Context_Menu_Item* item, Eina_Bool checked)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
item->setChecked(checked);
return true;
}
Eina_Bool ewk_context_menu_item_enabled_get(const Ewk_Context_Menu_Item* item)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
return item->enabled();
}
Eina_Bool ewk_context_menu_item_enabled_set(Ewk_Context_Menu_Item* item, Eina_Bool enabled)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
item->setEnabled(enabled);
return true;
}
Ewk_Context_Menu* ewk_context_menu_item_parent_menu_get(const Ewk_Context_Menu_Item* item)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, nullptr);
return item->parentMenu();
}
Ewk_Context_Menu* ewk_context_menu_item_submenu_get(const Ewk_Context_Menu_Item* item)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(item, nullptr);
return item->subMenu();
}
static Ewk_Context_Menu_Item_Action getEwkActionFromWKTag(WKContextMenuItemTag action)
{
switch (action) {
case kWKContextMenuItemTagNoAction:
return EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION;
case kWKContextMenuItemTagOpenLinkInNewWindow:
return EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK_IN_NEW_WINDOW;
case kWKContextMenuItemTagDownloadLinkToDisk:
return EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_LINK_TO_DISK;
case kWKContextMenuItemTagCopyLinkToClipboard:
return EWK_CONTEXT_MENU_ITEM_TAG_COPY_LINK_TO_CLIPBOARD;
case kWKContextMenuItemTagOpenImageInNewWindow:
return EWK_CONTEXT_MENU_ITEM_TAG_OPEN_IMAGE_IN_NEW_WINDOW;
case kWKContextMenuItemTagDownloadImageToDisk:
return EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_IMAGE_TO_DISK;
case kWKContextMenuItemTagCopyImageToClipboard:
return EWK_CONTEXT_MENU_ITEM_TAG_COPY_IMAGE_TO_CLIPBOARD;
case kWKContextMenuItemTagCopyImageUrlToClipboard:
return EWK_CONTEXT_MENU_ITEM_TAG_COPY_IMAGE_URL_TO_CLIPBOARD;
case kWKContextMenuItemTagOpenFrameInNewWindow:
return EWK_CONTEXT_MENU_ITEM_TAG_OPEN_FRAME_IN_NEW_WINDOW;
case kWKContextMenuItemTagCopy:
return EWK_CONTEXT_MENU_ITEM_TAG_COPY;
case kWKContextMenuItemTagGoBack:
return EWK_CONTEXT_MENU_ITEM_TAG_GO_BACK;
case kWKContextMenuItemTagGoForward:
return EWK_CONTEXT_MENU_ITEM_TAG_GO_FORWARD;
case kWKContextMenuItemTagStop:
return EWK_CONTEXT_MENU_ITEM_TAG_STOP;
case kWKContextMenuItemTagReload:
return EWK_CONTEXT_MENU_ITEM_TAG_RELOAD;
case kWKContextMenuItemTagCut:
return EWK_CONTEXT_MENU_ITEM_TAG_CUT;
case kWKContextMenuItemTagPaste:
return EWK_CONTEXT_MENU_ITEM_TAG_PASTE;
case kWKContextMenuItemTagSelectAll:
return EWK_CONTEXT_MENU_ITEM_TAG_SELECT_ALL;
case kWKContextMenuItemTagSpellingGuess:
return EWK_CONTEXT_MENU_ITEM_TAG_SPELLING_GUESS;
case kWKContextMenuItemTagNoGuessesFound:
return EWK_CONTEXT_MENU_ITEM_TAG_NO_GUESSES_FOUND;
case kWKContextMenuItemTagIgnoreSpelling:
return EWK_CONTEXT_MENU_ITEM_TAG_IGNORE_SPELLING;
case kWKContextMenuItemTagLearnSpelling:
return EWK_CONTEXT_MENU_ITEM_TAG_LEARN_SPELLING;
case kWKContextMenuItemTagOther:
return EWK_CONTEXT_MENU_ITEM_TAG_OTHER;
case kWKContextMenuItemTagSearchInSpotlight:
return EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_IN_SPOTLIGHT;
case kWKContextMenuItemTagSearchWeb:
return EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_WEB;
case kWKContextMenuItemTagLookUpInDictionary:
return EWK_CONTEXT_MENU_ITEM_TAG_LOOK_UP_IN_DICTIONARY;
case kWKContextMenuItemTagOpenWithDefaultApplication:
return EWK_CONTEXT_MENU_ITEM_TAG_OPEN_WITH_DEFAULT_APPLICATION;
case kWKContextMenuItemTagPDFActualSize:
return EWK_CONTEXT_MENU_ITEM_PDFACTUAL_SIZE;
case kWKContextMenuItemTagPDFZoomIn:
return EWK_CONTEXT_MENU_ITEM_PDFZOOM_IN;
case kWKContextMenuItemTagPDFZoomOut:
return EWK_CONTEXT_MENU_ITEM_PDFZOOM_OUT;
case kWKContextMenuItemTagPDFAutoSize:
return EWK_CONTEXT_MENU_ITEM_PDFAUTO_SIZE;
case kWKContextMenuItemTagPDFSinglePage:
return EWK_CONTEXT_MENU_ITEM_PDFSINGLE_PAGE;
case kWKContextMenuItemTagPDFFacingPages:
return EWK_CONTEXT_MENU_ITEM_PDFFACING_PAGES;
case kWKContextMenuItemTagPDFContinuous:
return EWK_CONTEXT_MENU_ITEM_PDFCONTINUOUS;
case kWKContextMenuItemTagPDFNextPage:
return EWK_CONTEXT_MENU_ITEM_PDFNEXT_PAGE;
case kWKContextMenuItemTagPDFPreviousPage:
return EWK_CONTEXT_MENU_ITEM_PDFPREVIOUS_PAGE;
case kWKContextMenuItemTagOpenLink:
return EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK;
case kWKContextMenuItemTagIgnoreGrammar:
return EWK_CONTEXT_MENU_ITEM_TAG_IGNORE_GRAMMAR;
case kWKContextMenuItemTagSpellingMenu:
return EWK_CONTEXT_MENU_ITEM_TAG_SPELLING_MENU;
case kWKContextMenuItemTagShowSpellingPanel:
return EWK_CONTEXT_MENU_ITEM_TAG_SHOW_SPELLING_PANEL;
case kWKContextMenuItemTagCheckSpelling:
return EWK_CONTEXT_MENU_ITEM_TAG_CHECK_SPELLING;
case kWKContextMenuItemTagCheckSpellingWhileTyping:
return EWK_CONTEXT_MENU_ITEM_TAG_CHECK_SPELLING_WHILE_TYPING;
case kWKContextMenuItemTagCheckGrammarWithSpelling:
return EWK_CONTEXT_MENU_ITEM_TAG_CHECK_GRAMMAR_WITH_SPELLING;
case kWKContextMenuItemTagFontMenu:
return EWK_CONTEXT_MENU_ITEM_TAG_FONT_MENU;
case kWKContextMenuItemTagShowFonts:
return EWK_CONTEXT_MENU_ITEM_TAG_SHOW_FONTS;
case kWKContextMenuItemTagBold:
return EWK_CONTEXT_MENU_ITEM_TAG_BOLD;
case kWKContextMenuItemTagItalic:
return EWK_CONTEXT_MENU_ITEM_TAG_ITALIC;
case kWKContextMenuItemTagUnderline:
return EWK_CONTEXT_MENU_ITEM_TAG_UNDERLINE;
case kWKContextMenuItemTagOutline:
return EWK_CONTEXT_MENU_ITEM_TAG_OUTLINE;
case kWKContextMenuItemTagStyles:
return EWK_CONTEXT_MENU_ITEM_TAG_STYLES;
case kWKContextMenuItemTagShowColors:
return EWK_CONTEXT_MENU_ITEM_TAG_SHOW_COLORS;
case kWKContextMenuItemTagSpeechMenu:
return EWK_CONTEXT_MENU_ITEM_TAG_SPEECH_MENU;
case kWKContextMenuItemTagStartSpeaking:
return EWK_CONTEXT_MENU_ITEM_TAG_START_SPEAKING;
case kWKContextMenuItemTagStopSpeaking:
return EWK_CONTEXT_MENU_ITEM_TAG_STOP_SPEAKING;
case kWKContextMenuItemTagWritingDirectionMenu:
return EWK_CONTEXT_MENU_ITEM_TAG_WRITING_DIRECTION_MENU;
case kWKContextMenuItemTagDefaultDirection:
return EWK_CONTEXT_MENU_ITEM_TAG_DEFAULT_DIRECTION;
case kWKContextMenuItemTagLeftToRight:
return EWK_CONTEXT_MENU_ITEM_TAG_LEFT_TO_RIGHT;
case kWKContextMenuItemTagRightToLeft:
return EWK_CONTEXT_MENU_ITEM_TAG_RIGHT_TO_LEFT;
case kWKContextMenuItemTagPDFSinglePageScrolling:
return EWK_CONTEXT_MENU_ITEM_TAG_PDFSINGLE_PAGE_SCROLLING;
case kWKContextMenuItemTagPDFFacingPagesScrolling:
return EWK_CONTEXT_MENU_ITEM_TAG_PDFFACING_PAGES_SCROLLING;
case kWKContextMenuItemTagInspectElement:
return EWK_CONTEXT_MENU_ITEM_TAG_INSPECT_ELEMENT;
case kWKContextMenuItemTagTextDirectionMenu:
return EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_MENU;
case kWKContextMenuItemTagTextDirectionDefault:
return EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_DEFAULT;
case kWKContextMenuItemTagTextDirectionLeftToRight:
return EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_LEFT_TO_RIGHT;
case kWKContextMenuItemTagTextDirectionRightToLeft:
return EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_RIGHT_TO_LEFT;
case kWKContextMenuItemTagOpenMediaInNewWindow:
return EWK_CONTEXT_MENU_ITEM_OPEN_MEDIA_IN_NEW_WINDOW;
case kWKContextMenuItemTagDownloadMediaToDisk:
return EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_MEDIA_TO_DISK;
case kWKContextMenuItemTagCopyMediaLinkToClipboard:
return EWK_CONTEXT_MENU_ITEM_TAG_COPY_MEDIA_LINK_TO_CLIPBOARD;
case kWKContextMenuItemTagToggleMediaControls:
return EWK_CONTEXT_MENU_ITEM_TAG_TOGGLE_MEDIA_CONTROLS;
case kWKContextMenuItemTagToggleMediaLoop:
return EWK_CONTEXT_MENU_ITEM_TAG_TOGGLE_MEDIA_LOOP;
case kWKContextMenuItemTagEnterVideoFullscreen:
return EWK_CONTEXT_MENU_ITEM_TAG_ENTER_VIDEO_FULLSCREEN;
case kWKContextMenuItemTagMediaPlayPause:
return EWK_CONTEXT_MENU_ITEM_TAG_MEDIA_PLAY_PAUSE;
case kWKContextMenuItemTagMediaMute:
return EWK_CONTEXT_MENU_ITEM_TAG_MEDIA_MUTE;
case kWKContextMenuItemBaseApplicationTag:
return EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG;
default:
return static_cast<Ewk_Context_Menu_Item_Action>(action);
}
}