2011-06-13 Carlos Garcia Campos <cgarcia@igalia.com>
[WebKit-https.git] / Source / WebKit2 / UIProcess / API / gtk / PageClientImpl.cpp
1 /*
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.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
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.
14  *
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.
26  */
27
28 #include "config.h"
29 #include "PageClientImpl.h"
30
31 #include "DrawingAreaProxyImpl.h"
32 #include "NativeWebKeyboardEvent.h"
33 #include "NativeWebMouseEvent.h"
34 #include "NotImplemented.h"
35 #include "WebContext.h"
36 #include "WebContextMenuProxyGtk.h"
37 #include "WebEventFactory.h"
38 #include "WebKitWebViewBasePrivate.h"
39 #include "WebPageProxy.h"
40 #include "WebPopupMenuProxyGtk.h"
41 #include <WebCore/GtkUtilities.h>
42 #include <wtf/text/WTFString.h>
43
44 using namespace WebCore;
45
46 namespace WebKit {
47
48 PageClientImpl::PageClientImpl(GtkWidget* viewWidget)
49     : m_viewWidget(viewWidget)
50 {
51 }
52
53 PageClientImpl::~PageClientImpl()
54 {
55 }
56
57 void PageClientImpl::getEditorCommandsForKeyEvent(const NativeWebKeyboardEvent& event, Vector<WTF::String>& commandList)
58 {
59     ASSERT(event.type == WebEvent::KeyDown || event.type == WebEvent.KeyPress);
60     KeyBindingTranslator::EventType type = WebEvent::KeyDown ? 
61         KeyBindingTranslator::KeyDown : KeyBindingTranslator::KeyPress;
62     m_keyBindingTranslator.getEditorCommandsForKeyEvent(const_cast<GdkEventKey*>(&event.nativeEvent()->key), type, commandList);
63 }
64
65 // PageClient's pure virtual functions
66 PassOwnPtr<DrawingAreaProxy> PageClientImpl::createDrawingAreaProxy()
67 {
68     return DrawingAreaProxyImpl::create(webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(m_viewWidget)));
69 }
70
71 void PageClientImpl::setViewNeedsDisplay(const WebCore::IntRect& rect)
72 {
73     gtk_widget_queue_draw_area(m_viewWidget, rect.x(), rect.y(), rect.width(), rect.height());
74 }
75
76 void PageClientImpl::displayView()
77 {
78     notImplemented();
79 }
80
81 void PageClientImpl::scrollView(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset)
82 {
83     setViewNeedsDisplay(scrollRect);
84 }
85
86 WebCore::IntSize PageClientImpl::viewSize()
87 {
88     GtkAllocation allocation;
89     gtk_widget_get_allocation(m_viewWidget, &allocation);
90     return IntSize(allocation.width, allocation.height);
91 }
92
93 bool PageClientImpl::isViewWindowActive()
94 {
95     notImplemented();
96     return true;
97 }
98
99 bool PageClientImpl::isViewFocused()
100 {
101     notImplemented();
102     return true;
103 }
104
105 bool PageClientImpl::isViewVisible()
106 {
107     notImplemented();
108     return true;
109 }
110
111 bool PageClientImpl::isViewInWindow()
112 {
113     notImplemented();
114     return true;
115 }
116
117 void PageClientImpl::PageClientImpl::processDidCrash()
118 {
119     notImplemented();
120 }
121
122 void PageClientImpl::didRelaunchProcess()
123 {
124     notImplemented();
125 }
126
127 void PageClientImpl::takeFocus(bool)
128 {
129     notImplemented();
130 }
131
132 void PageClientImpl::toolTipChanged(const String&, const String& newToolTip)
133 {
134     webkitWebViewBaseSetTooltipText(WEBKIT_WEB_VIEW_BASE(m_viewWidget), newToolTip.utf8().data());
135 }
136
137 void PageClientImpl::setCursor(const Cursor& cursor)
138 {
139     // [GTK] Widget::setCursor() gets called frequently
140     // http://bugs.webkit.org/show_bug.cgi?id=16388
141     // Setting the cursor may be an expensive operation in some backends,
142     // so don't re-set the cursor if it's already set to the target value.
143     GdkWindow* window = gtk_widget_get_window(m_viewWidget);
144     GdkCursor* currentCursor = gdk_window_get_cursor(window);
145     GdkCursor* newCursor = cursor.platformCursor().get();
146     if (currentCursor != newCursor)
147         gdk_window_set_cursor(window, newCursor);
148 }
149
150 void PageClientImpl::setViewportArguments(const WebCore::ViewportArguments&)
151 {
152     notImplemented();
153 }
154
155 void PageClientImpl::registerEditCommand(PassRefPtr<WebEditCommandProxy>, WebPageProxy::UndoOrRedo)
156 {
157     notImplemented();
158 }
159
160 void PageClientImpl::clearAllEditCommands()
161 {
162     notImplemented();
163 }
164
165 bool PageClientImpl::canUndoRedo(WebPageProxy::UndoOrRedo)
166 {
167     notImplemented();
168     return false;
169 }
170
171 void PageClientImpl::executeUndoRedo(WebPageProxy::UndoOrRedo)
172 {
173     notImplemented();
174 }
175
176 FloatRect PageClientImpl::convertToDeviceSpace(const FloatRect& viewRect)
177 {
178     notImplemented();
179     return viewRect;
180 }
181
182 FloatRect PageClientImpl::convertToUserSpace(const FloatRect& viewRect)
183 {
184     notImplemented();
185     return viewRect;
186 }
187
188 IntRect PageClientImpl::windowToScreen(const IntRect& rect)
189 {
190     return convertWidgetRectToScreenRect(m_viewWidget, rect);
191 }
192
193 void PageClientImpl::doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled)
194 {
195     notImplemented();
196 }
197
198 void PageClientImpl::didNotHandleKeyEvent(const NativeWebKeyboardEvent& event)
199 {
200     notImplemented();
201 }
202
203 void PageClientImpl::didNotHandleWheelEvent(const NativeWebWheelEvent&)
204 {
205     notImplemented();
206 }
207
208 PassRefPtr<WebPopupMenuProxy> PageClientImpl::createPopupMenuProxy(WebPageProxy* page)
209 {
210     return WebPopupMenuProxyGtk::create(m_viewWidget, page);
211 }
212
213 PassRefPtr<WebContextMenuProxy> PageClientImpl::createContextMenuProxy(WebPageProxy* page)
214 {
215     return WebContextMenuProxyGtk::create(m_viewWidget, page);
216 }
217
218 void PageClientImpl::setFindIndicator(PassRefPtr<FindIndicator>, bool fadeOut)
219 {
220     notImplemented();
221 }
222
223 #if USE(ACCELERATED_COMPOSITING)
224 void PageClientImpl::pageDidEnterAcceleratedCompositing()
225 {
226     notImplemented();
227 }
228
229 void PageClientImpl::pageDidLeaveAcceleratedCompositing()
230 {
231     notImplemented();
232 }
233 #endif // USE(ACCELERATED_COMPOSITING)
234
235 void PageClientImpl::didCommitLoadForMainFrame(bool useCustomRepresentation)
236 {
237 }
238
239 void PageClientImpl::didFinishLoadingDataForCustomRepresentation(const String& suggestedFilename, const CoreIPC::DataReference&)
240 {
241 }
242
243 double PageClientImpl::customRepresentationZoomFactor()
244 {
245     notImplemented();
246     return 0;
247 }
248
249 void PageClientImpl::setCustomRepresentationZoomFactor(double)
250 {
251     notImplemented();
252 }
253
254 void PageClientImpl::pageClosed()
255 {
256     notImplemented();
257 }
258
259 void PageClientImpl::didChangeScrollbarsForMainFrame() const
260 {
261 }
262
263 void PageClientImpl::flashBackingStoreUpdates(const Vector<IntRect>&)
264 {
265     notImplemented();
266 }
267
268 void PageClientImpl::findStringInCustomRepresentation(const String&, FindOptions, unsigned)
269 {
270     notImplemented();
271 }
272
273 void PageClientImpl::countStringMatchesInCustomRepresentation(const String&, FindOptions, unsigned)
274 {
275     notImplemented();
276 }
277
278 } // namespace WebKit