15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebPopupMenuImpl.h"
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "PopupContainer.h"
3593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "PopupMenuChromium.h"
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebInputEvent.h"
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebInputEventConversion.h"
385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebRange.h"
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebViewClient.h"
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebWidgetClient.h"
4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FrameView.h"
4253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/Cursor.h"
4353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/NotImplemented.h"
4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/PlatformGestureEvent.h"
4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/PlatformKeyboardEvent.h"
4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/PlatformMouseEvent.h"
4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/PlatformWheelEvent.h"
4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/chromium/FramelessScrollView.h"
4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/GraphicsContext.h"
5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/IntRect.h"
5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/skia/SkiaUtils.h"
525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h"
5393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include <skia/ext/platform_canvas.h>
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WebCore;
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebKit {
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebPopupMenu ---------------------------------------------------------------
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPopupMenu* WebPopupMenu::create(WebWidgetClient* client)
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Pass the WebPopupMenuImpl's self-reference to the caller.
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return adoptRef(new WebPopupMenuImpl(client)).leakRef();
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebWidget ------------------------------------------------------------------
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPopupMenuImpl::WebPopupMenuImpl(WebWidgetClient* client)
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : m_client(client)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_widget(0)
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Set to impossible point so we always get the first mouse position.
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_lastMousePosition = WebPoint(-1, -1);
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPopupMenuImpl::~WebPopupMenuImpl()
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_widget)
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->setClient(0);
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void WebPopupMenuImpl::initialize(FramelessScrollView* widget, const WebRect& bounds)
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget = widget;
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget->setClient(this);
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_client) {
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_client->setWindowRect(bounds);
905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_client->show(WebNavigationPolicy()); // Policy is ignored.
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::handleMouseMove(const WebMouseEvent& event)
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Don't send mouse move messages if the mouse hasn't moved.
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (event.x != m_lastMousePosition.x || event.y != m_lastMousePosition.y) {
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_lastMousePosition = WebPoint(event.x, event.y);
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->handleMouseMoveEvent(PlatformMouseEventBuilder(m_widget, event));
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // We cannot call setToolTipText() in PopupContainer, because PopupContainer is in WebCore, and we cannot refer to WebKit from Webcore.
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebCore::PopupContainer* container = static_cast<WebCore::PopupContainer*>(m_widget);
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        client()->setToolTipText(container->getSelectedItemToolTip(), container->menuStyle().textDirection() == WebCore::RTL ? WebTextDirectionRightToLeft : WebTextDirectionLeftToRight);
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::handleMouseLeave(const WebMouseEvent& event)
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget->handleMouseMoveEvent(PlatformMouseEventBuilder(m_widget, event));
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::handleMouseDown(const WebMouseEvent& event)
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget->handleMouseDownEvent(PlatformMouseEventBuilder(m_widget, event));
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::handleMouseUp(const WebMouseEvent& event)
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    mouseCaptureLost();
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget->handleMouseReleaseEvent(PlatformMouseEventBuilder(m_widget, event));
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::handleMouseWheel(const WebMouseWheelEvent& event)
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget->handleWheelEvent(PlatformWheelEventBuilder(m_widget, event));
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::handleGestureEvent(const WebGestureEvent& event)
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_widget->handleGestureEvent(PlatformGestureEventBuilder(m_widget, event));
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::handleTouchEvent(const WebTouchEvent& event)
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PlatformTouchEventBuilder touchEventBuilder(m_widget, event);
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool defaultPrevented(m_widget->handleTouchEvent(touchEventBuilder));
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return defaultPrevented;
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::handleKeyEvent(const WebKeyboardEvent& event)
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_widget->handleKeyEvent(PlatformKeyboardEventBuilder(event));
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebWidget -------------------------------------------------------------------
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::close()
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_widget)
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->hide();
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_client = 0;
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    deref(); // Balances ref() from WebPopupMenu::create.
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::willStartLiveResize()
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::resize(const WebSize& newSize)
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_size == newSize)
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_size = newSize;
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_widget) {
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        IntRect newGeometry(0, 0, m_size.width, m_size.height);
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->setFrameRect(newGeometry);
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_client) {
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebRect damagedRect(0, 0, m_size.width, m_size.height);
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_client->didInvalidateRect(damagedRect);
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::willEndLiveResize()
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::animate(double)
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::layout()
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::paint(WebCanvas* canvas, const WebRect& rect, PaintOptions)
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_widget)
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!rect.isEmpty()) {
19753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        GraphicsContext context(canvas);
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        context.applyDeviceScaleFactor(m_client->deviceScaleFactor());
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->paint(&context, rect);
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::themeChanged()
2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    notImplemented();
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::handleInputEvent(const WebInputEvent& inputEvent)
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_widget)
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: WebKit seems to always return false on mouse events methods. For
2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // now we'll assume it has processed them (as we are only interested in
2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // whether keyboard events are processed).
2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (inputEvent.type) {
2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseMove:
2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        handleMouseMove(*static_cast<const WebMouseEvent*>(&inputEvent));
2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseLeave:
2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        handleMouseLeave(*static_cast<const WebMouseEvent*>(&inputEvent));
2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseWheel:
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        handleMouseWheel(*static_cast<const WebMouseWheelEvent*>(&inputEvent));
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseDown:
2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        handleMouseDown(*static_cast<const WebMouseEvent*>(&inputEvent));
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseUp:
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        handleMouseUp(*static_cast<const WebMouseEvent*>(&inputEvent));
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // In Windows, RawKeyDown only has information about the physical key, but
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // for "selection", we need the information about the character the key
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // translated into. For English, the physical key value and the character
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // value are the same, hence, "selection" works for English. But for other
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // languages, such as Hebrew, the character value is different from the
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // physical key value. Thus, without accepting Char event type which
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // contains the key's character value, the "selection" won't work for
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // non-English languages, such as Hebrew.
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::RawKeyDown:
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::KeyDown:
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::KeyUp:
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::Char:
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return handleKeyEvent(*static_cast<const WebKeyboardEvent*>(&inputEvent));
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::TouchStart:
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::TouchMove:
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::TouchEnd:
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::TouchCancel:
2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return handleTouchEvent(*static_cast<const WebTouchEvent*>(&inputEvent));
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureScrollBegin:
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureScrollEnd:
2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureScrollUpdate:
260926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case WebInputEvent::GestureScrollUpdateWithoutPropagation:
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureFlingStart:
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureFlingCancel:
2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureTap:
26453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    case WebInputEvent::GestureTapUnconfirmed:
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureTapDown:
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureTapCancel:
2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureDoubleTap:
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureTwoFingerTap:
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureLongPress:
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureLongTap:
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GesturePinchBegin:
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GesturePinchEnd:
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GesturePinchUpdate:
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return handleGestureEvent(*static_cast<const WebGestureEvent*>(&inputEvent));
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::Undefined:
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseEnter:
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::ContextMenu:
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::mouseCaptureLost()
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::setFocus(bool)
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenu::setMinimumRowHeight(int minimumRowHeight)
2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PopupMenuChromium::setMinimumRowHeight(minimumRowHeight);
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::setComposition(const WebString&, const WebVector<WebCompositionUnderline>&, int, int)
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::confirmComposition()
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
307591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochbool WebPopupMenuImpl::confirmComposition(ConfirmCompositionBehavior)
308591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{
309591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    return false;
310591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch}
311591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::confirmComposition(const WebString&)
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::compositionRange(size_t* location, size_t* length)
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *location = 0;
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *length = 0;
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::caretOrSelectionRange(size_t* location, size_t* length)
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *location = 0;
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *length = 0;
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::setTextDirection(WebTextDirection)
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//-----------------------------------------------------------------------------
3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebCore::HostWindow
3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
33953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void WebPopupMenuImpl::invalidateContentsAndRootView(const IntRect& paintRect)
3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (paintRect.isEmpty())
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_client)
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_client->didInvalidateRect(paintRect);
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
34753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void WebPopupMenuImpl::invalidateContentsForSlowScroll(const IntRect& updateRect)
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
34953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    invalidateContentsAndRootView(updateRect);
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::scheduleAnimation()
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::scroll(const IntSize& scrollDelta, const IntRect& scrollRect, const IntRect& clipRect)
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_client) {
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        int dx = scrollDelta.width();
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        int dy = scrollDelta.height();
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_client->didScrollRect(dx, dy, clipRect);
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint WebPopupMenuImpl::screenToRootView(const IntPoint& point) const
3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    notImplemented();
3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return IntPoint();
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect WebPopupMenuImpl::rootViewToScreen(const IntRect& rect) const
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    notImplemented();
3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return IntRect();
3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
37753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebScreenInfo WebPopupMenuImpl::screenInfo() const
37853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
37953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return WebScreenInfo();
38053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
38153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::setCursor(const WebCore::Cursor&)
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//-----------------------------------------------------------------------------
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebCore::FramelessScrollViewClient
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::popupClosed(FramelessScrollView* widget)
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(widget == m_widget);
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_widget) {
3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->setClient(0);
3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget = 0;
3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_client)
3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_client->closeWidgetSoon();
3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebKit
401