2
* Copyright (C) 2010 Apple Inc. All rights reserved.
3
* Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
4
* Copyright (C) 2011 Igalia S.L.
6
* Redistribution and use in source and binary forms, with or without
7
* modification, are permitted provided that the following conditions
9
* 1. Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
* 2. Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
15
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
16
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
17
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
19
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25
* THE POSSIBILITY OF SUCH DAMAGE.
31
#include "EditorState.h"
32
#include "NotImplemented.h"
34
#include "WindowsKeyboardCodes.h"
35
#include <WebCore/EflKeyboardUtilities.h>
36
#include <WebCore/FocusController.h>
37
#include <WebCore/Frame.h>
38
#include <WebCore/FrameView.h>
39
#include <WebCore/KeyboardEvent.h>
40
#include <WebCore/Page.h>
41
#include <WebCore/PlatformKeyboardEvent.h>
42
#include <WebCore/RenderThemeEfl.h>
43
#include <WebCore/Settings.h>
45
using namespace WebCore;
49
void WebPage::platformInitialize()
54
void WebPage::platformPreferencesDidChange(const WebPreferencesStore&)
59
static inline void scroll(Page* page, ScrollDirection direction, ScrollGranularity granularity)
61
page->focusController()->focusedOrMainFrame()->eventHandler()->scrollRecursively(direction, granularity);
64
bool WebPage::performDefaultBehaviorForKeyEvent(const WebKeyboardEvent& keyboardEvent)
66
if (keyboardEvent.type() != WebEvent::KeyDown && keyboardEvent.type() != WebEvent::RawKeyDown)
69
switch (keyboardEvent.windowsVirtualKeyCode()) {
71
if (keyboardEvent.shiftKey())
77
scroll(m_page.get(), keyboardEvent.shiftKey() ? ScrollUp : ScrollDown, ScrollByPage);
80
scroll(m_page.get(), ScrollLeft, ScrollByLine);
83
scroll(m_page.get(), ScrollRight, ScrollByLine);
86
scroll(m_page.get(), ScrollUp, ScrollByLine);
89
scroll(m_page.get(), ScrollDown, ScrollByLine);
92
scroll(m_page.get(), ScrollUp, ScrollByDocument);
95
scroll(m_page.get(), ScrollDown, ScrollByDocument);
98
scroll(m_page.get(), ScrollUp, ScrollByPage);
101
scroll(m_page.get(), ScrollDown, ScrollByPage);
110
bool WebPage::platformHasLocalDataForURL(const KURL&)
116
String WebPage::cachedResponseMIMETypeForURL(const KURL&)
122
bool WebPage::platformCanHandleRequest(const ResourceRequest&)
128
String WebPage::cachedSuggestedFilenameForURL(const KURL&)
134
PassRefPtr<SharedBuffer> WebPage::cachedResponseDataForURL(const KURL&)
140
const char* WebPage::interpretKeyEvent(const KeyboardEvent* event)
142
ASSERT(event->type() == eventNames().keydownEvent || event->type() == eventNames().keypressEvent);
144
if (event->type() == eventNames().keydownEvent)
145
return getKeyDownCommandName(event);
147
return getKeyPressCommandName(event);
150
void WebPage::setThemePath(const String& themePath)
152
WebCore::RenderThemeEfl* theme = static_cast<WebCore::RenderThemeEfl*>(m_page->theme());
153
theme->setThemePath(themePath);
156
static Frame* targetFrameForEditing(WebPage* page)
158
Frame* frame = page->corePage()->focusController()->focusedOrMainFrame();
162
Editor* editor = frame->editor();
163
if (!editor->canEdit())
166
if (editor->hasComposition()) {
167
// We should verify the parent node of this IME composition node are
168
// editable because JavaScript may delete a parent node of the composition
169
// node. In this case, WebKit crashes while deleting texts from the parent
170
// node, which doesn't exist any longer.
171
if (PassRefPtr<Range> range = editor->compositionRange()) {
172
Node* node = range->startContainer();
173
if (!node || !node->isContentEditable())
181
void WebPage::confirmComposition(const String& compositionString)
183
Frame* targetFrame = targetFrameForEditing(this);
187
targetFrame->editor()->confirmComposition(compositionString);
190
void WebPage::setComposition(const String& compositionString, const Vector<WebCore::CompositionUnderline>& underlines, uint64_t cursorPosition)
192
Frame* targetFrame = targetFrameForEditing(this);
196
targetFrame->editor()->setComposition(compositionString, underlines, cursorPosition, 0);
199
void WebPage::cancelComposition()
201
Frame* frame = m_page->focusController()->focusedOrMainFrame();
205
frame->editor()->cancelComposition();
208
} // namespace WebKit