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