Changeset 91937 in webkit


Ignore:
Timestamp:
Jul 28, 2011 10:24:47 AM (13 years ago)
Author:
commit-queue@webkit.org
Message:

Pass the key_press_event or key_release_event to parent widget when it is not handled by Web Process.
(https://bugs.webkit.org/show_bug.cgi?id=64790)

Patch by Ravi Phaneendra Kasibhatla <ravi.kasibhatla@motorola.com> on 2011-07-28
Reviewed by Martin Robinson.

  • Shared/NativeWebKeyboardEvent.h:

(WebKit::NativeWebKeyboardEvent::nativeEvent): Return a GdkEvent* instead of const GdkEvent* (non-const).

  • UIProcess/API/gtk/PageClientImpl.cpp:

(WebKit::PageClientImpl::doneWithKeyEvent): Implemented for GTK port. Sets flag if the keyboard event
needs to be passed to the parent widget. Invoke gtk_main_do_event() if event needs to be passed to parent.

  • UIProcess/API/gtk/PageClientImpl.h: Deleted obsolete functions didNotHandleKeyEvent & didNotHandleWheelEvent.
  • UIProcess/API/gtk/WebKitWebViewBase.cpp:

(webkit_web_view_base_init): Initialize shouldForwardNextKeyEvent flag.
(webkitWebViewBaseKeyPressEvent): Pass event to parent widget depending on status from doneWithKeyEvent.
(webkitWebViewBaseKeyReleaseEvent): Pass event to parent widget depending on status from doneWithKeyEvent.
(webkitWebViewBaseForwardNextKeyEvent): API to set flag shouldForwardNextKeyEvent.

  • UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Added API to set shouldForwardNextKeyEvent flag.
Location:
trunk/Source/WebKit2
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r91935 r91937  
     12011-07-28  Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>
     2
     3        Pass the key_press_event or key_release_event to parent widget when it is not handled by Web Process.
     4        (https://bugs.webkit.org/show_bug.cgi?id=64790)
     5
     6        Reviewed by Martin Robinson.
     7
     8        * Shared/NativeWebKeyboardEvent.h:
     9        (WebKit::NativeWebKeyboardEvent::nativeEvent): Return a GdkEvent* instead of const GdkEvent* (non-const).
     10        * UIProcess/API/gtk/PageClientImpl.cpp:
     11        (WebKit::PageClientImpl::doneWithKeyEvent): Implemented for GTK port. Sets flag if the keyboard event
     12        needs to be passed to the parent widget. Invoke gtk_main_do_event() if event needs to be passed to parent.
     13        * UIProcess/API/gtk/PageClientImpl.h: Deleted obsolete functions didNotHandleKeyEvent & didNotHandleWheelEvent.
     14        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
     15        (webkit_web_view_base_init): Initialize shouldForwardNextKeyEvent flag.
     16        (webkitWebViewBaseKeyPressEvent): Pass event to parent widget depending on status from doneWithKeyEvent.
     17        (webkitWebViewBaseKeyReleaseEvent): Pass event to parent widget depending on status from doneWithKeyEvent.
     18        (webkitWebViewBaseForwardNextKeyEvent): API to set flag shouldForwardNextKeyEvent.
     19        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: Added API to set shouldForwardNextKeyEvent flag.
     20
    1212011-07-28  Dan Bernstein  <mitz@apple.com>
    222
  • trunk/Source/WebKit2/Shared/NativeWebKeyboardEvent.h

    r89211 r91937  
    6868    const QKeyEvent* nativeEvent() const { return &m_nativeEvent; }
    6969#elif PLATFORM(GTK)
    70     const GdkEvent* nativeEvent() const { return m_nativeEvent.get(); }
     70    GdkEvent* nativeEvent() const { return m_nativeEvent.get(); }
    7171#elif PLATFORM(EFL)
    7272    const void* nativeEvent() const { return m_nativeEvent; }
  • trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp

    r91169 r91937  
    206206}
    207207
    208 void PageClientImpl::doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled)
    209 {
    210     notImplemented();
    211 }
    212 
    213 void PageClientImpl::didNotHandleKeyEvent(const NativeWebKeyboardEvent& event)
    214 {
    215     notImplemented();
    216 }
    217 
    218 void PageClientImpl::didNotHandleWheelEvent(const NativeWebWheelEvent&)
    219 {
    220     notImplemented();
     208void PageClientImpl::doneWithKeyEvent(const NativeWebKeyboardEvent& event, bool wasEventHandled)
     209{
     210    if (wasEventHandled)
     211        return;
     212
     213    WebKitWebViewBase* webkitWebViewBase = WEBKIT_WEB_VIEW_BASE(m_viewWidget);
     214    webkitWebViewBaseForwardNextKeyEvent(webkitWebViewBase);
     215    gtk_main_do_event(event.nativeEvent());
    221216}
    222217
  • trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h

    r91169 r91937  
    8080    virtual WebCore::IntRect windowToScreen(const WebCore::IntRect&);
    8181    virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool wasEventHandled);
    82     virtual void didNotHandleKeyEvent(const NativeWebKeyboardEvent&);
    83     virtual void didNotHandleWheelEvent(const NativeWebWheelEvent&);
    8482    virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*);
    8583    virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*);
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp

    r89287 r91937  
    5454    RefPtr<WebPageProxy> pageProxy;
    5555    gboolean isPageActive;
     56    gboolean shouldForwardNextKeyEvent;
    5657    GtkIMContext* imContext;
    5758    GtkClickCounter clickCounter;
     
    130131
    131132    priv->isPageActive = TRUE;
     133    priv->shouldForwardNextKeyEvent = FALSE;
    132134
    133135    gtk_widget_set_double_buffered(GTK_WIDGET(webkitWebViewBase), FALSE);
     
    201203    WebKitWebViewBasePrivate* priv = webViewBase->priv;
    202204
     205    // Since WebProcess key event handling is not synchronous, handle the event in two passes.
     206    // When WebProcess processes the input event, it will call PageClientImpl::doneWithKeyEvent
     207    // with event handled status which determines whether to pass the input event to parent or not
     208    // using gtk_main_do_event().
     209    if (priv->shouldForwardNextKeyEvent) {
     210        priv->shouldForwardNextKeyEvent = FALSE;
     211        return GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->key_press_event(widget, event);
     212    }
    203213    priv->pageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(reinterpret_cast<GdkEvent*>(event)));
    204 
    205     return GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->key_press_event(widget, event);
     214    return TRUE;
    206215}
    207216
     
    214223        return TRUE;
    215224
     225    if (priv->shouldForwardNextKeyEvent) {
     226        priv->shouldForwardNextKeyEvent = FALSE;
     227        return GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->key_release_event(widget, event);
     228    }
    216229    priv->pageProxy->handleKeyboardEvent(NativeWebKeyboardEvent(reinterpret_cast<GdkEvent*>(event)));
    217 
    218     return GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->key_release_event(widget, event);
     230    return TRUE;
    219231}
    220232
     
    344356}
    345357
    346 
     358void webkitWebViewBaseForwardNextKeyEvent(WebKitWebViewBase* webkitWebViewBase)
     359{
     360    webkitWebViewBase->priv->shouldForwardNextKeyEvent = TRUE;
     361}
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h

    r88803 r91937  
    4747void webkitWebViewBaseSetTooltipText(WebKitWebViewBase*, const char*);
    4848
     49void webkitWebViewBaseForwardNextKeyEvent(WebKitWebViewBase*);
     50
    4951G_END_DECLS
    5052
Note: See TracChangeset for help on using the changeset viewer.