Title: [134982] trunk/Tools
Revision
134982
Author
bfulg...@webkit.org
Date
2012-11-16 12:19:08 -0800 (Fri, 16 Nov 2012)

Log Message

[Win] key event's location does not work on Windows platform.
https://bugs.webkit.org/show_bug.cgi?id=89742

Patch by Takashi Sakamoto <ta...@google.com> on 2012-11-15
Reviewed by Brent Fulgham.

Modified keyDownCallback to use lparam to specify left-hand keys or
right-hand keys.

* DumpRenderTree/win/EventSender.cpp:
(makeKeyDataForScanCode):
Given a virtual keycode, generate scancode and extended key bit of
lparam.
(keyDownCallback):
Use lparam for left-hand and right-hand keys, because Windows doesn't
directly provide a virtual keycode which distinguishes between
left-hand and right-hand. For example, when control key is pressed,
wparam has VK_CONTROL, neither VK_RCONTROL nor VK_LCONTROL.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (134981 => 134982)


--- trunk/Tools/ChangeLog	2012-11-16 20:18:04 UTC (rev 134981)
+++ trunk/Tools/ChangeLog	2012-11-16 20:19:08 UTC (rev 134982)
@@ -1,3 +1,23 @@
+2012-11-15  Takashi Sakamoto  <ta...@google.com>
+
+        [Win] key event's location does not work on Windows platform.
+        https://bugs.webkit.org/show_bug.cgi?id=89742
+
+        Reviewed by Brent Fulgham.
+
+        Modified keyDownCallback to use lparam to specify left-hand keys or
+        right-hand keys.
+
+        * DumpRenderTree/win/EventSender.cpp:
+        (makeKeyDataForScanCode):
+        Given a virtual keycode, generate scancode and extended key bit of
+        lparam.
+        (keyDownCallback):
+        Use lparam for left-hand and right-hand keys, because Windows doesn't
+        directly provide a virtual keycode which distinguishes between
+        left-hand and right-hand. For example, when control key is pressed,
+        wparam has VK_CONTROL, neither VK_RCONTROL nor VK_LCONTROL.
+
 2012-11-16  Tommy Widenflycht  <tom...@google.com>
 
         [chromium] MediaStream API: Add missing WebRTCPeerConnectionHandlerClient::didAddRemoteDataChannel

Modified: trunk/Tools/DumpRenderTree/win/EventSender.cpp (134981 => 134982)


--- trunk/Tools/DumpRenderTree/win/EventSender.cpp	2012-11-16 20:18:04 UTC (rev 134981)
+++ trunk/Tools/DumpRenderTree/win/EventSender.cpp	2012-11-16 20:19:08 UTC (rev 134982)
@@ -45,6 +45,9 @@
 #include <wtf/text/WTFString.h>
 
 #define WM_DRT_SEND_QUEUED_EVENT (WM_APP+1)
+#ifndef MAPVK_VK_TO_VSC
+#define MAPVK_VK_TO_VSC 0
+#endif
 
 static bool down;
 static bool dragMode = true;
@@ -434,6 +437,16 @@
     replayingSavedEvents = false;
 }
 
+static int makeKeyDataForScanCode(int virtualKeyCode)
+{
+    unsigned scancode = MapVirtualKey(virtualKeyCode, MAPVK_VK_TO_VSC);
+    int keyData = scancode & 0xFF;
+    scancode = scancode >> 8;
+    if (scancode == 0xe0 || scancode == 0xe1)
+        keyData += KF_EXTENDED;
+    return keyData << 16;
+}
+
 static JSValueRef keyDownCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
     if (argumentCount < 1)
@@ -479,19 +492,25 @@
         virtualKeyCode = VK_SNAPSHOT;
     else if (JSStringIsEqualToUTF8CString(character, "menu"))
         virtualKeyCode = VK_APPS;
-    else if (JSStringIsEqualToUTF8CString(character, "leftControl"))
-        virtualKeyCode = VK_LCONTROL;
-    else if (JSStringIsEqualToUTF8CString(character, "leftShift"))
-        virtualKeyCode = VK_LSHIFT;
-    else if (JSStringIsEqualToUTF8CString(character, "leftAlt"))
-        virtualKeyCode = VK_LMENU;
-    else if (JSStringIsEqualToUTF8CString(character, "rightControl"))
-        virtualKeyCode = VK_RCONTROL;
-    else if (JSStringIsEqualToUTF8CString(character, "rightShift"))
-        virtualKeyCode = VK_RSHIFT;
-    else if (JSStringIsEqualToUTF8CString(character, "rightAlt"))
-        virtualKeyCode = VK_RMENU;
-    else {
+    else if (JSStringIsEqualToUTF8CString(character, "leftControl")) {
+        virtualKeyCode = VK_CONTROL;
+        keyData += makeKeyDataForScanCode(VK_LCONTROL);
+    } else if (JSStringIsEqualToUTF8CString(character, "leftShift")) {
+        virtualKeyCode = VK_SHIFT;
+        keyData += makeKeyDataForScanCode(VK_LSHIFT);
+    } else if (JSStringIsEqualToUTF8CString(character, "leftAlt")) {
+        virtualKeyCode = VK_MENU;
+        keyData += makeKeyDataForScanCode(VK_LMENU);
+    } else if (JSStringIsEqualToUTF8CString(character, "rightControl")) {
+        virtualKeyCode = VK_CONTROL;
+        keyData += makeKeyDataForScanCode(VK_RCONTROL);
+    } else if (JSStringIsEqualToUTF8CString(character, "rightShift")) {
+        virtualKeyCode = VK_SHIFT;
+        keyData += makeKeyDataForScanCode(VK_RSHIFT);
+    } else if (JSStringIsEqualToUTF8CString(character, "rightAlt")) {
+        virtualKeyCode = VK_MENU;
+        keyData += makeKeyDataForScanCode(VK_RMENU);
+    } else {
         charCode = JSStringGetCharactersPtr(character)[0];
         virtualKeyCode = LOBYTE(VkKeyScan(charCode));
         if (WTF::isASCIIUpper(charCode))
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to