Changeset 68988 in webkit


Ignore:
Timestamp:
Oct 3, 2010 2:02:19 PM (13 years ago)
Author:
andersca@apple.com
Message:

Send keyboard events to plug-ins
https://bugs.webkit.org/show_bug.cgi?id=47064
<rdar://problem/8507148>

Reviewed by Sam Weinig.

  • WebProcess/Plugins/Netscape/NetscapePlugin.cpp:

(WebKit::NetscapePlugin::handleKeyboardEvent):
Call platformHandleKeyboardEvent.

  • WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:

(WebKit::modifierFlags):
Return the modifier flags given a WebKeyboardEvent.

(WebKit::initializeKeyboardEvent):
Initialize an NPCocoaEvent from a WebKeyboardEvent.

(WebKit::NetscapePlugin::platformHandleKeyboardEvent):
Initialize the event and dispatch it using NPP_HandleEvent.

  • WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:

(WebKit::NetscapePlugin::platformHandleKeyboardEvent):
Add stub.

  • WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:

(WebKit::NetscapePlugin::platformHandleKeyboardEvent):
Add stub.

  • WebProcess/Plugins/Plugin.h:

Add handleKeyboardEvent.

  • WebProcess/Plugins/PluginView.cpp:

(WebKit::PluginView::handleEvent):
Call Plugin::handleKeyboardEvent if we see a keydown or keyup event.

Location:
trunk/WebKit2
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebKit2/ChangeLog

    r68971 r68988  
     12010-10-03  Anders Carlsson  <andersca@apple.com>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Send keyboard events to plug-ins
     6        https://bugs.webkit.org/show_bug.cgi?id=47064
     7        <rdar://problem/8507148>
     8
     9        * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
     10        (WebKit::NetscapePlugin::handleKeyboardEvent):
     11        Call platformHandleKeyboardEvent.
     12
     13        * WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm:
     14        (WebKit::modifierFlags):
     15        Return the modifier flags given a WebKeyboardEvent.
     16
     17        (WebKit::initializeKeyboardEvent):
     18        Initialize an NPCocoaEvent from a WebKeyboardEvent.
     19
     20        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
     21        Initialize the event and dispatch it using NPP_HandleEvent.
     22
     23        * WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp:
     24        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
     25        Add stub.
     26
     27        * WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp:
     28        (WebKit::NetscapePlugin::platformHandleKeyboardEvent):
     29        Add stub.
     30       
     31        * WebProcess/Plugins/Plugin.h:
     32        Add handleKeyboardEvent.
     33
     34        * WebProcess/Plugins/PluginView.cpp:
     35        (WebKit::PluginView::handleEvent):
     36        Call Plugin::handleKeyboardEvent if we see a keydown or keyup event.
     37
    1382010-10-01  Mark Rowe  <mrowe@apple.com>
    239
  • trunk/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp

    r68962 r68988  
    538538}
    539539
     540bool NetscapePlugin::handleKeyboardEvent(const WebKeyboardEvent& keyboardEvent)
     541{
     542    return platformHandleKeyboardEvent(keyboardEvent);
     543}
     544
    540545void NetscapePlugin::setFocus(bool hasFocus)
    541546{
  • trunk/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h

    r68962 r68988  
    116116    bool platformHandleMouseEnterEvent(const WebMouseEvent&);
    117117    bool platformHandleMouseLeaveEvent(const WebMouseEvent&);
     118    bool platformHandleKeyboardEvent(const WebKeyboardEvent&);
    118119    void platformSetFocus(bool);
    119120
     
    144145    virtual bool handleMouseEnterEvent(const WebMouseEvent&);
    145146    virtual bool handleMouseLeaveEvent(const WebMouseEvent&);
     147    virtual bool handleKeyboardEvent(const WebKeyboardEvent&);
    146148    virtual void setFocus(bool);
    147149    virtual NPObject* pluginScriptableNPObject();
  • trunk/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm

    r68299 r68988  
    299299    return false;
    300300}
    301        
     301
    302302bool NetscapePlugin::platformHandleMouseLeaveEvent(const WebMouseEvent& mouseEvent)
    303303{
     
    317317}
    318318
     319static unsigned modifierFlags(const WebKeyboardEvent& keyboardEvent)
     320{
     321    unsigned modifierFlags = 0;
     322
     323    if (keyboardEvent.shiftKey())
     324        modifierFlags |= NSShiftKeyMask;
     325    if (keyboardEvent.controlKey())
     326        modifierFlags |= NSControlKeyMask;
     327    if (keyboardEvent.altKey())
     328        modifierFlags |= NSAlternateKeyMask;
     329    if (keyboardEvent.metaKey())
     330        modifierFlags |= NSCommandKeyMask;
     331
     332    return modifierFlags;
     333}
     334
     335static NPCocoaEvent initializeKeyboardEvent(const WebKeyboardEvent& keyboardEvent)
     336{
     337    NPCocoaEventType eventType;
     338   
     339    switch (keyboardEvent.type()) {
     340        case WebEvent::KeyDown:
     341            eventType = NPCocoaEventKeyDown;
     342            break;
     343        case WebEvent::KeyUp:
     344            eventType = NPCocoaEventKeyUp;
     345            break;
     346        default:
     347            ASSERT_NOT_REACHED();
     348            return NPCocoaEvent();
     349    }
     350
     351    NPCocoaEvent event = initializeEvent(eventType);
     352    event.data.key.modifierFlags = modifierFlags(keyboardEvent);
     353    event.data.key.characters = reinterpret_cast<NPNSString*>(static_cast<NSString*>(keyboardEvent.text()));
     354    event.data.key.charactersIgnoringModifiers = reinterpret_cast<NPNSString*>(static_cast<NSString*>(keyboardEvent.unmodifiedText()));
     355    event.data.key.isARepeat = keyboardEvent.isAutoRepeat();
     356    event.data.key.keyCode = keyboardEvent.nativeVirtualKeyCode();
     357
     358    return event;
     359}
     360
     361bool NetscapePlugin::platformHandleKeyboardEvent(const WebKeyboardEvent& keyboardEvent)
     362{
     363    switch (m_eventModel) {
     364        case NPEventModelCocoa: {
     365            NPCocoaEvent event  = initializeKeyboardEvent(keyboardEvent);
     366            return NPP_HandleEvent(&event);
     367        }
     368
     369        default:
     370            ASSERT_NOT_REACHED();
     371    }
     372
     373    return false;
     374}
     375
    319376void NetscapePlugin::platformSetFocus(bool hasFocus)
    320377{
  • trunk/WebKit2/WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp

    r68299 r68988  
    106106}
    107107
     108bool NetscapePlugin::platformHandleKeyboardEvent(const WebKeyboardEvent&)
     109{
     110    notImplemented();
     111    return false;
     112}
     113
    108114} // namespace WebKit
  • trunk/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp

    r68891 r68988  
    256256}
    257257
     258bool NetscapePlugin::platformHandleKeyboardEvent(const WebKeyboardEvent&)
     259{
     260    notImplemented();
     261    return false;
     262}
     263
    258264} // namespace WebKit
  • trunk/WebKit2/WebProcess/Plugins/Plugin.h

    r68962 r68988  
    4646namespace WebKit {
    4747
     48class WebKeyboardEvent;
    4849class WebMouseEvent;
    4950class WebWheelEvent;
     
    132133    virtual bool handleMouseLeaveEvent(const WebMouseEvent&) = 0;
    133134
     135    // Tells the plug-in to handle the passed in keyboard event. The plug-in should return true if it processed the event.
     136    virtual bool handleKeyboardEvent(const WebKeyboardEvent&) = 0;
     137   
    134138    // Tells the plug-in about focus changes.
    135139    virtual void setFocus(bool) = 0;
  • trunk/WebKit2/WebProcess/Plugins/PluginView.cpp

    r68962 r68988  
    479479    bool didHandleEvent = false;
    480480
    481     if ((event->type() == eventNames().mousemoveEvent && currentEvent->type() == WebEvent::MouseMove) 
     481    if ((event->type() == eventNames().mousemoveEvent && currentEvent->type() == WebEvent::MouseMove)
    482482        || (event->type() == eventNames().mousedownEvent && currentEvent->type() == WebEvent::MouseDown)
    483483        || (event->type() == eventNames().mouseupEvent && currentEvent->type() == WebEvent::MouseUp)) {
     
    496496        // We have a mouse leave event.
    497497        didHandleEvent = m_plugin->handleMouseLeaveEvent(static_cast<const WebMouseEvent&>(*currentEvent));
     498    } else if ((event->type() == eventNames().keydownEvent && currentEvent->type() == WebEvent::KeyDown)
     499               || (event->type() == eventNames().keyupEvent && currentEvent->type() == WebEvent::KeyUp)) {
     500        // We have a keyboard event.
     501        didHandleEvent = m_plugin->handleKeyboardEvent(static_cast<const WebKeyboardEvent&>(*currentEvent));
    498502    }
    499503
Note: See TracChangeset for help on using the changeset viewer.