OSDN Git Service

When mouse down or plugin handles touch down, set the plugin
authorGrace Kloba <klobag@google.com>
Thu, 24 Sep 2009 00:31:16 +0000 (17:31 -0700)
committerGrace Kloba <klobag@google.com>
Thu, 24 Sep 2009 00:37:58 +0000 (17:37 -0700)
to be the focus of the document so that it can receive key
events. This has the same logic as in PluginViewMac.cpp's
handleMouseEvent().

WebCore/plugins/android/PluginViewAndroid.cpp

index d98ccef..7d10993 100644 (file)
@@ -31,6 +31,7 @@
 #include "Document.h"
 #include "Element.h"
 #include "EventNames.h"
+#include "FocusController.h"
 #include "FrameLoader.h"
 #include "FrameLoadRequest.h"
 #include "FrameTree.h"
@@ -243,6 +244,12 @@ void PluginView::handleTouchEvent(TouchEvent* event)
     evt.data.touch.y = event->pageY() - m_npWindow.y;
 
     if (m_plugin->pluginFuncs()->event(m_instance, &evt)) {
+        // The plugin needs focus to receive keyboard events
+        if (evt.data.touch.action == kDown_ANPTouchAction) {
+            if (Page* page = m_parentFrame->page())
+                page->focusController()->setFocusedFrame(m_parentFrame);
+            m_parentFrame->document()->setFocusedNode(m_element);
+        }
         event->setDefaultPrevented(true);
     }
 }
@@ -264,6 +271,12 @@ void PluginView::handleMouseEvent(MouseEvent* event)
         // coordinates despite their misleading name.
         evt.data.mouse.x = event->pageX() - m_npWindow.x;
         evt.data.mouse.y = event->pageY() - m_npWindow.y;
+        if (isDown) {
+            // The plugin needs focus to receive keyboard events
+            if (Page* page = m_parentFrame->page())
+                page->focusController()->setFocusedFrame(m_parentFrame);
+            m_parentFrame->document()->setFocusedNode(m_element);
+        }
     }
     else {
       return;