File: ewk_context_menu.cpp

package info (click to toggle)
qtwebkit-opensource-src 5.7.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 291,692 kB
  • ctags: 268,122
  • sloc: cpp: 1,360,420; python: 70,286; ansic: 42,986; perl: 35,476; ruby: 12,236; objc: 9,465; xml: 8,396; asm: 3,873; yacc: 2,397; sh: 1,647; makefile: 650; lex: 644; java: 110
file content (329 lines) | stat: -rw-r--r-- 13,106 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
/*
 * Copyright (C) 2012 Samsung Electronics. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "config.h"
#include "ewk_context_menu.h"

#include "APIObject.h"
#include "EwkView.h"
#include "WKArray.h"
#include "WKString.h"
#include "ewk_context_menu_item.h"
#include "ewk_context_menu_item_private.h"
#include "ewk_context_menu_private.h"

using namespace WebKit;

static WKContextMenuItemTag getWKTagFromEwkAction(Ewk_Context_Menu_Item_Action action);

EwkContextMenu::EwkContextMenu(EwkView* view, WKArrayRef items)
    : m_viewImpl(view)
    , m_contextMenuItems(0)
{
    size_t size = WKArrayGetSize(items);
    for (size_t i = 0; i < size; ++i)
        m_contextMenuItems = eina_list_append(m_contextMenuItems, Ewk_Context_Menu_Item::create(static_cast<WKContextMenuItemRef>(WKArrayGetItemAtIndex(items, i)), this).leakPtr());
}

EwkContextMenu::EwkContextMenu()
    : m_viewImpl(0)
    , m_contextMenuItems(0)
{
}

EwkContextMenu::EwkContextMenu(Eina_List* items)
    : m_viewImpl(0)
    , m_contextMenuItems(0)
{
    Eina_List* l;
    void* data;
    EINA_LIST_FOREACH(items, l, data) {
        if (EwkContextMenuItem* item = static_cast<EwkContextMenuItem*>(data)) {
            item->setParentMenu(this);
            m_contextMenuItems = eina_list_append(m_contextMenuItems, item);
        }
    }
}

EwkContextMenu::~EwkContextMenu()
{
    void* data;
    EINA_LIST_FREE(m_contextMenuItems, data)
        delete static_cast<Ewk_Context_Menu_Item*>(data);
}

void EwkContextMenu::hide()
{
    if (!m_viewImpl)
        return;

    m_viewImpl->hideContextMenu();
}

void EwkContextMenu::appendItem(EwkContextMenuItem* item)
{
    item->setParentMenu(this);

    if (item->type() == EWK_SUBMENU_TYPE)
        item->subMenu()->setEwkView(this->ewkView());

    m_contextMenuItems = eina_list_append(m_contextMenuItems, item);
}

void EwkContextMenu::removeItem(EwkContextMenuItem* item)
{
    m_contextMenuItems = eina_list_remove(m_contextMenuItems, item);
}

bool EwkContextMenu::contextMenuItemSelected(WKContextMenuItemRef item)
{
    if (!m_viewImpl)
        return false;

    WKPageSelectContextMenuItem(m_viewImpl->wkPage(), item);

    return true;
} 

Ewk_Context_Menu* ewk_context_menu_new()
{
    return EwkContextMenu::create().leakRef();
}

Ewk_Context_Menu* ewk_context_menu_new_with_items(Eina_List* items)
{
    return EwkContextMenu::create(items).leakRef();
}

Eina_Bool ewk_context_menu_item_append(Ewk_Context_Menu* menu, Ewk_Context_Menu_Item* item)
{
    EWK_OBJ_GET_IMPL_OR_RETURN(EwkContextMenu, menu, impl, false);
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);

    impl->appendItem(item);

    return true;
}

Eina_Bool ewk_context_menu_item_remove(Ewk_Context_Menu* menu, Ewk_Context_Menu_Item* item)
{
    EWK_OBJ_GET_IMPL_OR_RETURN(EwkContextMenu, menu, impl, false);

    impl->removeItem(item);

    return true;
}

Eina_Bool ewk_context_menu_hide(Ewk_Context_Menu* menu)
{
    EWK_OBJ_GET_IMPL_OR_RETURN(EwkContextMenu, menu, impl, false);

    impl->hide();

    return true;
}

const Eina_List* ewk_context_menu_items_get(const Ewk_Context_Menu* menu)
{
    EWK_OBJ_GET_IMPL_OR_RETURN(const EwkContextMenu, menu, impl, 0);

    return impl->items();
}

Eina_Bool ewk_context_menu_item_select(Ewk_Context_Menu* menu, Ewk_Context_Menu_Item* item)
{
    EWK_OBJ_GET_IMPL_OR_RETURN(EwkContextMenu, menu, impl, false);
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);

    WKContextMenuItemRef wkItem;

    switch (item->type()) {
    case EWK_ACTION_TYPE:
        wkItem = WKContextMenuItemCreateAsAction(getWKTagFromEwkAction(item->action()), adoptWK(WKStringCreateWithUTF8CString(item->title())).get(), item->enabled());
        break;
    case EWK_CHECKABLE_ACTION_TYPE:
        wkItem = WKContextMenuItemCreateAsCheckableAction(getWKTagFromEwkAction(item->action()), adoptWK(WKStringCreateWithUTF8CString(item->title())).get(), item->enabled(), item->checked());
        break;
    default:
        ASSERT_NOT_REACHED();
        return false;
    }

    return impl->contextMenuItemSelected(wkItem);
}

static WKContextMenuItemTag getWKTagFromEwkAction(Ewk_Context_Menu_Item_Action action)
{
    switch (action) {
    case EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION:
        return kWKContextMenuItemTagNoAction;
    case EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK_IN_NEW_WINDOW:
        return kWKContextMenuItemTagOpenLinkInNewWindow;
    case EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_LINK_TO_DISK:
        return kWKContextMenuItemTagDownloadLinkToDisk;
    case EWK_CONTEXT_MENU_ITEM_TAG_COPY_LINK_TO_CLIPBOARD:
        return kWKContextMenuItemTagCopyLinkToClipboard;
    case EWK_CONTEXT_MENU_ITEM_TAG_OPEN_IMAGE_IN_NEW_WINDOW:
        return kWKContextMenuItemTagOpenImageInNewWindow;
    case EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_IMAGE_TO_DISK:
        return kWKContextMenuItemTagDownloadImageToDisk;
    case EWK_CONTEXT_MENU_ITEM_TAG_COPY_IMAGE_TO_CLIPBOARD:
        return kWKContextMenuItemTagCopyImageToClipboard;
    case EWK_CONTEXT_MENU_ITEM_TAG_COPY_IMAGE_URL_TO_CLIPBOARD:
        return kWKContextMenuItemTagCopyImageUrlToClipboard;
    case EWK_CONTEXT_MENU_ITEM_TAG_OPEN_FRAME_IN_NEW_WINDOW:
        return kWKContextMenuItemTagOpenFrameInNewWindow;
    case EWK_CONTEXT_MENU_ITEM_TAG_COPY:
        return kWKContextMenuItemTagCopy;
    case EWK_CONTEXT_MENU_ITEM_TAG_GO_BACK:
        return kWKContextMenuItemTagGoBack;
    case EWK_CONTEXT_MENU_ITEM_TAG_GO_FORWARD:
        return kWKContextMenuItemTagGoForward;
    case EWK_CONTEXT_MENU_ITEM_TAG_STOP:
        return kWKContextMenuItemTagStop;
    case EWK_CONTEXT_MENU_ITEM_TAG_RELOAD:
        return kWKContextMenuItemTagReload;
    case EWK_CONTEXT_MENU_ITEM_TAG_CUT:
        return kWKContextMenuItemTagCut;
    case EWK_CONTEXT_MENU_ITEM_TAG_PASTE:
        return kWKContextMenuItemTagPaste;
    case EWK_CONTEXT_MENU_ITEM_TAG_SELECT_ALL:
        return kWKContextMenuItemTagSelectAll;
    case EWK_CONTEXT_MENU_ITEM_TAG_SPELLING_GUESS:
        return kWKContextMenuItemTagSpellingGuess;
    case EWK_CONTEXT_MENU_ITEM_TAG_NO_GUESSES_FOUND:
        return kWKContextMenuItemTagNoGuessesFound;
    case EWK_CONTEXT_MENU_ITEM_TAG_IGNORE_SPELLING:
        return kWKContextMenuItemTagIgnoreSpelling;
    case EWK_CONTEXT_MENU_ITEM_TAG_LEARN_SPELLING:
        return kWKContextMenuItemTagLearnSpelling;
    case EWK_CONTEXT_MENU_ITEM_TAG_OTHER:
        return kWKContextMenuItemTagOther;
    case EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_IN_SPOTLIGHT:
        return kWKContextMenuItemTagSearchInSpotlight;
    case EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_WEB:
        return kWKContextMenuItemTagSearchWeb;
    case EWK_CONTEXT_MENU_ITEM_TAG_LOOK_UP_IN_DICTIONARY:
        return kWKContextMenuItemTagLookUpInDictionary;
    case EWK_CONTEXT_MENU_ITEM_TAG_OPEN_WITH_DEFAULT_APPLICATION:
        return kWKContextMenuItemTagOpenWithDefaultApplication;
    case EWK_CONTEXT_MENU_ITEM_PDFACTUAL_SIZE:
        return kWKContextMenuItemTagPDFActualSize;
    case EWK_CONTEXT_MENU_ITEM_PDFZOOM_IN:
        return kWKContextMenuItemTagPDFZoomIn;
    case EWK_CONTEXT_MENU_ITEM_PDFZOOM_OUT:
        return kWKContextMenuItemTagPDFZoomOut;
    case EWK_CONTEXT_MENU_ITEM_PDFAUTO_SIZE:
        return kWKContextMenuItemTagPDFAutoSize;
    case EWK_CONTEXT_MENU_ITEM_PDFSINGLE_PAGE:
        return kWKContextMenuItemTagPDFSinglePage;
    case EWK_CONTEXT_MENU_ITEM_PDFFACING_PAGES:
        return kWKContextMenuItemTagPDFFacingPages;
    case EWK_CONTEXT_MENU_ITEM_PDFCONTINUOUS:
        return kWKContextMenuItemTagPDFContinuous;
    case EWK_CONTEXT_MENU_ITEM_PDFNEXT_PAGE:
        return kWKContextMenuItemTagPDFNextPage;
    case EWK_CONTEXT_MENU_ITEM_PDFPREVIOUS_PAGE:
        return kWKContextMenuItemTagPDFPreviousPage;
    case EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK:
        return kWKContextMenuItemTagOpenLink;
    case EWK_CONTEXT_MENU_ITEM_TAG_IGNORE_GRAMMAR:
        return kWKContextMenuItemTagIgnoreGrammar;
    case EWK_CONTEXT_MENU_ITEM_TAG_SPELLING_MENU:
        return kWKContextMenuItemTagSpellingMenu;
    case EWK_CONTEXT_MENU_ITEM_TAG_SHOW_SPELLING_PANEL:
        return kWKContextMenuItemTagShowSpellingPanel;
    case EWK_CONTEXT_MENU_ITEM_TAG_CHECK_SPELLING:
        return kWKContextMenuItemTagCheckSpelling;
    case EWK_CONTEXT_MENU_ITEM_TAG_CHECK_SPELLING_WHILE_TYPING:
        return kWKContextMenuItemTagCheckSpellingWhileTyping;
    case EWK_CONTEXT_MENU_ITEM_TAG_CHECK_GRAMMAR_WITH_SPELLING:
        return kWKContextMenuItemTagCheckGrammarWithSpelling;
    case EWK_CONTEXT_MENU_ITEM_TAG_FONT_MENU:
        return kWKContextMenuItemTagFontMenu;
    case EWK_CONTEXT_MENU_ITEM_TAG_SHOW_FONTS:
        return kWKContextMenuItemTagShowFonts;
    case EWK_CONTEXT_MENU_ITEM_TAG_BOLD:
        return kWKContextMenuItemTagBold;
    case EWK_CONTEXT_MENU_ITEM_TAG_ITALIC:
        return kWKContextMenuItemTagItalic;
    case EWK_CONTEXT_MENU_ITEM_TAG_UNDERLINE:
        return kWKContextMenuItemTagUnderline;
    case EWK_CONTEXT_MENU_ITEM_TAG_OUTLINE:
        return kWKContextMenuItemTagOutline;
    case EWK_CONTEXT_MENU_ITEM_TAG_STYLES:
        return kWKContextMenuItemTagStyles;
    case EWK_CONTEXT_MENU_ITEM_TAG_SHOW_COLORS:
        return kWKContextMenuItemTagShowColors;
    case EWK_CONTEXT_MENU_ITEM_TAG_SPEECH_MENU:
        return kWKContextMenuItemTagSpeechMenu;
    case EWK_CONTEXT_MENU_ITEM_TAG_START_SPEAKING:
        return kWKContextMenuItemTagStartSpeaking;
    case EWK_CONTEXT_MENU_ITEM_TAG_STOP_SPEAKING:
        return kWKContextMenuItemTagStopSpeaking;
    case EWK_CONTEXT_MENU_ITEM_TAG_WRITING_DIRECTION_MENU:
        return kWKContextMenuItemTagWritingDirectionMenu;
    case EWK_CONTEXT_MENU_ITEM_TAG_DEFAULT_DIRECTION:
        return kWKContextMenuItemTagDefaultDirection;
    case EWK_CONTEXT_MENU_ITEM_TAG_LEFT_TO_RIGHT:
        return kWKContextMenuItemTagLeftToRight;
    case EWK_CONTEXT_MENU_ITEM_TAG_RIGHT_TO_LEFT:
        return kWKContextMenuItemTagRightToLeft;
    case EWK_CONTEXT_MENU_ITEM_TAG_PDFSINGLE_PAGE_SCROLLING:
        return kWKContextMenuItemTagPDFSinglePageScrolling;
    case EWK_CONTEXT_MENU_ITEM_TAG_PDFFACING_PAGES_SCROLLING:
        return kWKContextMenuItemTagPDFFacingPagesScrolling;
    case EWK_CONTEXT_MENU_ITEM_TAG_INSPECT_ELEMENT:
        return kWKContextMenuItemTagInspectElement;
    case EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_MENU:
        return kWKContextMenuItemTagTextDirectionMenu;
    case EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_DEFAULT:
        return kWKContextMenuItemTagTextDirectionDefault;
    case EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_LEFT_TO_RIGHT:
        return kWKContextMenuItemTagTextDirectionLeftToRight;
    case EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_RIGHT_TO_LEFT:
        return kWKContextMenuItemTagTextDirectionRightToLeft;
    case EWK_CONTEXT_MENU_ITEM_OPEN_MEDIA_IN_NEW_WINDOW:
        return kWKContextMenuItemTagOpenMediaInNewWindow;
    case EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_MEDIA_TO_DISK:
        return kWKContextMenuItemTagDownloadMediaToDisk;
    case EWK_CONTEXT_MENU_ITEM_TAG_COPY_MEDIA_LINK_TO_CLIPBOARD:
        return kWKContextMenuItemTagCopyMediaLinkToClipboard;
    case EWK_CONTEXT_MENU_ITEM_TAG_TOGGLE_MEDIA_CONTROLS:
        return kWKContextMenuItemTagToggleMediaControls;
    case EWK_CONTEXT_MENU_ITEM_TAG_TOGGLE_MEDIA_LOOP:
        return kWKContextMenuItemTagToggleMediaLoop;
    case EWK_CONTEXT_MENU_ITEM_TAG_ENTER_VIDEO_FULLSCREEN:
        return kWKContextMenuItemTagEnterVideoFullscreen;
    case EWK_CONTEXT_MENU_ITEM_TAG_MEDIA_PLAY_PAUSE:
        return kWKContextMenuItemTagMediaPlayPause;
    case EWK_CONTEXT_MENU_ITEM_TAG_MEDIA_MUTE:
        return kWKContextMenuItemTagMediaMute;
    case EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG:
        return kWKContextMenuItemBaseApplicationTag;
    default:
        return static_cast<WKContextMenuItemTag>(action);
    }
}