[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

andersca at apple.com andersca at apple.com
Wed Dec 22 14:04:49 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 769334bc04739f61a4252d4bc4c6ba9a4ec2838d
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sun Oct 3 21:02:19 2010 +0000

    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.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68988 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 46cecf0..4c266e4 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,40 @@
+2010-10-03  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Send keyboard events to plug-ins
+        https://bugs.webkit.org/show_bug.cgi?id=47064
+        <rdar://problem/8507148>
+
+        * 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.
+
 2010-10-01  Mark Rowe  <mrowe at apple.com>
 
         Build fix.
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
index 2220069..65fcace 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.cpp
@@ -537,6 +537,11 @@ bool NetscapePlugin::handleMouseLeaveEvent(const WebMouseEvent& mouseEvent)
     return platformHandleMouseLeaveEvent(mouseEvent);
 }
 
+bool NetscapePlugin::handleKeyboardEvent(const WebKeyboardEvent& keyboardEvent)
+{
+    return platformHandleKeyboardEvent(keyboardEvent);
+}
+
 void NetscapePlugin::setFocus(bool hasFocus)
 {
     platformSetFocus(hasFocus);
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
index cfec376..60fc29e 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapePlugin.h
@@ -115,6 +115,7 @@ private:
     bool platformHandleWheelEvent(const WebWheelEvent&);
     bool platformHandleMouseEnterEvent(const WebMouseEvent&);
     bool platformHandleMouseLeaveEvent(const WebMouseEvent&);
+    bool platformHandleKeyboardEvent(const WebKeyboardEvent&);
     void platformSetFocus(bool);
 
     // Plugin
@@ -143,6 +144,7 @@ private:
     virtual bool handleWheelEvent(const WebWheelEvent&);
     virtual bool handleMouseEnterEvent(const WebMouseEvent&);
     virtual bool handleMouseLeaveEvent(const WebMouseEvent&);
+    virtual bool handleKeyboardEvent(const WebKeyboardEvent&);
     virtual void setFocus(bool);
     virtual NPObject* pluginScriptableNPObject();
 
diff --git a/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm b/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm
index f2d8fe7..1636ab2 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm
+++ b/WebKit2/WebProcess/Plugins/Netscape/mac/NetscapePluginMac.mm
@@ -298,7 +298,7 @@ bool NetscapePlugin::platformHandleMouseEnterEvent(const WebMouseEvent& mouseEve
 
     return false;
 }
-        
+
 bool NetscapePlugin::platformHandleMouseLeaveEvent(const WebMouseEvent& mouseEvent)
 {
     switch (m_eventModel) {
@@ -316,6 +316,63 @@ bool NetscapePlugin::platformHandleMouseLeaveEvent(const WebMouseEvent& mouseEve
     return false;
 }
 
+static unsigned modifierFlags(const WebKeyboardEvent& keyboardEvent)
+{
+    unsigned modifierFlags = 0;
+
+    if (keyboardEvent.shiftKey())
+        modifierFlags |= NSShiftKeyMask;
+    if (keyboardEvent.controlKey())
+        modifierFlags |= NSControlKeyMask;
+    if (keyboardEvent.altKey())
+        modifierFlags |= NSAlternateKeyMask;
+    if (keyboardEvent.metaKey())
+        modifierFlags |= NSCommandKeyMask;
+
+    return modifierFlags;
+}
+
+static NPCocoaEvent initializeKeyboardEvent(const WebKeyboardEvent& keyboardEvent)
+{
+    NPCocoaEventType eventType;
+    
+    switch (keyboardEvent.type()) {
+        case WebEvent::KeyDown:
+            eventType = NPCocoaEventKeyDown;
+            break;
+        case WebEvent::KeyUp:
+            eventType = NPCocoaEventKeyUp;
+            break;
+        default:
+            ASSERT_NOT_REACHED();
+            return NPCocoaEvent();
+    }
+
+    NPCocoaEvent event = initializeEvent(eventType);
+    event.data.key.modifierFlags = modifierFlags(keyboardEvent);
+    event.data.key.characters = reinterpret_cast<NPNSString*>(static_cast<NSString*>(keyboardEvent.text()));
+    event.data.key.charactersIgnoringModifiers = reinterpret_cast<NPNSString*>(static_cast<NSString*>(keyboardEvent.unmodifiedText()));
+    event.data.key.isARepeat = keyboardEvent.isAutoRepeat();
+    event.data.key.keyCode = keyboardEvent.nativeVirtualKeyCode();
+
+    return event;
+}
+
+bool NetscapePlugin::platformHandleKeyboardEvent(const WebKeyboardEvent& keyboardEvent)
+{
+    switch (m_eventModel) {
+        case NPEventModelCocoa: {
+            NPCocoaEvent event  = initializeKeyboardEvent(keyboardEvent);
+            return NPP_HandleEvent(&event);
+        }
+
+        default:
+            ASSERT_NOT_REACHED();
+    }
+
+    return false;
+}
+
 void NetscapePlugin::platformSetFocus(bool hasFocus)
 {
     switch (m_eventModel) {
diff --git a/WebKit2/WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp b/WebKit2/WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp
index 67ac7ea..206859a 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp
+++ b/WebKit2/WebProcess/Plugins/Netscape/qt/NetscapePluginQt.cpp
@@ -105,4 +105,10 @@ bool NetscapePlugin::platformHandleMouseLeaveEvent(const WebMouseEvent& event)
     return true;
 }
 
+bool NetscapePlugin::platformHandleKeyboardEvent(const WebKeyboardEvent&)
+{
+    notImplemented();
+    return false;
+}
+
 } // namespace WebKit
diff --git a/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp b/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp
index 0589c01..6087fe3 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp
+++ b/WebKit2/WebProcess/Plugins/Netscape/win/NetscapePluginWin.cpp
@@ -255,4 +255,10 @@ bool NetscapePlugin::platformHandleMouseLeaveEvent(const WebMouseEvent& event)
     return true;
 }
 
+bool NetscapePlugin::platformHandleKeyboardEvent(const WebKeyboardEvent&)
+{
+    notImplemented();
+    return false;
+}
+
 } // namespace WebKit
diff --git a/WebKit2/WebProcess/Plugins/Plugin.h b/WebKit2/WebProcess/Plugins/Plugin.h
index 0a88c77..825eddc 100644
--- a/WebKit2/WebProcess/Plugins/Plugin.h
+++ b/WebKit2/WebProcess/Plugins/Plugin.h
@@ -45,6 +45,7 @@ namespace WebCore {
 
 namespace WebKit {
 
+class WebKeyboardEvent;
 class WebMouseEvent;
 class WebWheelEvent;
     
@@ -131,6 +132,9 @@ public:
     // Tells the plug-in to handle the passed in mouse leave event. The plug-in should return true if it processed the event.
     virtual bool handleMouseLeaveEvent(const WebMouseEvent&) = 0;
 
+    // Tells the plug-in to handle the passed in keyboard event. The plug-in should return true if it processed the event.
+    virtual bool handleKeyboardEvent(const WebKeyboardEvent&) = 0;
+    
     // Tells the plug-in about focus changes.
     virtual void setFocus(bool) = 0;
 
diff --git a/WebKit2/WebProcess/Plugins/PluginView.cpp b/WebKit2/WebProcess/Plugins/PluginView.cpp
index cfb66e1..5f04c0b 100644
--- a/WebKit2/WebProcess/Plugins/PluginView.cpp
+++ b/WebKit2/WebProcess/Plugins/PluginView.cpp
@@ -478,7 +478,7 @@ void PluginView::handleEvent(Event* event)
 
     bool didHandleEvent = false;
 
-    if ((event->type() == eventNames().mousemoveEvent && currentEvent->type() == WebEvent::MouseMove) 
+    if ((event->type() == eventNames().mousemoveEvent && currentEvent->type() == WebEvent::MouseMove)
         || (event->type() == eventNames().mousedownEvent && currentEvent->type() == WebEvent::MouseDown)
         || (event->type() == eventNames().mouseupEvent && currentEvent->type() == WebEvent::MouseUp)) {
         // We have a mouse event.
@@ -495,6 +495,10 @@ void PluginView::handleEvent(Event* event)
     } else if (event->type() == eventNames().mouseoutEvent && currentEvent->type() == WebEvent::MouseMove) {
         // We have a mouse leave event.
         didHandleEvent = m_plugin->handleMouseLeaveEvent(static_cast<const WebMouseEvent&>(*currentEvent));
+    } else if ((event->type() == eventNames().keydownEvent && currentEvent->type() == WebEvent::KeyDown)
+               || (event->type() == eventNames().keyupEvent && currentEvent->type() == WebEvent::KeyUp)) {
+        // We have a keyboard event.
+        didHandleEvent = m_plugin->handleKeyboardEvent(static_cast<const WebKeyboardEvent&>(*currentEvent));
     }
 
     if (didHandleEvent)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list