widget/NativeKeyToDOMKeyName.h
author Nick Alexander <nalexander@mozilla.com>
Tue, 25 Nov 2014 17:04:55 -0800
changeset 243921 3397a68199cc4cd46fdb217f00dd2237807a5683
parent 236315 ccd53912eb4ce6cf469d6042b02f8090aecebee8
child 247429 a3e3285c280c2c53a8cb143aefb018fdbf940b52
permissions -rw-r--r--
Bug 1098667 - Part 2: Add "Finish migrating" view to Remote Tabs home panel. r=rnewman

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

/**
 * This header file defines simple key mapping between native keycode value and
 * DOM key name index.
 * You must define NS_NATIVE_KEY_TO_DOM_KEY_NAME_INDEX macro before include
 * this.
 *
 * It must have two arguments, (aNativeKey, aKeyNameIndex).
 * aNativeKey is a native keycode value.
 * aKeyNameIndex is the widget::KeyNameIndex value.
 */

// Windows (both Desktop and Metro)
#define KEY_MAP_WIN(aCPPKeyName, aNativeKey)
#define KEY_MAP_WIN_JPN(aCPPKeyName, aNativeKey)
#define KEY_MAP_WIN_KOR(aCPPKeyName, aNativeKey)
#define KEY_MAP_WIN_OTH(aCPPKeyName, aNativeKey)
// Mac OS X
#define KEY_MAP_COCOA(aCPPKeyName, aNativeKey)
// GTK
#define KEY_MAP_GTK(aCPPKeyName, aNativeKey)
// Qt
#define KEY_MAP_QT(aCPPKeyName, aNativeKey)
// Android and Gonk
#define KEY_MAP_ANDROID(aCPPKeyName, aNativeKey)

#if defined(XP_WIN)
// KEY_MAP_WIN() defines the mapping not depending on keyboard layout.
#undef KEY_MAP_WIN
#define KEY_MAP_WIN(aCPPKeyName, aNativeKey) \
  NS_NATIVE_KEY_TO_DOM_KEY_NAME_INDEX(aNativeKey, KEY_NAME_INDEX_##aCPPKeyName)
// KEY_MAP_WIN_JPN() defines the mapping which is valid only with Japanese
// keyboard layout.
#undef KEY_MAP_WIN_JPN
#define KEY_MAP_WIN_JPN(aCPPKeyName, aNativeKey) \
  NS_JAPANESE_NATIVE_KEY_TO_DOM_KEY_NAME_INDEX(aNativeKey, \
                                               KEY_NAME_INDEX_##aCPPKeyName)
// KEY_MAP_WIN_KOR() defines the mapping which is valid only with Korean
// keyboard layout.
#undef KEY_MAP_WIN_KOR
#define KEY_MAP_WIN_KOR(aCPPKeyName, aNativeKey) \
  NS_KOREAN_NATIVE_KEY_TO_DOM_KEY_NAME_INDEX(aNativeKey, \
                                             KEY_NAME_INDEX_##aCPPKeyName)
// KEY_MAP_WIN_OTH() defines the mapping which is valid with neither
// Japanese keyboard layout nor Korean keyboard layout.
#undef KEY_MAP_WIN_OTH
#define KEY_MAP_WIN_OTH(aCPPKeyName, aNativeKey) \
  NS_OTHER_NATIVE_KEY_TO_DOM_KEY_NAME_INDEX(aNativeKey, \
                                            KEY_NAME_INDEX_##aCPPKeyName)
#elif defined(XP_MACOSX)
#undef KEY_MAP_COCOA
#define KEY_MAP_COCOA(aCPPKeyName, aNativeKey) \
  NS_NATIVE_KEY_TO_DOM_KEY_NAME_INDEX(aNativeKey, KEY_NAME_INDEX_##aCPPKeyName)
#elif defined(MOZ_WIDGET_GTK)
#undef KEY_MAP_GTK
#define KEY_MAP_GTK(aCPPKeyName, aNativeKey) \
  NS_NATIVE_KEY_TO_DOM_KEY_NAME_INDEX(aNativeKey, KEY_NAME_INDEX_##aCPPKeyName)
#elif defined(MOZ_WIDGET_QT)
#undef KEY_MAP_QT
#define KEY_MAP_QT(aCPPKeyName, aNativeKey) \
  NS_NATIVE_KEY_TO_DOM_KEY_NAME_INDEX(aNativeKey, KEY_NAME_INDEX_##aCPPKeyName)
#elif defined(ANDROID)
#undef KEY_MAP_ANDROID
#define KEY_MAP_ANDROID(aCPPKeyName, aNativeKey) \
  NS_NATIVE_KEY_TO_DOM_KEY_NAME_INDEX(aNativeKey, KEY_NAME_INDEX_##aCPPKeyName)
#endif

/******************************************************************************
 * Modifier Keys
 ******************************************************************************/
// Alt
KEY_MAP_WIN     (Alt, VK_MENU)
KEY_MAP_WIN     (Alt, VK_LMENU)
KEY_MAP_WIN     (Alt, VK_RMENU)
KEY_MAP_COCOA   (Alt, kVK_Option)
KEY_MAP_COCOA   (Alt, kVK_RightOption)
KEY_MAP_GTK     (Alt, GDK_Alt_L)
KEY_MAP_GTK     (Alt, GDK_Alt_R)
KEY_MAP_QT      (Alt, Qt::Key_Alt)
KEY_MAP_ANDROID (Alt, AKEYCODE_ALT_LEFT)
KEY_MAP_ANDROID (Alt, AKEYCODE_ALT_RIGHT)

// AltGraph
KEY_MAP_GTK     (AltGraph, GDK_Mode_switch /* same as GDK_kana_switch,
                                              GDK_ISO_Group_Shift and
                                              GDK_script_switch */)
// Let's treat both Level 3 shift and Level 5 shift as AltGr.
// And also, let's treat Latch key and Lock key as AltGr key too like
// GDK_Shift_Lock.
KEY_MAP_GTK     (AltGraph, GDK_ISO_Level3_Shift)
KEY_MAP_GTK     (AltGraph, GDK_ISO_Level3_Latch)
KEY_MAP_GTK     (AltGraph, GDK_ISO_Level3_Lock)
KEY_MAP_GTK     (AltGraph, GDK_ISO_Level5_Shift)
KEY_MAP_GTK     (AltGraph, GDK_ISO_Level5_Latch)
KEY_MAP_GTK     (AltGraph, GDK_ISO_Level5_Lock)
KEY_MAP_QT      (AltGraph, Qt::Key_AltGr)
KEY_MAP_QT      (AltGraph, Qt::Key_Mode_switch)

// CapsLock
KEY_MAP_WIN     (CapsLock, VK_CAPITAL)
KEY_MAP_COCOA   (CapsLock, kVK_CapsLock)
KEY_MAP_GTK     (CapsLock, GDK_Caps_Lock)
KEY_MAP_QT      (CapsLock, Qt::Key_CapsLock)
KEY_MAP_ANDROID (CapsLock, AKEYCODE_CAPS_LOCK)

// Control
KEY_MAP_WIN     (Control, VK_CONTROL)
KEY_MAP_WIN     (Control, VK_LCONTROL)
KEY_MAP_WIN     (Control, VK_RCONTROL)
KEY_MAP_COCOA   (Control, kVK_Control)
KEY_MAP_COCOA   (Control, kVK_RightControl)
KEY_MAP_GTK     (Control, GDK_Control_L)
KEY_MAP_GTK     (Control, GDK_Control_R)
KEY_MAP_QT      (Control, Qt::Key_Control)
KEY_MAP_ANDROID (Control, AKEYCODE_CTRL_LEFT)
KEY_MAP_ANDROID (Control, AKEYCODE_CTRL_RIGHT)

// Fn
KEY_MAP_COCOA   (Fn, kVK_Function)
KEY_MAP_ANDROID (Fn, AKEYCODE_FUNCTION)

// Meta
KEY_MAP_COCOA   (Meta, kVK_Command)
KEY_MAP_COCOA   (Meta, kVK_RightCommand)
KEY_MAP_GTK     (Meta, GDK_Meta_L)
KEY_MAP_GTK     (Meta, GDK_Meta_R)
KEY_MAP_QT      (Meta, Qt::Key_Meta)
KEY_MAP_ANDROID (Meta, AKEYCODE_META_LEFT)
KEY_MAP_ANDROID (Meta, AKEYCODE_META_RIGHT)

// NumLock
KEY_MAP_WIN     (NumLock, VK_NUMLOCK)
KEY_MAP_GTK     (NumLock, GDK_Num_Lock)
KEY_MAP_QT      (NumLock, Qt::Key_NumLock)
KEY_MAP_ANDROID (NumLock, AKEYCODE_NUM_LOCK)

// OS
KEY_MAP_WIN     (OS, VK_LWIN)
KEY_MAP_WIN     (OS, VK_RWIN)
KEY_MAP_GTK     (OS, GDK_Super_L)
KEY_MAP_GTK     (OS, GDK_Super_R)
KEY_MAP_GTK     (OS, GDK_Hyper_L)
KEY_MAP_GTK     (OS, GDK_Hyper_R)
KEY_MAP_QT      (OS, Qt::Key_Super_L)
KEY_MAP_QT      (OS, Qt::Key_Super_R)
KEY_MAP_QT      (OS, Qt::Key_Hyper_L)
KEY_MAP_QT      (OS, Qt::Key_Hyper_R)

// ScrollLock
KEY_MAP_WIN     (ScrollLock, VK_SCROLL)
KEY_MAP_GTK     (ScrollLock, GDK_Scroll_Lock)
KEY_MAP_QT      (ScrollLock, Qt::Key_ScrollLock)
KEY_MAP_ANDROID (ScrollLock, AKEYCODE_SCROLL_LOCK)

// Shift
KEY_MAP_WIN     (Shift, VK_SHIFT)
KEY_MAP_WIN     (Shift, VK_LSHIFT)
KEY_MAP_WIN     (Shift, VK_RSHIFT)
KEY_MAP_COCOA   (Shift, kVK_Shift)
KEY_MAP_COCOA   (Shift, kVK_RightShift)
KEY_MAP_GTK     (Shift, GDK_Shift_L)
KEY_MAP_GTK     (Shift, GDK_Shift_R)
KEY_MAP_GTK     (Shift, GDK_Shift_Lock) // Let's treat as Shift key (bug 769159)
KEY_MAP_QT      (Shift, Qt::Key_Shift)
KEY_MAP_ANDROID (Shift, AKEYCODE_SHIFT_LEFT)
KEY_MAP_ANDROID (Shift, AKEYCODE_SHIFT_RIGHT)

/******************************************************************************
 * Whitespace Keys
 ******************************************************************************/
// Enter
KEY_MAP_WIN     (Enter, VK_RETURN)
KEY_MAP_COCOA   (Enter, kVK_Return)
KEY_MAP_COCOA   (Enter, kVK_ANSI_KeypadEnter)
KEY_MAP_COCOA   (Enter, kVK_Powerbook_KeypadEnter)
KEY_MAP_GTK     (Enter, GDK_Return)
KEY_MAP_GTK     (Enter, GDK_KP_Enter)
KEY_MAP_GTK     (Enter, GDK_ISO_Enter)
KEY_MAP_GTK     (Enter, GDK_3270_Enter)
KEY_MAP_QT      (Enter, Qt::Key_Return)
KEY_MAP_QT      (Enter, Qt::Key_Enter)
KEY_MAP_ANDROID (Enter, AKEYCODE_ENTER)
KEY_MAP_ANDROID (Enter, AKEYCODE_NUMPAD_ENTER)

// Tab
KEY_MAP_WIN     (Tab, VK_TAB)
KEY_MAP_COCOA   (Tab, kVK_Tab)
KEY_MAP_GTK     (Tab, GDK_Tab)
KEY_MAP_GTK     (Tab, GDK_KP_Tab)
KEY_MAP_QT      (Tab, Qt::Key_Tab)
KEY_MAP_ANDROID (Tab, AKEYCODE_TAB)

/******************************************************************************
 * Navigation Keys
 ******************************************************************************/
// Down
KEY_MAP_WIN     (Down, VK_DOWN)
KEY_MAP_COCOA   (Down, kVK_DownArrow)
KEY_MAP_GTK     (Down, GDK_Down)
KEY_MAP_GTK     (Down, GDK_KP_Down)
KEY_MAP_QT      (Down, Qt::Key_Down)
KEY_MAP_ANDROID (Down, AKEYCODE_DPAD_DOWN)

// Left
KEY_MAP_WIN     (Left, VK_LEFT)
KEY_MAP_COCOA   (Left, kVK_LeftArrow)
KEY_MAP_GTK     (Left, GDK_Left)
KEY_MAP_GTK     (Left, GDK_KP_Left)
KEY_MAP_QT      (Left, Qt::Key_Left)
KEY_MAP_ANDROID (Left, AKEYCODE_DPAD_LEFT)

// Right
KEY_MAP_WIN     (Right, VK_RIGHT)
KEY_MAP_COCOA   (Right, kVK_RightArrow)
KEY_MAP_GTK     (Right, GDK_Right)
KEY_MAP_GTK     (Right, GDK_KP_Right)
KEY_MAP_QT      (Right, Qt::Key_Right)
KEY_MAP_ANDROID (Right, AKEYCODE_DPAD_RIGHT)

// Up
KEY_MAP_WIN     (Up, VK_UP)
KEY_MAP_COCOA   (Up, kVK_UpArrow)
KEY_MAP_GTK     (Up, GDK_Up)
KEY_MAP_GTK     (Up, GDK_KP_Up)
KEY_MAP_QT      (Up, Qt::Key_Up)
KEY_MAP_ANDROID (Up, AKEYCODE_DPAD_UP)

// End
KEY_MAP_WIN     (End, VK_END)
KEY_MAP_COCOA   (End, kVK_End)
KEY_MAP_GTK     (End, GDK_End)
KEY_MAP_GTK     (End, GDK_KP_End)
KEY_MAP_QT      (End, Qt::Key_End)
KEY_MAP_ANDROID (End, AKEYCODE_MOVE_END)

// Home
KEY_MAP_WIN     (Home, VK_HOME)
KEY_MAP_COCOA   (Home, kVK_Home)
KEY_MAP_GTK     (Home, GDK_Home)
KEY_MAP_GTK     (Home, GDK_KP_Home)
KEY_MAP_QT      (Home, Qt::Key_Home)
KEY_MAP_ANDROID (Home, AKEYCODE_MOVE_HOME)

// PageDown
KEY_MAP_WIN     (PageDown, VK_NEXT)
KEY_MAP_COCOA   (PageDown, kVK_PageDown)
KEY_MAP_GTK     (PageDown, GDK_Page_Down /* same as GDK_Next */)
KEY_MAP_GTK     (PageDown, GDK_KP_Page_Down /* same as GDK_KP_Next */)
KEY_MAP_QT      (PageDown, Qt::Key_PageDown)
KEY_MAP_ANDROID (PageDown, AKEYCODE_PAGE_DOWN)

// PageUp
KEY_MAP_WIN     (PageUp, VK_PRIOR)
KEY_MAP_COCOA   (PageUp, kVK_PageUp)
KEY_MAP_GTK     (PageUp, GDK_Page_Up /* same as GDK_Prior */)
KEY_MAP_GTK     (PageUp, GDK_KP_Page_Up /* same as GDK_KP_Prior */)
KEY_MAP_QT      (PageUp, Qt::Key_PageUp)
KEY_MAP_ANDROID (PageUp, AKEYCODE_PAGE_UP)

/******************************************************************************
 * Editing Keys
 ******************************************************************************/
// Backspace
KEY_MAP_WIN     (Backspace, VK_BACK)
KEY_MAP_COCOA   (Backspace, kVK_PC_Backspace)
KEY_MAP_GTK     (Backspace, GDK_BackSpace)
KEY_MAP_QT      (Backspace, Qt::Key_Backspace)
KEY_MAP_ANDROID (Backspace, AKEYCODE_DEL)

// Clear
KEY_MAP_WIN     (Clear, VK_CLEAR)
KEY_MAP_WIN     (Clear, VK_OEM_CLEAR)
KEY_MAP_COCOA   (Clear, kVK_ANSI_KeypadClear)
KEY_MAP_GTK     (Clear, GDK_Clear)
KEY_MAP_QT      (Clear, Qt::Key_Clear)
KEY_MAP_ANDROID (Clear, AKEYCODE_CLEAR)

// Copy
KEY_MAP_GTK     (Copy, GDK_Copy)
KEY_MAP_QT      (Copy, Qt::Key_Copy)

// Crsel
KEY_MAP_WIN     (Crsel, VK_CRSEL)
KEY_MAP_GTK     (Crsel, GDK_3270_CursorSelect) // legacy IBM keyboard layout

// Cut
KEY_MAP_GTK     (Cut, GDK_Cut)
KEY_MAP_QT      (Cut, Qt::Key_Cut)

// Del
KEY_MAP_WIN     (Del, VK_DELETE)
KEY_MAP_COCOA   (Del, kVK_PC_Delete)
KEY_MAP_GTK     (Del, GDK_Delete)
KEY_MAP_GTK     (Del, GDK_KP_Delete)
KEY_MAP_QT      (Del, Qt::Key_Delete)
KEY_MAP_ANDROID (Del, AKEYCODE_FORWARD_DEL)

// EraseEof
KEY_MAP_WIN     (EraseEof, VK_EREOF)
KEY_MAP_GTK     (EraseEof, GDK_3270_EraseEOF) // legacy IBM keyboard layout

// Exsel
KEY_MAP_WIN     (Exsel, VK_EXSEL)
KEY_MAP_GTK     (Exsel, GDK_3270_ExSelect) // legacy IBM keyboard layout

// Insert
KEY_MAP_WIN     (Insert, VK_INSERT)
KEY_MAP_GTK     (Insert, GDK_Insert)
KEY_MAP_GTK     (Insert, GDK_KP_Insert)
KEY_MAP_QT      (Insert, Qt::Key_Insert)
KEY_MAP_ANDROID (Insert, AKEYCODE_INSERT)

// Paste
KEY_MAP_GTK     (Paste, GDK_Paste)
KEY_MAP_QT      (Paste, Qt::Key_Paste)

// Undo
KEY_MAP_GTK     (Undo, GDK_Undo)

/******************************************************************************
 * UI Keys
 ******************************************************************************/
// Accept
KEY_MAP_WIN     (Accept, VK_ACCEPT)
KEY_MAP_ANDROID (Accept, AKEYCODE_DPAD_CENTER)

// Attn
KEY_MAP_WIN_OTH (Attn, VK_ATTN) // not valid with Japanese keyboard layout
KEY_MAP_GTK     (Attn, GDK_3270_Attn) // legacy IBM keyboard layout

// Cancel
KEY_MAP_WIN     (Cancel, VK_CANCEL)
KEY_MAP_GTK     (Cancel, GDK_Cancel)
KEY_MAP_QT      (Cancel, Qt::Key_Cancel)

// Menu
KEY_MAP_WIN     (Menu, VK_APPS)
KEY_MAP_COCOA   (Menu, kVK_PC_ContextMenu)
KEY_MAP_GTK     (Menu, GDK_Menu)
KEY_MAP_QT      (Menu, Qt::Key_Menu)
KEY_MAP_ANDROID (Menu, AKEYCODE_MENU)

// Esc
KEY_MAP_WIN     (Esc, VK_ESCAPE)
KEY_MAP_COCOA   (Esc, kVK_Escape)
KEY_MAP_GTK     (Esc, GDK_Escape)
KEY_MAP_QT      (Esc, Qt::Key_Escape)
KEY_MAP_ANDROID (Esc, AKEYCODE_ESCAPE)

// Execute
KEY_MAP_WIN     (Execute, VK_EXECUTE)
KEY_MAP_GTK     (Execute, GDK_Execute)
KEY_MAP_QT      (Execute, Qt::Key_Execute)

// Find
KEY_MAP_GTK     (Find, GDK_Find)

// Help
KEY_MAP_WIN     (Help, VK_HELP)
KEY_MAP_COCOA   (Help, kVK_Help)
KEY_MAP_GTK     (Help, GDK_Help)
KEY_MAP_QT      (Help, Qt::Key_Help)
KEY_MAP_ANDROID (Help, AKEYCODE_ASSIST)

// Pause
KEY_MAP_WIN     (Pause, VK_PAUSE)
KEY_MAP_GTK     (Pause, GDK_Pause)
// Break is typically mapped to Alt+Pause or Ctrl+Pause on GTK.
KEY_MAP_GTK     (Pause, GDK_Break)
KEY_MAP_QT      (Pause, Qt::Key_Pause)
KEY_MAP_ANDROID (Pause, AKEYCODE_BREAK)

// Play
KEY_MAP_WIN     (Play, VK_PLAY)
KEY_MAP_GTK     (Play, GDK_3270_Play) // legacy IBM keyboard layout
KEY_MAP_QT      (Play, Qt::Key_Play)

// Select
KEY_MAP_WIN     (Select, VK_SELECT)
KEY_MAP_GTK     (Select, GDK_Select)

/******************************************************************************
 * Device Keys
 ******************************************************************************/
// BrightnessDown
KEY_MAP_GTK     (BrightnessDown, GDK_MonBrightnessDown)
KEY_MAP_QT      (BrightnessDown, Qt::Key_MonBrightnessDown)

// BrightnessUp
KEY_MAP_GTK     (BrightnessUp, GDK_MonBrightnessUp)
KEY_MAP_QT      (BrightnessUp, Qt::Key_MonBrightnessUp)

// Camera
KEY_MAP_QT      (Camera, Qt::Key_Camera)
KEY_MAP_ANDROID (Camera, AKEYCODE_CAMERA)

// Eject
KEY_MAP_GTK     (Eject, GDK_Eject)
KEY_MAP_QT      (Eject, Qt::Key_Eject)
KEY_MAP_ANDROID (Eject, AKEYCODE_MEDIA_EJECT)

// Power
KEY_MAP_GTK     (Power, GDK_PowerOff)
KEY_MAP_QT      (Power, Qt::Key_PowerOff)
KEY_MAP_ANDROID (Power, AKEYCODE_POWER)

// PrintScreen
KEY_MAP_WIN     (PrintScreen, VK_SNAPSHOT)
KEY_MAP_GTK     (PrintScreen, GDK_3270_PrintScreen)
KEY_MAP_GTK     (PrintScreen, GDK_Print)
KEY_MAP_GTK     (PrintScreen, GDK_Sys_Req)
KEY_MAP_QT      (PrintScreen, Qt::Key_Print)
KEY_MAP_QT      (PrintScreen, Qt::Key_SysReq)
KEY_MAP_ANDROID (PrintScreen, AKEYCODE_SYSRQ)

/******************************************************************************
 * IME and Composition Keys
 ******************************************************************************/
// AllCandidates
KEY_MAP_GTK     (AllCandidates, GDK_MultipleCandidate) // OADG 109, Zen Koho
KEY_MAP_QT      (AllCandidates, Qt::Key_MultipleCandidate)

// Alphanumeric
KEY_MAP_WIN_JPN (Alphanumeric, VK_OEM_ATTN)
KEY_MAP_GTK     (Alphanumeric, GDK_Eisu_Shift)
KEY_MAP_GTK     (Alphanumeric, GDK_Eisu_toggle)
KEY_MAP_QT      (Alphanumeric, Qt::Key_Eisu_Shift)
KEY_MAP_QT      (Alphanumeric, Qt::Key_Eisu_toggle)

// CodeInput
KEY_MAP_GTK     (CodeInput, GDK_Codeinput) // OADG 109, Kanji Bangou
KEY_MAP_QT      (CodeInput, Qt::Key_Codeinput)

// Compose
KEY_MAP_GTK     (Compose, GDK_Multi_key) // "Multi Key" is "Compose key" on X
KEY_MAP_QT      (Compose, Qt::Key_Multi_key)

// Convert
KEY_MAP_WIN     (Convert, VK_CONVERT)
KEY_MAP_GTK     (Convert, GDK_Henkan)
KEY_MAP_QT      (Convert, Qt::Key_Henkan)
KEY_MAP_ANDROID (Convert, AKEYCODE_HENKAN)

// FinalMode
KEY_MAP_WIN     (FinalMode, VK_FINAL)

// ModeChange
KEY_MAP_WIN     (ModeChange, VK_MODECHANGE)
KEY_MAP_ANDROID (ModeChange, AKEYCODE_SWITCH_CHARSET)

// Nonconvert
KEY_MAP_WIN     (Nonconvert, VK_NONCONVERT)
KEY_MAP_GTK     (Nonconvert, GDK_Muhenkan)
KEY_MAP_QT      (Nonconvert, Qt::Key_Muhenkan)
KEY_MAP_ANDROID (Nonconvert, AKEYCODE_MUHENKAN)

// PreviousCandidate
KEY_MAP_GTK     (PreviousCandidate, GDK_PreviousCandidate) // OADG 109, Mae Koho
KEY_MAP_QT      (PreviousCandidate, Qt::Key_PreviousCandidate)

/******************************************************************************
 * Keys specific to Korean keyboards
 ******************************************************************************/
// HangulMode
KEY_MAP_WIN_KOR (HangulMode, VK_HANGUL /* same as VK_KANA */)

// HanjaMode
KEY_MAP_WIN_KOR (HanjaMode, VK_HANJA /* same as VK_KANJI */)

// JunjaMode
KEY_MAP_WIN     (JunjaMode, VK_JUNJA)

/******************************************************************************
 * Keys specific to Japanese keyboards
 ******************************************************************************/
// HalfWidth
KEY_MAP_WIN_JPN (HalfWidth, VK_OEM_AUTO)
KEY_MAP_GTK     (HalfWidth, GDK_Hankaku)
KEY_MAP_QT      (HalfWidth, Qt::Key_Hankaku)

// Hiragana
KEY_MAP_WIN_JPN (Hiragana, VK_OEM_COPY)
KEY_MAP_GTK     (Hiragana, GDK_Hiragana)
KEY_MAP_QT      (Hiragana, Qt::Key_Hiragana)

// KanaMode
// VK_KANA is never used with modern Japanese keyboard, however, IE maps it to
// KanaMode, therefore, we should use same map for it.
KEY_MAP_WIN_JPN (KanaMode, VK_KANA /* same as VK_HANGUL */)
KEY_MAP_WIN_JPN (KanaMode, VK_ATTN)
KEY_MAP_GTK     (KanaMode, GDK_Kana_Lock)
KEY_MAP_GTK     (KanaMode, GDK_Kana_Shift)
KEY_MAP_QT      (KanaMode, Qt::Key_Kana_Lock)
KEY_MAP_QT      (KanaMode, Qt::Key_Kana_Shift)

// KanjiMode
KEY_MAP_WIN_JPN (KanjiMode, VK_KANJI /* same as VK_HANJA */)
KEY_MAP_COCOA   (KanjiMode, kVK_JIS_Kana) // Kana key opens IME
KEY_MAP_GTK     (KanjiMode, GDK_Kanji) // Typically, Alt + Hankaku/Zenkaku key
KEY_MAP_QT      (KanjiMode, Qt::Key_Kanji)
// Assuming that KANA key of Android is the Kana key on Mac keyboard.
KEY_MAP_ANDROID (KanjiMode, AKEYCODE_KANA)

// Katakana
KEY_MAP_WIN_JPN (Katakana, VK_OEM_FINISH)
KEY_MAP_GTK     (Katakana, GDK_Katakana)
KEY_MAP_QT      (Katakana, Qt::Key_Katakana)

// RomanCharacters
KEY_MAP_WIN_JPN (RomanCharacters, VK_OEM_BACKTAB)
KEY_MAP_COCOA   (RomanCharacters, kVK_JIS_Eisu)
KEY_MAP_GTK     (RomanCharacters, GDK_Romaji)
KEY_MAP_QT      (RomanCharacters, Qt::Key_Romaji)
// Assuming that EISU key of Android is the Eisu key on Mac keyboard.
KEY_MAP_ANDROID (RomanCharacters, AKEYCODE_EISU)

// FullWidth
KEY_MAP_WIN_JPN (FullWidth, VK_OEM_ENLW)
KEY_MAP_GTK     (FullWidth, GDK_Zenkaku)
KEY_MAP_QT      (FullWidth, Qt::Key_Zenkaku)

/******************************************************************************
 * General-Purpose Function Keys
 ******************************************************************************/
// F1
KEY_MAP_WIN     (F1, VK_F1)
KEY_MAP_COCOA   (F1, kVK_F1)
KEY_MAP_GTK     (F1, GDK_F1)
KEY_MAP_GTK     (F1, GDK_KP_F1)
KEY_MAP_QT      (F1, Qt::Key_F1)
KEY_MAP_ANDROID (F1, AKEYCODE_F1)

// F2
KEY_MAP_WIN     (F2, VK_F2)
KEY_MAP_COCOA   (F2, kVK_F2)
KEY_MAP_GTK     (F2, GDK_F2)
KEY_MAP_GTK     (F2, GDK_KP_F2)
KEY_MAP_QT      (F2, Qt::Key_F2)
KEY_MAP_ANDROID (F2, AKEYCODE_F2)

// F3
KEY_MAP_WIN     (F3, VK_F3)
KEY_MAP_COCOA   (F3, kVK_F3)
KEY_MAP_GTK     (F3, GDK_F3)
KEY_MAP_GTK     (F3, GDK_KP_F3)
KEY_MAP_QT      (F3, Qt::Key_F3)
KEY_MAP_ANDROID (F3, AKEYCODE_F3)

// F4
KEY_MAP_WIN     (F4, VK_F4)
KEY_MAP_COCOA   (F4, kVK_F4)
KEY_MAP_GTK     (F4, GDK_F4)
KEY_MAP_GTK     (F4, GDK_KP_F4)
KEY_MAP_QT      (F4, Qt::Key_F4)
KEY_MAP_ANDROID (F4, AKEYCODE_F4)

// F5
KEY_MAP_WIN     (F5, VK_F5)
KEY_MAP_COCOA   (F5, kVK_F5)
KEY_MAP_GTK     (F5, GDK_F5)
KEY_MAP_QT      (F5, Qt::Key_F5)
KEY_MAP_ANDROID (F5, AKEYCODE_F5)

// F6
KEY_MAP_WIN     (F6, VK_F6)
KEY_MAP_COCOA   (F6, kVK_F6)
KEY_MAP_GTK     (F6, GDK_F6)
KEY_MAP_QT      (F6, Qt::Key_F6)
KEY_MAP_ANDROID (F6, AKEYCODE_F6)

// F7
KEY_MAP_WIN     (F7, VK_F7)
KEY_MAP_COCOA   (F7, kVK_F7)
KEY_MAP_GTK     (F7, GDK_F7)
KEY_MAP_QT      (F7, Qt::Key_F7)
KEY_MAP_ANDROID (F7, AKEYCODE_F7)

// F8
KEY_MAP_WIN     (F8, VK_F8)
KEY_MAP_COCOA   (F8, kVK_F8)
KEY_MAP_GTK     (F8, GDK_F8)
KEY_MAP_QT      (F8, Qt::Key_F8)
KEY_MAP_ANDROID (F8, AKEYCODE_F8)

// F9
KEY_MAP_WIN     (F9, VK_F9)
KEY_MAP_COCOA   (F9, kVK_F9)
KEY_MAP_GTK     (F9, GDK_F9)
KEY_MAP_QT      (F9, Qt::Key_F9)
KEY_MAP_ANDROID (F9, AKEYCODE_F9)

// F10
KEY_MAP_WIN     (F10, VK_F10)
KEY_MAP_COCOA   (F10, kVK_F10)
KEY_MAP_GTK     (F10, GDK_F10)
KEY_MAP_QT      (F10, Qt::Key_F10)
KEY_MAP_ANDROID (F10, AKEYCODE_F10)

// F11
KEY_MAP_WIN     (F11, VK_F11)
KEY_MAP_COCOA   (F11, kVK_F11)
KEY_MAP_GTK     (F11, GDK_F11 /* same as GDK_L1 */)
KEY_MAP_QT      (F11, Qt::Key_F11)
KEY_MAP_ANDROID (F11, AKEYCODE_F11)

// F12
KEY_MAP_WIN     (F12, VK_F12)
KEY_MAP_COCOA   (F12, kVK_F12)
KEY_MAP_GTK     (F12, GDK_F12 /* same as GDK_L2 */)
KEY_MAP_QT      (F12, Qt::Key_F12)
KEY_MAP_ANDROID (F12, AKEYCODE_F12)

// F13
KEY_MAP_WIN     (F13, VK_F13)
KEY_MAP_COCOA   (F13, kVK_F13)
KEY_MAP_GTK     (F13, GDK_F13 /* same as GDK_L3 */)
KEY_MAP_QT      (F13, Qt::Key_F13)

// F14
KEY_MAP_WIN     (F14, VK_F14)
KEY_MAP_COCOA   (F14, kVK_F14)
KEY_MAP_GTK     (F14, GDK_F14 /* same as GDK_L4 */)
KEY_MAP_QT      (F14, Qt::Key_F14)

// F15
KEY_MAP_WIN     (F15, VK_F15)
KEY_MAP_COCOA   (F15, kVK_F15)
KEY_MAP_GTK     (F15, GDK_F15 /* same as GDK_L5 */)
KEY_MAP_QT      (F15, Qt::Key_F15)

// F16
KEY_MAP_WIN     (F16, VK_F16)
KEY_MAP_COCOA   (F16, kVK_F16)
KEY_MAP_GTK     (F16, GDK_F16 /* same as GDK_L6 */)
KEY_MAP_QT      (F16, Qt::Key_F16)

// F17
KEY_MAP_WIN     (F17, VK_F17)
KEY_MAP_COCOA   (F17, kVK_F17)
KEY_MAP_GTK     (F17, GDK_F17 /* same as GDK_L7 */)
KEY_MAP_QT      (F17, Qt::Key_F17)

// F18
KEY_MAP_WIN     (F18, VK_F18)
KEY_MAP_COCOA   (F18, kVK_F18)
KEY_MAP_GTK     (F18, GDK_F18 /* same as GDK_L8 */)
KEY_MAP_QT      (F18, Qt::Key_F18)

// F19
KEY_MAP_WIN     (F19, VK_F19)
KEY_MAP_COCOA   (F19, kVK_F19)
KEY_MAP_GTK     (F19, GDK_F19 /* same as GDK_L9 */)
KEY_MAP_QT      (F19, Qt::Key_F19)

// F20
KEY_MAP_WIN     (F20, VK_F20)
KEY_MAP_GTK     (F20, GDK_F20 /* same as GDK_L10 */)
KEY_MAP_QT      (F20, Qt::Key_F20)

// F21
KEY_MAP_WIN     (F21, VK_F21)
KEY_MAP_GTK     (F21, GDK_F21 /* same as GDK_R1 */)
KEY_MAP_QT      (F21, Qt::Key_F21)

// F22
KEY_MAP_WIN     (F22, VK_F22)
KEY_MAP_GTK     (F22, GDK_F22 /* same as GDK_R2 */)
KEY_MAP_QT      (F22, Qt::Key_F22)

// F23
KEY_MAP_WIN     (F23, VK_F23)
KEY_MAP_GTK     (F23, GDK_F23 /* same as GDK_R3 */)
KEY_MAP_QT      (F23, Qt::Key_F23)

// F24
KEY_MAP_WIN     (F24, VK_F24)
KEY_MAP_GTK     (F24, GDK_F24 /* same as GDK_R4 */)
KEY_MAP_QT      (F24, Qt::Key_F24)

// F25
KEY_MAP_GTK     (F25, GDK_F25 /* same as GDK_R5 */)
KEY_MAP_QT      (F25, Qt::Key_F25)

// F26
KEY_MAP_GTK     (F26, GDK_F26 /* same as GDK_R6 */)
KEY_MAP_QT      (F26, Qt::Key_F26)

// F27
KEY_MAP_GTK     (F27, GDK_F27 /* same as GDK_R7 */)
KEY_MAP_QT      (F27, Qt::Key_F27)

// F28
KEY_MAP_GTK     (F28, GDK_F28 /* same as GDK_R8 */)
KEY_MAP_QT      (F28, Qt::Key_F28)

// F29
KEY_MAP_GTK     (F29, GDK_F29 /* same as GDK_R9 */)
KEY_MAP_QT      (F29, Qt::Key_F29)

// F30
KEY_MAP_GTK     (F30, GDK_F30 /* same as GDK_R10 */)
KEY_MAP_QT      (F30, Qt::Key_F30)

// F31
KEY_MAP_GTK     (F31, GDK_F31 /* same as GDK_R11 */)
KEY_MAP_QT      (F31, Qt::Key_F31)

// F32
KEY_MAP_GTK     (F32, GDK_F32 /* same as GDK_R12 */)
KEY_MAP_QT      (F32, Qt::Key_F32)

// F33
KEY_MAP_GTK     (F33, GDK_F33 /* same as GDK_R13 */)
KEY_MAP_QT      (F33, Qt::Key_F33)

// F34
KEY_MAP_GTK     (F34, GDK_F34 /* same as GDK_R14 */)
KEY_MAP_QT      (F34, Qt::Key_F34)

// F35
KEY_MAP_GTK     (F35, GDK_F35 /* same as GDK_R15 */)
KEY_MAP_QT      (F35, Qt::Key_F35)

/******************************************************************************
 * Multimedia Keys
 ******************************************************************************/
// MediaPlayPause
KEY_MAP_WIN     (MediaPlayPause, VK_MEDIA_PLAY_PAUSE)
KEY_MAP_QT      (MediaPlayPause, Qt::Key_MediaTogglePlayPause)
KEY_MAP_ANDROID (MediaPlayPause, AKEYCODE_MEDIA_PLAY_PAUSE)

// SelectMedia
KEY_MAP_WIN     (SelectMedia, VK_LAUNCH_MEDIA_SELECT)

// MediaStop
KEY_MAP_WIN     (MediaStop, VK_MEDIA_STOP)
KEY_MAP_GTK     (MediaStop, GDK_AudioStop)
KEY_MAP_QT      (MediaStop, Qt::Key_MediaStop)
KEY_MAP_ANDROID (MediaStop, AKEYCODE_MEDIA_STOP)

// MediaNextTrack
KEY_MAP_WIN     (MediaNextTrack, VK_MEDIA_NEXT_TRACK)
KEY_MAP_GTK     (MediaNextTrack, GDK_AudioNext)
KEY_MAP_QT      (MediaNextTrack, Qt::Key_MediaNext)
KEY_MAP_ANDROID (MediaNextTrack, AKEYCODE_MEDIA_NEXT)

// MediaPreviousTrack
KEY_MAP_WIN     (MediaPreviousTrack, VK_MEDIA_PREV_TRACK)
KEY_MAP_GTK     (MediaPreviousTrack, GDK_AudioPrev)
KEY_MAP_QT      (MediaPreviousTrack, Qt::Key_MediaPrevious)
KEY_MAP_ANDROID (MediaPreviousTrack, AKEYCODE_MEDIA_PREVIOUS)

// VolumeDown
KEY_MAP_WIN     (VolumeDown, VK_VOLUME_DOWN)
KEY_MAP_COCOA   (VolumeDown, kVK_VolumeDown)
KEY_MAP_GTK     (VolumeDown, GDK_AudioLowerVolume)
KEY_MAP_QT      (VolumeDown, Qt::Key_VolumeDown)
KEY_MAP_ANDROID (VolumeDown, AKEYCODE_VOLUME_DOWN)

// VolumeUp
KEY_MAP_WIN     (VolumeUp, VK_VOLUME_UP)
KEY_MAP_COCOA   (VolumeUp, kVK_VolumeUp)
KEY_MAP_GTK     (VolumeUp, GDK_AudioRaiseVolume)
KEY_MAP_QT      (VolumeUp, Qt::Key_VolumeUp)
KEY_MAP_ANDROID (VolumeUp, AKEYCODE_VOLUME_UP)

// VolumeMute
KEY_MAP_WIN     (VolumeMute, VK_VOLUME_MUTE)
KEY_MAP_COCOA   (VolumeMute, kVK_Mute)
KEY_MAP_GTK     (VolumeMute, GDK_AudioMute)
KEY_MAP_QT      (VolumeMute, Qt::Key_VolumeMute)
KEY_MAP_ANDROID (VolumeMute, AKEYCODE_VOLUME_MUTE)

/******************************************************************************
 * Application Keys
 ******************************************************************************/
// LaunchMail
KEY_MAP_WIN     (LaunchMail, VK_LAUNCH_MAIL)
KEY_MAP_GTK     (LaunchMail, GDK_Mail)
KEY_MAP_QT      (LaunchMail, Qt::Key_LaunchMail)
KEY_MAP_ANDROID (LaunchMail, AKEYCODE_ENVELOPE)

// LaunchApplication1
KEY_MAP_WIN     (LaunchApplication1, VK_LAUNCH_APP1)
KEY_MAP_GTK     (LaunchApplication1, GDK_Launch0)
KEY_MAP_QT      (LaunchApplication1, Qt::Key_Launch0)
KEY_MAP_ANDROID (LaunchApplication1, AKEYCODE_EXPLORER)

// LaunchApplication2
KEY_MAP_WIN     (LaunchApplication2, VK_LAUNCH_APP2)
KEY_MAP_GTK     (LaunchApplication2, GDK_Launch1)
KEY_MAP_QT      (LaunchApplication2, Qt::Key_Launch1)

// LaunchApplication3
KEY_MAP_GTK     (LaunchApplication3, GDK_Launch2)
KEY_MAP_QT      (LaunchApplication3, Qt::Key_Launch2)

// LaunchApplication4
KEY_MAP_GTK     (LaunchApplication4, GDK_Launch3)
KEY_MAP_QT      (LaunchApplication4, Qt::Key_Launch3)

// LaunchApplication5
KEY_MAP_GTK     (LaunchApplication5, GDK_Launch4)
KEY_MAP_QT      (LaunchApplication5, Qt::Key_Launch4)

// LaunchApplication6
KEY_MAP_GTK     (LaunchApplication6, GDK_Launch5)
KEY_MAP_QT      (LaunchApplication6, Qt::Key_Launch5)

// LaunchApplication7
KEY_MAP_GTK     (LaunchApplication7, GDK_Launch6)
KEY_MAP_QT      (LaunchApplication7, Qt::Key_Launch6)

// LaunchApplication8
KEY_MAP_GTK     (LaunchApplication8, GDK_Launch7)
KEY_MAP_QT      (LaunchApplication8, Qt::Key_Launch7)

// LaunchApplication9
KEY_MAP_GTK     (LaunchApplication9, GDK_Launch8)
KEY_MAP_QT      (LaunchApplication9, Qt::Key_Launch8)

// LaunchApplication10
KEY_MAP_GTK     (LaunchApplication10, GDK_Launch9)
KEY_MAP_QT      (LaunchApplication10, Qt::Key_Launch9)

// LaunchApplication11
KEY_MAP_GTK     (LaunchApplication11, GDK_LaunchA)
KEY_MAP_QT      (LaunchApplication11, Qt::Key_LaunchA)

// LaunchApplication12
KEY_MAP_GTK     (LaunchApplication12, GDK_LaunchB)
KEY_MAP_QT      (LaunchApplication12, Qt::Key_LaunchB)

// LaunchApplication13
KEY_MAP_GTK     (LaunchApplication13, GDK_LaunchC)
KEY_MAP_QT      (LaunchApplication13, Qt::Key_LaunchC)

// LaunchApplication14
KEY_MAP_GTK     (LaunchApplication14, GDK_LaunchD)
KEY_MAP_QT      (LaunchApplication14, Qt::Key_LaunchD)

// LaunchApplication15
KEY_MAP_GTK     (LaunchApplication15, GDK_LaunchE)
KEY_MAP_QT      (LaunchApplication15, Qt::Key_LaunchE)

// LaunchApplication16
KEY_MAP_GTK     (LaunchApplication16, GDK_LaunchF)
KEY_MAP_QT      (LaunchApplication16, Qt::Key_LaunchF)

// LaunchApplication17
KEY_MAP_QT      (LaunchApplication17, Qt::Key_LaunchG)

// LaunchApplication18
KEY_MAP_QT      (LaunchApplication18, Qt::Key_LaunchH)

/******************************************************************************
 * Browser Keys
 ******************************************************************************/
// BrowserBack
KEY_MAP_WIN     (BrowserBack, VK_BROWSER_BACK)
KEY_MAP_GTK     (BrowserBack, GDK_Back)
KEY_MAP_QT      (BrowserBack, Qt::Key_Back)
KEY_MAP_ANDROID (BrowserBack, AKEYCODE_BACK)

// BrowserFavorites
KEY_MAP_WIN     (BrowserFavorites, VK_BROWSER_FAVORITES)
KEY_MAP_QT      (BrowserFavorites, Qt::Key_Favorites)
KEY_MAP_ANDROID (BrowserFavorites, AKEYCODE_BOOKMARK)

// BrowserForward
KEY_MAP_WIN     (BrowserForward, VK_BROWSER_FORWARD)
KEY_MAP_GTK     (BrowserForward, GDK_Forward)
KEY_MAP_QT      (BrowserForward, Qt::Key_Forward)
KEY_MAP_ANDROID (BrowserForward, AKEYCODE_FORWARD)

// BrowserHome
KEY_MAP_WIN     (BrowserHome, VK_BROWSER_HOME)
KEY_MAP_GTK     (BrowserHome, GDK_HomePage)
KEY_MAP_QT      (BrowserHome, Qt::Key_HomePage)

// BrowserRefresh
KEY_MAP_WIN     (BrowserRefresh, VK_BROWSER_REFRESH)
KEY_MAP_GTK     (BrowserRefresh, GDK_Refresh)
KEY_MAP_GTK     (BrowserRefresh, GDK_Reload)
KEY_MAP_QT      (BrowserRefresh, Qt::Key_Refresh)
KEY_MAP_QT      (BrowserRefresh, Qt::Key_Reload)

// BrowserSearch
KEY_MAP_WIN     (BrowserSearch, VK_BROWSER_SEARCH)
KEY_MAP_GTK     (BrowserSearch, GDK_Search)
KEY_MAP_QT      (BrowserSearch, Qt::Key_Search)
KEY_MAP_ANDROID (BrowserSearch, AKEYCODE_SEARCH)

// BrowserStop
KEY_MAP_WIN     (BrowserStop, VK_BROWSER_STOP)
KEY_MAP_GTK     (BrowserStop, GDK_Stop)
KEY_MAP_QT      (BrowserStop, Qt::Key_Stop)

/******************************************************************************
 * Media Controller Keys
 ******************************************************************************/
// AudioBassBoostDown
KEY_MAP_QT      (AudioBassBoostDown, Qt::Key_BassDown)

// AudioBassBoostUp
KEY_MAP_QT      (AudioBassBoostUp, Qt::Key_BassUp)

// ChannelDown
KEY_MAP_ANDROID (ChannelDown, AKEYCODE_CHANNEL_DOWN)

// ChannelUp
KEY_MAP_ANDROID (ChannelUp, AKEYCODE_CHANNEL_UP)

// Red
KEY_MAP_GTK     (Red, GDK_Red)
KEY_MAP_ANDROID (Red, AKEYCODE_PROG_RED)

// Green
KEY_MAP_GTK     (Green, GDK_Green)
KEY_MAP_ANDROID (Green, AKEYCODE_PROG_GREEN)

// Yellow
KEY_MAP_GTK     (Yellow, GDK_Yellow)
KEY_MAP_ANDROID (Yellow, AKEYCODE_PROG_YELLOW)

// Blue
KEY_MAP_GTK     (Blue, GDK_Blue)
KEY_MAP_ANDROID (Blue, AKEYCODE_PROG_BLUE)

// Dimmer
KEY_MAP_GTK     (Dimmer, GDK_BrightnessAdjust)
KEY_MAP_QT      (Dimmer, Qt::Key_BrightnessAdjust)

// Exit
KEY_MAP_ANDROID (Exit, AKEYCODE_HOME)

// Guide
KEY_MAP_ANDROID (Guide, AKEYCODE_GUIDE)

// Info
KEY_MAP_ANDROID (Info, AKEYCODE_INFO)

// Live
KEY_MAP_ANDROID (Live, AKEYCODE_TV)

// Apps
KEY_MAP_ANDROID (Apps, AKEYCODE_APP_SWITCH)

// FastFwd
KEY_MAP_QT      (FastFwd, Qt::Key_AudioForward)
KEY_MAP_ANDROID (FastFwd, AKEYCODE_MEDIA_FAST_FORWARD)

// MediaLast
KEY_MAP_QT      (MediaLast, Qt::Key_MediaLast)

// MediaPause
KEY_MAP_GTK     (MediaPause, GDK_AudioPause)
KEY_MAP_QT      (MediaPause, Qt::Key_MediaPause)
KEY_MAP_ANDROID (MediaPause, AKEYCODE_MEDIA_PAUSE)

// MediaPlay
KEY_MAP_GTK     (MediaPlay, GDK_AudioPlay)
KEY_MAP_QT      (MediaPlay, Qt::Key_MediaPlay)
KEY_MAP_ANDROID (MediaPlay, AKEYCODE_MEDIA_PLAY)

// MediaRecord
KEY_MAP_GTK     (MediaRecord, GDK_AudioRecord)
KEY_MAP_QT      (MediaRecord, Qt::Key_MediaRecord)
KEY_MAP_ANDROID (MediaRecord, AKEYCODE_MEDIA_RECORD)

// MediaRewind
KEY_MAP_GTK     (MediaRewind, GDK_AudioRewind)
KEY_MAP_QT      (MediaRewind, Qt::Key_AudioRewind)
KEY_MAP_ANDROID (MediaRewind, AKEYCODE_MEDIA_REWIND)

// PinPToggle
KEY_MAP_ANDROID (PinPToggle, AKEYCODE_WINDOW)

// RandomToggle
KEY_MAP_GTK     (RandomToggle, GDK_AudioRandomPlay)
KEY_MAP_QT      (RandomToggle, Qt::Key_AudioRandomPlay)

// Settings
KEY_MAP_ANDROID (Settings, AKEYCODE_SETTINGS)

// Subtitle
KEY_MAP_GTK     (Subtitle, GDK_Subtitle)
KEY_MAP_QT      (Subtitle, Qt::Key_Subtitle)
KEY_MAP_ANDROID (Subtitle, AKEYCODE_CAPTIONS)

// Zoom
KEY_MAP_WIN     (Zoom, VK_ZOOM)
KEY_MAP_QT      (Zoom, Qt::Key_Zoom)

/******************************************************************************
 * Deplicated
 ******************************************************************************/
// DeadGrave
KEY_MAP_GTK     (DeadGrave, GDK_dead_grave)
KEY_MAP_QT      (DeadGrave, Qt::Key_Dead_Grave)

// DeadAcute
KEY_MAP_GTK     (DeadAcute, GDK_dead_acute)
KEY_MAP_QT      (DeadAcute, Qt::Key_Dead_Acute)

// DeadCircumflex
KEY_MAP_GTK     (DeadCircumflex, GDK_dead_circumflex)
KEY_MAP_QT      (DeadCircumflex, Qt::Key_Dead_Circumflex)

// DeadTilde
KEY_MAP_GTK     (DeadTilde, GDK_dead_tilde)
KEY_MAP_QT      (DeadTilde, Qt::Key_Dead_Tilde)

// DeadMacron
KEY_MAP_GTK     (DeadMacron, GDK_dead_macron)
KEY_MAP_QT      (DeadMacron, Qt::Key_Dead_Macron)

// DeadBreve
KEY_MAP_GTK     (DeadBreve, GDK_dead_breve)
KEY_MAP_QT      (DeadBreve, Qt::Key_Dead_Breve)

// DeadAboveDot
KEY_MAP_GTK     (DeadAboveDot, GDK_dead_abovedot)
KEY_MAP_QT      (DeadAboveDot, Qt::Key_Dead_Abovedot)

// DeadUmlaut
KEY_MAP_GTK     (DeadUmlaut, GDK_dead_diaeresis)
KEY_MAP_QT      (DeadUmlaut, Qt::Key_Dead_Diaeresis)

// DeadAboveRing
KEY_MAP_GTK     (DeadAboveRing, GDK_dead_abovering)
KEY_MAP_QT      (DeadAboveRing, Qt::Key_Dead_Abovering)

// DeadDoubleacute
KEY_MAP_GTK     (DeadDoubleacute, GDK_dead_doubleacute)
KEY_MAP_QT      (DeadDoubleacute, Qt::Key_Dead_Doubleacute)

// DeadCaron
KEY_MAP_GTK     (DeadCaron, GDK_dead_caron)
KEY_MAP_QT      (DeadCaron, Qt::Key_Dead_Caron)

// DeadCedilla
KEY_MAP_GTK     (DeadCedilla, GDK_dead_cedilla)
KEY_MAP_QT      (DeadCedilla, Qt::Key_Dead_Cedilla)

// DeadOgonek
KEY_MAP_GTK     (DeadOgonek, GDK_dead_ogonek)
KEY_MAP_QT      (DeadOgonek, Qt::Key_Dead_Ogonek)

// DeadIota
KEY_MAP_GTK     (DeadIota, GDK_dead_iota)
KEY_MAP_QT      (DeadIota, Qt::Key_Dead_Iota)

// DeadVoicedSound
KEY_MAP_GTK     (DeadVoicedSound, GDK_dead_voiced_sound)
KEY_MAP_QT      (DeadVoicedSound, Qt::Key_Dead_Voiced_Sound)

// DeadSemivoicedSound
KEY_MAP_GTK     (DeadSemivoicedSound, GDK_dead_semivoiced_sound)
KEY_MAP_QT      (DeadSemivoicedSound, Qt::Key_Dead_Semivoiced_Sound)

#undef KEY_MAP_WIN
#undef KEY_MAP_WIN_JPN
#undef KEY_MAP_WIN_KOR
#undef KEY_MAP_WIN_OTH
#undef KEY_MAP_COCOA
#undef KEY_MAP_GTK
#undef KEY_MAP_QT
#undef KEY_MAP_ANDROID