keydown and keyup events have zero keycode for some numeric pad keys under Chromium...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Mar 2013 22:44:01 +0000 (22:44 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Mar 2013 22:44:01 +0000 (22:44 +0000)
https://bugs.webkit.org/show_bug.cgi?id=85642

Source/WebCore:

Add missing key mappings for GDK_KP_Begin, GDK_KP_Insert, GDK_KP_Delete and GDK_ISO_Level3_Shift.

Patch by James Weatherall <wez@chromium.org> on 2013-03-05
Reviewed by Ojan Vafai.

* platform/chromium/KeyCodeConversionGtk.cpp:
(WebCore::windowsKeyCodeForKeyEvent):

Source/WebKit/chromium:

Add tests to verify that the fixed keys generate the same keyCode values as their equivalents.

Patch by James Weatherall <wez@chromium.org> on 2013-03-05
Reviewed by Ojan Vafai.

* WebKit.gypi:
* tests/KeyCodeConversionTestGtk.cpp: Added.
(WebCore):
(WebCore::TEST):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@144821 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/chromium/KeyCodeConversionGtk.cpp
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/WebKit.gypi
Source/WebKit/chromium/tests/KeyCodeConversionTestGtk.cpp [new file with mode: 0644]

index 67b4097..a47c1e6 100644 (file)
@@ -1,3 +1,15 @@
+2013-03-05  James Weatherall  <wez@chromium.org>
+
+        keydown and keyup events have zero keycode for some numeric pad keys under Chromium on Linux
+        https://bugs.webkit.org/show_bug.cgi?id=85642
+
+        Add missing key mappings for GDK_KP_Begin, GDK_KP_Insert, GDK_KP_Delete and GDK_ISO_Level3_Shift.
+
+        Reviewed by Ojan Vafai.
+
+        * platform/chromium/KeyCodeConversionGtk.cpp:
+        (WebCore::windowsKeyCodeForKeyEvent):
+
 2013-03-05  Alec Flett  <alecflett@chromium.org>
 
         IndexedDB: Properly refactor frontend/backend code by #includes
index e7c0e20..0862b76 100644 (file)
@@ -88,6 +88,12 @@ int windowsKeyCodeForKeyEvent(unsigned keycode)
         return VKEY_RIGHT; // (27) RIGHT ARROW key
     case GDK_KP_Down:
         return VKEY_DOWN; // (28) DOWN ARROW key
+    case GDK_KP_Begin:
+        return VKEY_CLEAR; // (12) CLEAR key
+    case GDK_KP_Insert:
+        return VKEY_INSERT; // (45) INS key
+    case GDK_KP_Delete:
+        return VKEY_DELETE; // (46) DEL key
 
     case GDK_BackSpace:
         return VKEY_BACK; // (08) BACKSPACE key
@@ -114,6 +120,7 @@ int windowsKeyCodeForKeyEvent(unsigned keycode)
     case GDK_Alt_L:
         return VKEY_LMENU; // (A4) Left ALT key
     case GDK_Alt_R:
+    case GDK_ISO_Level3_Shift:
         return VKEY_RMENU; // (A5) Right ALT key
 
     case GDK_Pause:
index f1b3528..565db90 100644 (file)
@@ -1,3 +1,17 @@
+2013-03-05  James Weatherall  <wez@chromium.org>
+
+        keydown and keyup events have zero keycode for some numeric pad keys under Chromium on Linux
+        https://bugs.webkit.org/show_bug.cgi?id=85642
+
+        Add tests to verify that the fixed keys generate the same keyCode values as their equivalents.
+
+        Reviewed by Ojan Vafai.
+
+        * WebKit.gypi:
+        * tests/KeyCodeConversionTestGtk.cpp: Added.
+        (WebCore):
+        (WebCore::TEST):
+
 2013-03-05  Alec Flett  <alecflett@chromium.org>
 
         IndexedDB: Properly refactor frontend/backend code by #includes
index 3ae3afe..ea693e9 100644 (file)
             }],
             ['toolkit_uses_gtk == 1', {
                 'webkit_unittest_files': [
+                    'tests/KeyCodeConversionTestGtk.cpp',
                     'tests/WebInputEventFactoryTestGtk.cpp',
                 ],
             }],
diff --git a/Source/WebKit/chromium/tests/KeyCodeConversionTestGtk.cpp b/Source/WebKit/chromium/tests/KeyCodeConversionTestGtk.cpp
new file mode 100644 (file)
index 0000000..b9b970c
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "KeyCodeConversion.h"
+
+#include "KeyboardCodes.h"
+#include <gdk/gdkkeysyms.h>
+#include <gtest/gtest.h>
+
+using namespace WebCore;
+
+namespace {
+
+TEST(KeyCodeConversionTest, KeyPadClear)
+{
+    EXPECT_EQ(VKEY_CLEAR, windowsKeyCodeForKeyEvent(GDK_KP_Begin));
+}
+
+TEST(KeyCodeConversionTest, KeyPadInsert)
+{
+    EXPECT_EQ(windowsKeyCodeForKeyEvent(GDK_Insert),
+        windowsKeyCodeForKeyEvent(GDK_KP_Insert));
+}
+
+TEST(KeyCodeConversionTest, KeyPadDelete)
+{
+    EXPECT_EQ(windowsKeyCodeForKeyEvent(GDK_Delete),
+        windowsKeyCodeForKeyEvent(GDK_KP_Delete));
+}
+
+TEST(KeyCodeConversionTest, AltGr)
+{
+    EXPECT_EQ(windowsKeyCodeForKeyEvent(GDK_Alt_R),
+        windowsKeyCodeForKeyEvent(GDK_ISO_Level3_Shift));
+}
+
+} // anonymous namespace