18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Holger Hans Peter Freyther
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Collabora, Ltd.  All rights reserved.
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * All rights reserved.
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformKeyboardEvent.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3368513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "GtkVersioning.h"
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NotImplemented.h"
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "TextEncoding.h"
36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "WindowsKeyboardCodes.h"
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <gdk/gdk.h>
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <gdk/gdkkeysyms.h>
40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// FIXME: This is incomplete.  We should change this to mirror
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// more like what Firefox does, and generate these switch statements
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// at build time.
4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochString PlatformKeyboardEvent::keyIdentifierForGdkKeyCode(unsigned keyCode)
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    switch (keyCode) {
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Menu:
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Alt_L:
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Alt_R:
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Alt";
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Clear:
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Clear";
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Down:
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Down";
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // "End"
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_End:
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "End";
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // "Enter"
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_ISO_Enter:
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_Enter:
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Return:
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Enter";
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Execute:
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Execute";
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F1:
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F1";
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F2:
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F2";
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F3:
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F3";
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F4:
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F4";
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F5:
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F5";
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F6:
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F6";
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F7:
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F7";
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F8:
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F8";
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F9:
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F9";
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F10:
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F10";
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F11:
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F11";
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F12:
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F12";
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F13:
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F13";
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F14:
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F14";
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F15:
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F15";
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F16:
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F16";
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F17:
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F17";
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F18:
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F18";
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F19:
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F19";
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F20:
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F20";
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F21:
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F21";
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F22:
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F22";
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F23:
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F23";
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F24:
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "F24";
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Help:
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Help";
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Home:
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Home";
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Insert:
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Insert";
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Left:
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Left";
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Page_Down:
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "PageDown";
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Page_Up:
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "PageUp";
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Pause:
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Pause";
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_3270_PrintScreen:
130dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch        case GDK_Print:
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "PrintScreen";
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Right:
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Right";
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Select:
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Select";
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Up:
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "Up";
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // Standard says that DEL becomes U+007F.
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Delete:
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "U+007F";
141231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        case GDK_BackSpace:
142231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            return "U+0008";
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_ISO_Left_Tab:
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_3270_BackTab:
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Tab:
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return "U+0009";
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        default:
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return String::format("U+%04X", gdk_keyval_to_unicode(gdk_keyval_to_upper(keyCode)));
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
15281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochint PlatformKeyboardEvent::windowsKeyCodeForGdkKeyCode(unsigned keycode)
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    switch (keycode) {
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_0:
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NUMPAD0;// (60) Numeric keypad 0 key
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_1:
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NUMPAD1;// (61) Numeric keypad 1 key
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_2:
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return  VK_NUMPAD2; // (62) Numeric keypad 2 key
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_3:
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NUMPAD3; // (63) Numeric keypad 3 key
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_4:
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NUMPAD4; // (64) Numeric keypad 4 key
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_5:
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NUMPAD5; //(65) Numeric keypad 5 key
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_6:
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NUMPAD6; // (66) Numeric keypad 6 key
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_7:
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NUMPAD7; // (67) Numeric keypad 7 key
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_8:
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NUMPAD8; // (68) Numeric keypad 8 key
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_9:
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NUMPAD9; // (69) Numeric keypad 9 key
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_Multiply:
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_MULTIPLY; // (6A) Multiply key
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_Add:
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_ADD; // (6B) Add key
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_Subtract:
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_SUBTRACT; // (6D) Subtract key
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_Decimal:
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_DECIMAL; // (6E) Decimal key
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_Divide:
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_DIVIDE; // (6F) Divide key
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
186d0825bca7fe65beaee391d30da42e937db621564Steve Block        case GDK_KP_Page_Up:
187d0825bca7fe65beaee391d30da42e937db621564Steve Block            return VK_PRIOR; // (21) PAGE UP key
188d0825bca7fe65beaee391d30da42e937db621564Steve Block        case GDK_KP_Page_Down:
189d0825bca7fe65beaee391d30da42e937db621564Steve Block            return VK_NEXT; // (22) PAGE DOWN key
190d0825bca7fe65beaee391d30da42e937db621564Steve Block        case GDK_KP_End:
191d0825bca7fe65beaee391d30da42e937db621564Steve Block            return VK_END; // (23) END key
192d0825bca7fe65beaee391d30da42e937db621564Steve Block        case GDK_KP_Home:
193d0825bca7fe65beaee391d30da42e937db621564Steve Block            return VK_HOME; // (24) HOME key
194d0825bca7fe65beaee391d30da42e937db621564Steve Block        case GDK_KP_Left:
195d0825bca7fe65beaee391d30da42e937db621564Steve Block            return VK_LEFT; // (25) LEFT ARROW key
196d0825bca7fe65beaee391d30da42e937db621564Steve Block        case GDK_KP_Up:
197d0825bca7fe65beaee391d30da42e937db621564Steve Block            return VK_UP; // (26) UP ARROW key
198d0825bca7fe65beaee391d30da42e937db621564Steve Block        case GDK_KP_Right:
199d0825bca7fe65beaee391d30da42e937db621564Steve Block            return VK_RIGHT; // (27) RIGHT ARROW key
200d0825bca7fe65beaee391d30da42e937db621564Steve Block        case GDK_KP_Down:
201d0825bca7fe65beaee391d30da42e937db621564Steve Block            return VK_DOWN; // (28) DOWN ARROW key
202d0825bca7fe65beaee391d30da42e937db621564Steve Block
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_BackSpace:
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_BACK; // (08) BACKSPACE key
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_ISO_Left_Tab:
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_3270_BackTab:
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Tab:
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_TAB; // (09) TAB key
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Clear:
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_CLEAR; // (0C) CLEAR key
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_ISO_Enter:
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_Enter:
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Return:
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_RETURN; //(0D) Return key
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Shift_L:
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Shift_R:
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_SHIFT; // (10) SHIFT key
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Control_L:
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Control_R:
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_CONTROL; // (11) CTRL key
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Menu:
222cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block            return VK_APPS;  // (5D) Applications key (Natural keyboard)
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Alt_L:
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Alt_R:
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_MENU; // (12) ALT key
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Pause:
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_PAUSE; // (13) PAUSE key
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Caps_Lock:
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_CAPITAL; // (14) CAPS LOCK key
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Kana_Lock:
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Kana_Shift:
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_KANA; // (15) Input Method Editor (IME) Kana mode
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Hangul:
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_HANGUL; // VK_HANGUL (15) IME Hangul mode
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_JUNJA (17) IME Junja mode
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_FINAL (18) IME final mode
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Hangul_Hanja:
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_HANJA; // (19) IME Hanja mode
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Kanji:
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_KANJI; // (19) IME Kanji mode
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Escape:
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_ESCAPE; // (1B) ESC key
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_CONVERT (1C) IME convert
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_NONCONVERT (1D) IME nonconvert
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_ACCEPT (1E) IME accept
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_MODECHANGE (1F) IME mode change request
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_space:
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_SPACE; // (20) SPACEBAR
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Page_Up:
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_PRIOR; // (21) PAGE UP key
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Page_Down:
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NEXT; // (22) PAGE DOWN key
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_End:
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_END; // (23) END key
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Home:
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_HOME; // (24) HOME key
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Left:
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_LEFT; // (25) LEFT ARROW key
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Up:
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_UP; // (26) UP ARROW key
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Right:
2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_RIGHT; // (27) RIGHT ARROW key
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Down:
2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_DOWN; // (28) DOWN ARROW key
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Select:
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_SELECT; // (29) SELECT key
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Print:
269db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block            return VK_SNAPSHOT; // (2C) PRINT SCREEN key
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Execute:
2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_EXECUTE;// (2B) EXECUTE key
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Insert:
273db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        case GDK_KP_Insert:
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_INSERT; // (2D) INS key
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Delete:
276db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block        case GDK_KP_Delete:
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_DELETE; // (2E) DEL key
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Help:
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_HELP; // (2F) HELP key
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_0:
2815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        case GDK_parenright:
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_0;    //  (30) 0) key
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_1:
2845f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        case GDK_exclam:
2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_1; //  (31) 1 ! key
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_2:
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_at:
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_2; //  (32) 2 & key
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_3:
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_numbersign:
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_3; //case '3': case '#';
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_4:
2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_dollar: //  (34) 4 key '$';
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_4;
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_5:
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_percent:
2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_5; //  (35) 5 key  '%'
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_6:
2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_asciicircum:
3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_6; //  (36) 6 key  '^'
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_7:
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_ampersand:
3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_7; //  (37) 7 key  case '&'
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_8:
3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_asterisk:
3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_8; //  (38) 8 key  '*'
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_9:
3085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        case GDK_parenleft:
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_9; //  (39) 9 key '('
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_a:
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_A:
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_A; //  (41) A key case 'a': case 'A': return 0x41;
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_b:
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_B:
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_B; //  (42) B key case 'b': case 'B': return 0x42;
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_c:
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_C:
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_C; //  (43) C key case 'c': case 'C': return 0x43;
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_d:
3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_D:
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_D; //  (44) D key case 'd': case 'D': return 0x44;
3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_e:
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_E:
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_E; //  (45) E key case 'e': case 'E': return 0x45;
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_f:
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_F:
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_F; //  (46) F key case 'f': case 'F': return 0x46;
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_g:
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_G:
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_G; //  (47) G key case 'g': case 'G': return 0x47;
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_h:
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_H:
3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_H; //  (48) H key case 'h': case 'H': return 0x48;
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_i:
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_I:
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_I; //  (49) I key case 'i': case 'I': return 0x49;
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_j:
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_J:
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_J; //  (4A) J key case 'j': case 'J': return 0x4A;
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_k:
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_K:
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_K; //  (4B) K key case 'k': case 'K': return 0x4B;
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_l:
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_L:
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_L; //  (4C) L key case 'l': case 'L': return 0x4C;
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_m:
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_M:
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_M; //  (4D) M key case 'm': case 'M': return 0x4D;
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_n:
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_N:
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_N; //  (4E) N key case 'n': case 'N': return 0x4E;
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_o:
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_O:
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_O; //  (4F) O key case 'o': case 'O': return 0x4F;
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_p:
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_P:
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_P; //  (50) P key case 'p': case 'P': return 0x50;
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_q:
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Q:
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_Q; //  (51) Q key case 'q': case 'Q': return 0x51;
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_r:
3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_R:
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_R; //  (52) R key case 'r': case 'R': return 0x52;
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_s:
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_S:
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_S; //  (53) S key case 's': case 'S': return 0x53;
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_t:
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_T:
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_T; //  (54) T key case 't': case 'T': return 0x54;
3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_u:
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_U:
3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_U; //  (55) U key case 'u': case 'U': return 0x55;
3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_v:
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_V:
3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_V; //  (56) V key case 'v': case 'V': return 0x56;
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_w:
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_W:
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_W; //  (57) W key case 'w': case 'W': return 0x57;
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_x:
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_X:
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_X; //  (58) X key case 'x': case 'X': return 0x58;
3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_y:
3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Y:
3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_Y; //  (59) Y key case 'y': case 'Y': return 0x59;
3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_z:
3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Z:
3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_Z; //  (5A) Z key case 'z': case 'Z': return 0x5A;
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Meta_L:
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_LWIN; // (5B) Left Windows key (Microsoft Natural keyboard)
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Meta_R:
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_RWIN; // (5C) Right Windows key (Natural keyboard)
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_SLEEP (5F) Computer Sleep key
3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_SEPARATOR (6C) Separator key
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_SUBTRACT (6D) Subtract key
3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_DECIMAL (6E) Decimal key
3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_DIVIDE (6F) Divide key
3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // handled by key code above
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Num_Lock:
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_NUMLOCK; // (90) NUM LOCK key
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Scroll_Lock:
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_SCROLL; // (91) SCROLL LOCK key
4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_LSHIFT (A0) Left SHIFT key
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_RSHIFT (A1) Right SHIFT key
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_LCONTROL (A2) Left CONTROL key
4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_RCONTROL (A3) Right CONTROL key
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_LMENU (A4) Left MENU key
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_RMENU (A5) Right MENU key
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_BROWSER_BACK (A6) Windows 2000/XP: Browser Back key
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_BROWSER_FORWARD (A7) Windows 2000/XP: Browser Forward key
4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_BROWSER_REFRESH (A8) Windows 2000/XP: Browser Refresh key
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_BROWSER_STOP (A9) Windows 2000/XP: Browser Stop key
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_BROWSER_SEARCH (AA) Windows 2000/XP: Browser Search key
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_BROWSER_FAVORITES (AB) Windows 2000/XP: Browser Favorites key
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_BROWSER_HOME (AC) Windows 2000/XP: Browser Start and Home key
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_VOLUME_MUTE (AD) Windows 2000/XP: Volume Mute key
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_VOLUME_DOWN (AE) Windows 2000/XP: Volume Down key
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_VOLUME_UP (AF) Windows 2000/XP: Volume Up key
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_MEDIA_NEXT_TRACK (B0) Windows 2000/XP: Next Track key
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_MEDIA_PREV_TRACK (B1) Windows 2000/XP: Previous Track key
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_MEDIA_STOP (B2) Windows 2000/XP: Stop Media key
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_MEDIA_PLAY_PAUSE (B3) Windows 2000/XP: Play/Pause Media key
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_LAUNCH_MAIL (B4) Windows 2000/XP: Start Mail key
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_LAUNCH_MEDIA_SELECT (B5) Windows 2000/XP: Select Media key
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_LAUNCH_APP1 (B6) Windows 2000/XP: Start Application 1 key
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_LAUNCH_APP2 (B7) Windows 2000/XP: Start Application 2 key
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_1 (BA) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ';:' key
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_semicolon:
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_colon:
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_1; //case ';': case ':': return 0xBA;
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_PLUS (BB) Windows 2000/XP: For any country/region, the '+' key
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_plus:
4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_equal:
4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_PLUS; //case '=': case '+': return 0xBB;
4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_COMMA (BC) Windows 2000/XP: For any country/region, the ',' key
4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_comma:
4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_less:
4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_COMMA; //case ',': case '<': return 0xBC;
4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_MINUS (BD) Windows 2000/XP: For any country/region, the '-' key
4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_minus:
4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_underscore:
4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_MINUS; //case '-': case '_': return 0xBD;
4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_PERIOD (BE) Windows 2000/XP: For any country/region, the '.' key
4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_period:
4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_greater:
4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_PERIOD; //case '.': case '>': return 0xBE;
4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_2 (BF) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '/?' key
4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_slash:
4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_question:
4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_2; //case '/': case '?': return 0xBF;
4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_3 (C0) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '`~' key
4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_asciitilde:
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_quoteleft:
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_3; //case '`': case '~': return 0xC0;
4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_4 (DB) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '[{' key
4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_bracketleft:
4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_braceleft:
4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_4; //case '[': case '{': return 0xDB;
4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_5 (DC) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '\|' key
4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_backslash:
4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_bar:
4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_5; //case '\\': case '|': return 0xDC;
4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_6 (DD) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ']}' key
4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_bracketright:
4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_braceright:
4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_6; // case ']': case '}': return 0xDD;
4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_7 (DE) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key
4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_quoteright:
4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_quotedbl:
4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return VK_OEM_7; // case '\'': case '"': return 0xDE;
4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_8 (DF) Used for miscellaneous characters; it can vary by keyboard.
4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_102 (E2) Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_PROCESSKEY (E5) Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_PACKET (E7) Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT,SendInput, WM_KEYDOWN, and WM_KEYUP
4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_ATTN (F6) Attn key
4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_CRSEL (F7) CrSel key
4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_EXSEL (F8) ExSel key
4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_EREOF (F9) Erase EOF key
4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_PLAY (FA) Play key
4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_ZOOM (FB) Zoom key
4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_NONAME (FC) Reserved for future use
4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_PA1 (FD) PA1 key
4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // VK_OEM_CLEAR (FE) Clear key
487635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F1:
488635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F2:
489635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F3:
490635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F4:
491635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F5:
492635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F6:
493635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F7:
494635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F8:
495635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F9:
496635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F10:
497635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F11:
498635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F12:
499635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F13:
500635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F14:
501635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F15:
502635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F16:
503635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F17:
504635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F18:
505635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F19:
506635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F20:
507635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F21:
508635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F22:
509635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F23:
510635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        case GDK_F24:
511635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            return VK_F1 + (keycode - GDK_F1);
512635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        default:
5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return 0;
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
51981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochString PlatformKeyboardEvent::singleCharacterString(unsigned val)
5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    switch (val) {
5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_ISO_Enter:
5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_KP_Enter:
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case GDK_Return:
5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return String("\r");
526231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        case GDK_BackSpace:
527231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            return String("\x8");
528643ca7872b450ea4efacab6188849e5aac2ba161Steve Block        case GDK_Tab:
529643ca7872b450ea4efacab6188849e5aac2ba161Steve Block            return String("\t");
5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        default:
5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            gunichar c = gdk_keyval_to_unicode(val);
5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            glong nwc;
5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            gunichar2* uchar16 = g_ucs4_to_utf16(&c, 1, 0, &nwc, 0);
5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            String retVal;
5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (uchar16)
5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                retVal = String((UChar*)uchar16, nwc);
5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            else
5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                retVal = String();
5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            g_free(uchar16);
5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return retVal;
5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Keep this in sync with the other platform event constructors
5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// TODO: m_gdkEventKey should be refcounted
5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPlatformKeyboardEvent::PlatformKeyboardEvent(GdkEventKey* event)
5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : m_type((event->type == GDK_KEY_RELEASE) ? KeyUp : KeyDown)
5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_text(singleCharacterString(event->keyval))
5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_unmodifiedText(singleCharacterString(event->keyval))
5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_keyIdentifier(keyIdentifierForGdkKeyCode(event->keyval))
5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_autoRepeat(false)
55581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    , m_windowsVirtualKeyCode(windowsKeyCodeForGdkKeyCode(event->keyval))
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_nativeVirtualKeyCode(event->keyval)
5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_isKeypad(event->keyval >= GDK_KP_Space && event->keyval <= GDK_KP_9)
5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_shiftKey((event->state & GDK_SHIFT_MASK) || (event->keyval == GDK_3270_BackTab))
5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_ctrlKey(event->state & GDK_CONTROL_MASK)
5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_altKey(event->state & GDK_MOD1_MASK)
5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_metaKey(event->state & GDK_META_MASK)
5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_gdkEventKey(event)
5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid PlatformKeyboardEvent::disambiguateKeyDownEvent(Type type, bool backwardCompatibilityMode)
5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Can only change type from KeyDown to RawKeyDown or Char, as we lack information for other conversions.
5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(m_type == KeyDown);
5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_type = type;
5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (backwardCompatibilityMode)
5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (type == RawKeyDown) {
5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_text = String();
5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_unmodifiedText = String();
5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    } else {
5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_keyIdentifier = String();
5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_windowsVirtualKeyCode = 0;
5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool PlatformKeyboardEvent::currentCapsLockState()
5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
586ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    return gdk_keymap_get_caps_lock_state(gdk_keymap_get_default());
5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
589dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid PlatformKeyboardEvent::getCurrentModifierState(bool& shiftKey, bool& ctrlKey, bool& altKey, bool& metaKey)
590dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
59181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    GdkModifierType state;
59281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    gtk_get_current_event_state(&state);
59381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
59481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    shiftKey = state & GDK_SHIFT_MASK;
59581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    ctrlKey = state & GDK_CONTROL_MASK;
59681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    altKey = state & GDK_MOD1_MASK;
59781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    metaKey = state & GDK_META_MASK;
598dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
599dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectGdkEventKey* PlatformKeyboardEvent::gdkEventKey() const
6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_gdkEventKey;
6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
606