Changeset 90550 in webkit


Ignore:
Timestamp:
Jul 7, 2011 2:06:37 AM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-07-07 Benjamin Poulain <benjamin@webkit.org>

[Qt] [WK2] Improve the handling of touch events to use them as main input
https://bugs.webkit.org/show_bug.cgi?id=63991

Reviewed by Kenneth Rohde Christiansen.

Promote touch event for use as primary input.

The touch events now use the responsiveness timer like the other input events.

The touch events also have a callback to the UI signaling if the event was used
or not: PageClient::doneWithTouchEvent().
This is similar to what is done with key events (PageClient::doneWithKeyEvent()).

  • Shared/NativeWebTouchEvent.h: Copied from Source/WebKit2/Shared/qt/WebEventFactoryQt.h. (WebKit::NativeWebTouchEvent::nativeEvent):
  • Shared/qt/NativeWebTouchEventQt.cpp: Copied from Source/WebKit2/Shared/qt/WebEventFactoryQt.h. (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
  • Shared/qt/WebEventFactoryQt.cpp: (WebKit::webEventTypeForEvent): (WebKit::WebEventFactory::createWebTouchEvent):
  • Shared/qt/WebEventFactoryQt.h:
  • UIProcess/PageClient.h:
  • UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::handleTouchEvent): (WebKit::WebPageProxy::didReceiveEvent):
  • UIProcess/WebPageProxy.h:
  • UIProcess/qt/qdesktopwebpageproxy.cpp: (QDesktopWebPageProxy::doneWithTouchEvent):
  • UIProcess/qt/qdesktopwebpageproxy.h:
  • UIProcess/qt/qtouchwebpageproxy.cpp: (QTouchWebPageProxy::doneWithTouchEvent): (QTouchWebPageProxy::touchEvent):
  • UIProcess/qt/qtouchwebpageproxy.h:
  • WebKit2.pro:
Location:
trunk/Source/WebKit2
Files:
11 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r90458 r90550  
     12011-07-07  Benjamin Poulain  <benjamin@webkit.org>
     2
     3        [Qt] [WK2] Improve the handling of touch events to use them as main input
     4        https://bugs.webkit.org/show_bug.cgi?id=63991
     5
     6        Reviewed by Kenneth Rohde Christiansen.
     7
     8        Promote touch event for use as primary input.
     9
     10        The touch events now use the responsiveness timer like the other input events.
     11
     12        The touch events also have a callback to the UI signaling if the event was used
     13        or not: PageClient::doneWithTouchEvent().
     14        This is similar to what is done with key events (PageClient::doneWithKeyEvent()).
     15
     16        * Shared/NativeWebTouchEvent.h: Copied from Source/WebKit2/Shared/qt/WebEventFactoryQt.h.
     17        (WebKit::NativeWebTouchEvent::nativeEvent):
     18        * Shared/qt/NativeWebTouchEventQt.cpp: Copied from Source/WebKit2/Shared/qt/WebEventFactoryQt.h.
     19        (WebKit::NativeWebTouchEvent::NativeWebTouchEvent):
     20        * Shared/qt/WebEventFactoryQt.cpp:
     21        (WebKit::webEventTypeForEvent):
     22        (WebKit::WebEventFactory::createWebTouchEvent):
     23        * Shared/qt/WebEventFactoryQt.h:
     24        * UIProcess/PageClient.h:
     25        * UIProcess/WebPageProxy.cpp:
     26        (WebKit::WebPageProxy::handleTouchEvent):
     27        (WebKit::WebPageProxy::didReceiveEvent):
     28        * UIProcess/WebPageProxy.h:
     29        * UIProcess/qt/qdesktopwebpageproxy.cpp:
     30        (QDesktopWebPageProxy::doneWithTouchEvent):
     31        * UIProcess/qt/qdesktopwebpageproxy.h:
     32        * UIProcess/qt/qtouchwebpageproxy.cpp:
     33        (QTouchWebPageProxy::doneWithTouchEvent):
     34        (QTouchWebPageProxy::touchEvent):
     35        * UIProcess/qt/qtouchwebpageproxy.h:
     36        * WebKit2.pro:
     37
    1382011-07-06  Andreas Kling  <kling@webkit.org>
    239
  • trunk/Source/WebKit2/Shared/NativeWebTouchEvent.h

    r90549 r90550  
    11/*
    2  * Copyright (C) 2010 Apple Inc. All rights reserved.
    3  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
     2 * Copyright (C) 2011 Benjamin Poulain <benjamin@webkit.org>
    43 *
    54 * Redistribution and use in source and binary forms, with or without
     
    2524 */
    2625
    27 #ifndef WebEventFactory_h
    28 #define WebEventFactory_h
     26#ifndef NativeWebTouchEvent_h
     27#define NativeWebTouchEvent_h
    2928
    3029#include "WebEvent.h"
    3130
    32 #if ENABLE(TOUCH_EVENTS)
    33 class QTouchEvent;
     31#if PLATFORM(QT)
     32#include <QTouchEvent>
    3433#endif
    35 
    36 class QGraphicsSceneMouseEvent;
    37 class QGraphicsSceneWheelEvent;
    38 class QKeyEvent;
    3934
    4035namespace WebKit {
    4136
    42 class WebEventFactory {
     37class NativeWebTouchEvent : public WebTouchEvent {
    4338public:
    44     static WebMouseEvent createWebMouseEvent(QGraphicsSceneMouseEvent* event, int eventClickCount);
    45     static WebWheelEvent createWebWheelEvent(QGraphicsSceneWheelEvent* event);
    46     static WebKeyboardEvent createWebKeyboardEvent(QKeyEvent* event);
    47 #if ENABLE(TOUCH_EVENTS)
    48     static WebTouchEvent createWebTouchEvent(QTouchEvent* event);
     39#if PLATFORM(QT)
     40    explicit NativeWebTouchEvent(const QTouchEvent*);
     41#endif
     42
     43#if PLATFORM(QT)
     44    const QTouchEvent* nativeEvent() const { return &m_nativeEvent; }
     45#endif
     46
     47private:
     48#if PLATFORM(QT)
     49    const QTouchEvent m_nativeEvent;
    4950#endif
    5051};
     
    5253} // namespace WebKit
    5354
    54 #endif // WebEventFactory_h
     55#endif // NativeWebTouchEvent_h
  • trunk/Source/WebKit2/Shared/qt/NativeWebTouchEventQt.cpp

    r90549 r90550  
    11/*
    2  * Copyright (C) 2010 Apple Inc. All rights reserved.
    3  * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
     2 * Copyright (C) 2011 Benjamin Poulain <benjamin@webkit.org>
    43 *
    54 * Redistribution and use in source and binary forms, with or without
     
    2524 */
    2625
    27 #ifndef WebEventFactory_h
    28 #define WebEventFactory_h
     26#include "config.h"
     27#include "NativeWebTouchEvent.h"
    2928
    30 #include "WebEvent.h"
    31 
    32 #if ENABLE(TOUCH_EVENTS)
    33 class QTouchEvent;
    34 #endif
    35 
    36 class QGraphicsSceneMouseEvent;
    37 class QGraphicsSceneWheelEvent;
    38 class QKeyEvent;
     29#include "WebEventFactoryQt.h"
    3930
    4031namespace WebKit {
    4132
    42 class WebEventFactory {
    43 public:
    44     static WebMouseEvent createWebMouseEvent(QGraphicsSceneMouseEvent* event, int eventClickCount);
    45     static WebWheelEvent createWebWheelEvent(QGraphicsSceneWheelEvent* event);
    46     static WebKeyboardEvent createWebKeyboardEvent(QKeyEvent* event);
    47 #if ENABLE(TOUCH_EVENTS)
    48     static WebTouchEvent createWebTouchEvent(QTouchEvent* event);
    49 #endif
    50 };
     33NativeWebTouchEvent::NativeWebTouchEvent(const QTouchEvent* event)
     34    : WebTouchEvent(WebEventFactory::createWebTouchEvent(event))
     35    , m_nativeEvent(*event)
     36{
     37}
    5138
    5239} // namespace WebKit
    53 
    54 #endif // WebEventFactory_h
  • trunk/Source/WebKit2/Shared/qt/WebEventFactoryQt.cpp

    r76916 r90550  
    5151}
    5252
    53 static WebEvent::Type webEventTypeForEvent(QEvent* event)
     53static WebEvent::Type webEventTypeForEvent(const QEvent* event)
    5454{
    5555    switch (event->type()) {
     
    164164
    165165#if ENABLE(TOUCH_EVENTS)
    166 
    167 WebTouchEvent WebEventFactory::createWebTouchEvent(QTouchEvent* event)
     166WebTouchEvent WebEventFactory::createWebTouchEvent(const QTouchEvent* event)
    168167{
    169168    WebEvent::Type type  = webEventTypeForEvent(event);
  • trunk/Source/WebKit2/Shared/qt/WebEventFactoryQt.h

    r65788 r90550  
    4646    static WebKeyboardEvent createWebKeyboardEvent(QKeyEvent* event);
    4747#if ENABLE(TOUCH_EVENTS)
    48     static WebTouchEvent createWebTouchEvent(QTouchEvent* event);
     48    static WebTouchEvent createWebTouchEvent(const QTouchEvent*);
    4949#endif
    5050};
  • trunk/Source/WebKit2/UIProcess/PageClient.h

    r89582 r90550  
    5252class FindIndicator;
    5353class NativeWebKeyboardEvent;
    54 class NativeWebKeyboardEvent;
     54#if ENABLE(TOUCH_EVENTS)
     55class NativeWebTouchEvent;
     56#endif
    5557class WebContextMenuProxy;
    5658class WebEditCommandProxy;
     
    138140   
    139141    virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled) = 0;
     142#if ENABLE(TOUCH_EVENTS)
     143    virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled) = 0;
     144#endif
    140145
    141146    virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*) = 0;
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r89720 r90550  
    973973
    974974#if ENABLE(TOUCH_EVENTS)
    975 void WebPageProxy::handleTouchEvent(const WebTouchEvent& event)
    976 {
    977     if (!isValid())
    978         return;
     975void WebPageProxy::handleTouchEvent(const NativeWebTouchEvent& event)
     976{
     977    if (!isValid())
     978        return;
     979
     980    m_touchEventQueue.append(event);
     981    process()->responsivenessTimer()->start();
    979982    process()->send(Messages::WebPage::TouchEvent(event), m_pageID);
    980983}
     
    27132716    case WebEvent::GestureScrollEnd:
    27142717#endif
     2718#if ENABLE(TOUCH_EVENTS)
     2719    case WebEvent::TouchStart:
     2720    case WebEvent::TouchMove:
     2721    case WebEvent::TouchEnd:
     2722    case WebEvent::TouchCancel:
     2723#endif
    27152724        process()->responsivenessTimer()->stop();
    27162725        break;
     
    27802789        break;
    27812790    }
     2791#if ENABLE(TOUCH_EVENTS)
     2792    case WebEvent::TouchStart:
     2793    case WebEvent::TouchMove:
     2794    case WebEvent::TouchEnd:
     2795    case WebEvent::TouchCancel: {
     2796        NativeWebTouchEvent event = m_touchEventQueue.first();
     2797        MESSAGE_CHECK(type == event.type());
     2798        m_touchEventQueue.removeFirst();
     2799
     2800        m_pageClient->doneWithTouchEvent(event, handled);
     2801        break;
     2802    }
     2803#endif
    27822804    }
    27832805}
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r90457 r90550  
    3434#include "EditorState.h"
    3535#include "GeolocationPermissionRequestManagerProxy.h"
     36#if ENABLE(TOUCH_EVENTS)
     37#include "NativeWebTouchEvent.h"
     38#endif
    3639#include "PlatformProcessIdentifier.h"
    3740#include "SandboxExtension.h"
     
    333336#endif
    334337#if ENABLE(TOUCH_EVENTS)
    335     void handleTouchEvent(const WebTouchEvent&);
     338    void handleTouchEvent(const NativeWebTouchEvent&);
    336339#endif
    337340
     
    867870
    868871    Deque<NativeWebKeyboardEvent> m_keyEventQueue;
    869 
     872#if ENABLE(TOUCH_EVENTS)
     873    Deque<NativeWebTouchEvent> m_touchEventQueue;
     874#endif
    870875    Deque<NativeWebWheelEvent> m_wheelEventQueue;
    871876    Vector<NativeWebWheelEvent> m_currentlyProcessedWheelEvents;
  • trunk/Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.cpp

    r90458 r90550  
    7070    // We ignore the viewport definition on the Desktop.
    7171}
     72
     73#if ENABLE(TOUCH_EVENTS)
     74void QDesktopWebPageProxy::doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled)
     75{
     76    // We do not handle touch on Desktop for now, the events are not supposed to be forwarded to the WebProcess.
     77    ASSERT_NOT_REACHED();
     78}
     79#endif
    7280
    7381bool QDesktopWebPageProxy::handleEvent(QEvent* ev)
  • trunk/Source/WebKit2/UIProcess/qt/qdesktopwebpageproxy.h

    r90458 r90550  
    4444    virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
    4545    virtual void setViewportArguments(const WebCore::ViewportArguments&);
     46#if ENABLE(TOUCH_EVENTS)
     47    virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled);
     48#endif
    4649
    4750    virtual void timerEvent(QTimerEvent*);
  • trunk/Source/WebKit2/UIProcess/qt/qtouchwebpageproxy.cpp

    r90458 r90550  
    5050}
    5151
     52#if ENABLE(TOUCH_EVENTS)
     53void QTouchWebPageProxy::doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled)
     54{
     55    // FIXME: Add gesture and synthetic click.
     56}
     57#endif
     58
    5259bool QTouchWebPageProxy::handleEvent(QEvent* ev)
    5360{
     
    6269}
    6370
    64 void QTouchWebPageProxy::touchEvent(QTouchEvent* ev)
     71void QTouchWebPageProxy::touchEvent(QTouchEvent* event)
    6572{
    6673#if ENABLE(TOUCH_EVENTS)
    67     WebTouchEvent touchEvent = WebEventFactory::createWebTouchEvent(ev);
    68     m_webPageProxy->handleTouchEvent(touchEvent);
     74    m_webPageProxy->handleTouchEvent(NativeWebTouchEvent(event));
     75    event->accept();
    6976#else
    7077    ASSERT_NOT_REACHED();
  • trunk/Source/WebKit2/UIProcess/qt/qtouchwebpageproxy.h

    r90458 r90550  
    4343    virtual PassOwnPtr<DrawingAreaProxy> createDrawingAreaProxy();
    4444    virtual void setViewportArguments(const WebCore::ViewportArguments&);
     45#if ENABLE(TOUCH_EVENTS)
     46    virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled);
     47#endif
    4548
    4649    TouchViewInterface* touchViewInterface() const { return static_cast<TouchViewInterface*>(m_viewInterface); }
  • trunk/Source/WebKit2/WebKit2.pro

    r90458 r90550  
    571571    $$WEBKIT2_GENERATED_SOURCES
    572572
     573contains(DEFINES, ENABLE_TOUCH_EVENTS=1) {
     574    HEADERS += \
     575        Shared/NativeWebTouchEvent.h
     576    SOURCES += \
     577        Shared/qt/NativeWebTouchEventQt.cpp
     578}
Note: See TracChangeset for help on using the changeset viewer.