xcb: Change KeyTbl from pure C array to compile time sorted std::array

Allow to use binary search instead of iterate over array

Change-Id: Ibcce1a2296e85f51a61fbb5e64e23e5a27464959
Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
This commit is contained in:
Mikhail Svetkin 2018-07-18 21:48:39 +02:00
parent 28503387ea
commit 128a6eec06

View File

@ -49,6 +49,7 @@
#include <QtCore/QMetaEnum> #include <QtCore/QMetaEnum>
#include <private/qguiapplication_p.h> #include <private/qguiapplication_p.h>
#include <private/qmakearray_p.h>
#include <xkbcommon/xkbcommon-keysyms.h> #include <xkbcommon/xkbcommon-keysyms.h>
@ -57,356 +58,372 @@
#endif #endif
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
static const unsigned int KeyTbl[] = { typedef struct xkb2qt
// misc keys {
unsigned int xkb;
unsigned int qt;
XKB_KEY_Escape, Qt::Key_Escape, constexpr bool operator <=(const xkb2qt &that) const noexcept
XKB_KEY_Tab, Qt::Key_Tab, {
XKB_KEY_ISO_Left_Tab, Qt::Key_Backtab, return xkb <= that.xkb;
XKB_KEY_BackSpace, Qt::Key_Backspace, }
XKB_KEY_Return, Qt::Key_Return,
XKB_KEY_Insert, Qt::Key_Insert,
XKB_KEY_Delete, Qt::Key_Delete,
XKB_KEY_Clear, Qt::Key_Delete,
XKB_KEY_Pause, Qt::Key_Pause,
XKB_KEY_Print, Qt::Key_Print,
0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq
0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq
// cursor movement constexpr bool operator <(const xkb2qt &that) const noexcept
{
return xkb < that.xkb;
}
} xkb2qt_t;
XKB_KEY_Home, Qt::Key_Home, template<std::size_t Xkb, std::size_t Qt>
XKB_KEY_End, Qt::Key_End, struct Xkb2Qt
XKB_KEY_Left, Qt::Key_Left, {
XKB_KEY_Up, Qt::Key_Up, using Type = xkb2qt_t;
XKB_KEY_Right, Qt::Key_Right, static constexpr Type data() noexcept { return Type{Xkb, Qt}; }
XKB_KEY_Down, Qt::Key_Down,
XKB_KEY_Prior, Qt::Key_PageUp,
XKB_KEY_Next, Qt::Key_PageDown,
// modifiers
XKB_KEY_Shift_L, Qt::Key_Shift,
XKB_KEY_Shift_R, Qt::Key_Shift,
XKB_KEY_Shift_Lock, Qt::Key_Shift,
XKB_KEY_Control_L, Qt::Key_Control,
XKB_KEY_Control_R, Qt::Key_Control,
XKB_KEY_Meta_L, Qt::Key_Meta,
XKB_KEY_Meta_R, Qt::Key_Meta,
XKB_KEY_Alt_L, Qt::Key_Alt,
XKB_KEY_Alt_R, Qt::Key_Alt,
XKB_KEY_Caps_Lock, Qt::Key_CapsLock,
XKB_KEY_Num_Lock, Qt::Key_NumLock,
XKB_KEY_Scroll_Lock, Qt::Key_ScrollLock,
XKB_KEY_Super_L, Qt::Key_Super_L,
XKB_KEY_Super_R, Qt::Key_Super_R,
XKB_KEY_Menu, Qt::Key_Menu,
XKB_KEY_Hyper_L, Qt::Key_Hyper_L,
XKB_KEY_Hyper_R, Qt::Key_Hyper_R,
XKB_KEY_Help, Qt::Key_Help,
0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab
0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11)
0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12)
// numeric and function keypad keys
XKB_KEY_KP_Space, Qt::Key_Space,
XKB_KEY_KP_Tab, Qt::Key_Tab,
XKB_KEY_KP_Enter, Qt::Key_Enter,
//XKB_KEY_KP_F1, Qt::Key_F1,
//XKB_KEY_KP_F2, Qt::Key_F2,
//XKB_KEY_KP_F3, Qt::Key_F3,
//XKB_KEY_KP_F4, Qt::Key_F4,
XKB_KEY_KP_Home, Qt::Key_Home,
XKB_KEY_KP_Left, Qt::Key_Left,
XKB_KEY_KP_Up, Qt::Key_Up,
XKB_KEY_KP_Right, Qt::Key_Right,
XKB_KEY_KP_Down, Qt::Key_Down,
XKB_KEY_KP_Prior, Qt::Key_PageUp,
XKB_KEY_KP_Next, Qt::Key_PageDown,
XKB_KEY_KP_End, Qt::Key_End,
XKB_KEY_KP_Begin, Qt::Key_Clear,
XKB_KEY_KP_Insert, Qt::Key_Insert,
XKB_KEY_KP_Delete, Qt::Key_Delete,
XKB_KEY_KP_Equal, Qt::Key_Equal,
XKB_KEY_KP_Multiply, Qt::Key_Asterisk,
XKB_KEY_KP_Add, Qt::Key_Plus,
XKB_KEY_KP_Separator, Qt::Key_Comma,
XKB_KEY_KP_Subtract, Qt::Key_Minus,
XKB_KEY_KP_Decimal, Qt::Key_Period,
XKB_KEY_KP_Divide, Qt::Key_Slash,
// special non-XF86 function keys
XKB_KEY_Undo, Qt::Key_Undo,
XKB_KEY_Redo, Qt::Key_Redo,
XKB_KEY_Find, Qt::Key_Find,
XKB_KEY_Cancel, Qt::Key_Cancel,
// International input method support keys
// International & multi-key character composition
XKB_KEY_ISO_Level3_Shift, Qt::Key_AltGr,
XKB_KEY_Multi_key, Qt::Key_Multi_key,
XKB_KEY_Codeinput, Qt::Key_Codeinput,
XKB_KEY_SingleCandidate, Qt::Key_SingleCandidate,
XKB_KEY_MultipleCandidate, Qt::Key_MultipleCandidate,
XKB_KEY_PreviousCandidate, Qt::Key_PreviousCandidate,
// Misc Functions
XKB_KEY_Mode_switch, Qt::Key_Mode_switch,
XKB_KEY_script_switch, Qt::Key_Mode_switch,
// Japanese keyboard support
XKB_KEY_Kanji, Qt::Key_Kanji,
XKB_KEY_Muhenkan, Qt::Key_Muhenkan,
//XKB_KEY_Henkan_Mode, Qt::Key_Henkan_Mode,
XKB_KEY_Henkan_Mode, Qt::Key_Henkan,
XKB_KEY_Henkan, Qt::Key_Henkan,
XKB_KEY_Romaji, Qt::Key_Romaji,
XKB_KEY_Hiragana, Qt::Key_Hiragana,
XKB_KEY_Katakana, Qt::Key_Katakana,
XKB_KEY_Hiragana_Katakana, Qt::Key_Hiragana_Katakana,
XKB_KEY_Zenkaku, Qt::Key_Zenkaku,
XKB_KEY_Hankaku, Qt::Key_Hankaku,
XKB_KEY_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku,
XKB_KEY_Touroku, Qt::Key_Touroku,
XKB_KEY_Massyo, Qt::Key_Massyo,
XKB_KEY_Kana_Lock, Qt::Key_Kana_Lock,
XKB_KEY_Kana_Shift, Qt::Key_Kana_Shift,
XKB_KEY_Eisu_Shift, Qt::Key_Eisu_Shift,
XKB_KEY_Eisu_toggle, Qt::Key_Eisu_toggle,
//XKB_KEY_Kanji_Bangou, Qt::Key_Kanji_Bangou,
//XKB_KEY_Zen_Koho, Qt::Key_Zen_Koho,
//XKB_KEY_Mae_Koho, Qt::Key_Mae_Koho,
XKB_KEY_Kanji_Bangou, Qt::Key_Codeinput,
XKB_KEY_Zen_Koho, Qt::Key_MultipleCandidate,
XKB_KEY_Mae_Koho, Qt::Key_PreviousCandidate,
// Korean keyboard support
XKB_KEY_Hangul, Qt::Key_Hangul,
XKB_KEY_Hangul_Start, Qt::Key_Hangul_Start,
XKB_KEY_Hangul_End, Qt::Key_Hangul_End,
XKB_KEY_Hangul_Hanja, Qt::Key_Hangul_Hanja,
XKB_KEY_Hangul_Jamo, Qt::Key_Hangul_Jamo,
XKB_KEY_Hangul_Romaja, Qt::Key_Hangul_Romaja,
//XKB_KEY_Hangul_Codeinput, Qt::Key_Hangul_Codeinput,
XKB_KEY_Hangul_Codeinput, Qt::Key_Codeinput,
XKB_KEY_Hangul_Jeonja, Qt::Key_Hangul_Jeonja,
XKB_KEY_Hangul_Banja, Qt::Key_Hangul_Banja,
XKB_KEY_Hangul_PreHanja, Qt::Key_Hangul_PreHanja,
XKB_KEY_Hangul_PostHanja, Qt::Key_Hangul_PostHanja,
//XKB_KEY_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate,
//XKB_KEY_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate,
//XKB_KEY_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate,
XKB_KEY_Hangul_SingleCandidate, Qt::Key_SingleCandidate,
XKB_KEY_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate,
XKB_KEY_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate,
XKB_KEY_Hangul_Special, Qt::Key_Hangul_Special,
//XKB_KEY_Hangul_switch, Qt::Key_Hangul_switch,
XKB_KEY_Hangul_switch, Qt::Key_Mode_switch,
// dead keys
XKB_KEY_dead_grave, Qt::Key_Dead_Grave,
XKB_KEY_dead_acute, Qt::Key_Dead_Acute,
XKB_KEY_dead_circumflex, Qt::Key_Dead_Circumflex,
XKB_KEY_dead_tilde, Qt::Key_Dead_Tilde,
XKB_KEY_dead_macron, Qt::Key_Dead_Macron,
XKB_KEY_dead_breve, Qt::Key_Dead_Breve,
XKB_KEY_dead_abovedot, Qt::Key_Dead_Abovedot,
XKB_KEY_dead_diaeresis, Qt::Key_Dead_Diaeresis,
XKB_KEY_dead_abovering, Qt::Key_Dead_Abovering,
XKB_KEY_dead_doubleacute, Qt::Key_Dead_Doubleacute,
XKB_KEY_dead_caron, Qt::Key_Dead_Caron,
XKB_KEY_dead_cedilla, Qt::Key_Dead_Cedilla,
XKB_KEY_dead_ogonek, Qt::Key_Dead_Ogonek,
XKB_KEY_dead_iota, Qt::Key_Dead_Iota,
XKB_KEY_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound,
XKB_KEY_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound,
XKB_KEY_dead_belowdot, Qt::Key_Dead_Belowdot,
XKB_KEY_dead_hook, Qt::Key_Dead_Hook,
XKB_KEY_dead_horn, Qt::Key_Dead_Horn,
XKB_KEY_dead_stroke, Qt::Key_Dead_Stroke,
XKB_KEY_dead_abovecomma, Qt::Key_Dead_Abovecomma,
XKB_KEY_dead_abovereversedcomma, Qt::Key_Dead_Abovereversedcomma,
XKB_KEY_dead_doublegrave, Qt::Key_Dead_Doublegrave,
XKB_KEY_dead_belowring, Qt::Key_Dead_Belowring,
XKB_KEY_dead_belowmacron, Qt::Key_Dead_Belowmacron,
XKB_KEY_dead_belowcircumflex, Qt::Key_Dead_Belowcircumflex,
XKB_KEY_dead_belowtilde, Qt::Key_Dead_Belowtilde,
XKB_KEY_dead_belowbreve, Qt::Key_Dead_Belowbreve,
XKB_KEY_dead_belowdiaeresis, Qt::Key_Dead_Belowdiaeresis,
XKB_KEY_dead_invertedbreve, Qt::Key_Dead_Invertedbreve,
XKB_KEY_dead_belowcomma, Qt::Key_Dead_Belowcomma,
XKB_KEY_dead_currency, Qt::Key_Dead_Currency,
XKB_KEY_dead_a, Qt::Key_Dead_a,
XKB_KEY_dead_A, Qt::Key_Dead_A,
XKB_KEY_dead_e, Qt::Key_Dead_e,
XKB_KEY_dead_E, Qt::Key_Dead_E,
XKB_KEY_dead_i, Qt::Key_Dead_i,
XKB_KEY_dead_I, Qt::Key_Dead_I,
XKB_KEY_dead_o, Qt::Key_Dead_o,
XKB_KEY_dead_O, Qt::Key_Dead_O,
XKB_KEY_dead_u, Qt::Key_Dead_u,
XKB_KEY_dead_U, Qt::Key_Dead_U,
XKB_KEY_dead_small_schwa, Qt::Key_Dead_Small_Schwa,
XKB_KEY_dead_capital_schwa, Qt::Key_Dead_Capital_Schwa,
XKB_KEY_dead_greek, Qt::Key_Dead_Greek,
XKB_KEY_dead_lowline, Qt::Key_Dead_Lowline,
XKB_KEY_dead_aboveverticalline, Qt::Key_Dead_Aboveverticalline,
XKB_KEY_dead_belowverticalline, Qt::Key_Dead_Belowverticalline,
XKB_KEY_dead_longsolidusoverlay, Qt::Key_Dead_Longsolidusoverlay,
// Special keys from X.org - This include multimedia keys,
// wireless/bluetooth/uwb keys, special launcher keys, etc.
XKB_KEY_XF86Back, Qt::Key_Back,
XKB_KEY_XF86Forward, Qt::Key_Forward,
XKB_KEY_XF86Stop, Qt::Key_Stop,
XKB_KEY_XF86Refresh, Qt::Key_Refresh,
XKB_KEY_XF86Favorites, Qt::Key_Favorites,
XKB_KEY_XF86AudioMedia, Qt::Key_LaunchMedia,
XKB_KEY_XF86OpenURL, Qt::Key_OpenUrl,
XKB_KEY_XF86HomePage, Qt::Key_HomePage,
XKB_KEY_XF86Search, Qt::Key_Search,
XKB_KEY_XF86AudioLowerVolume, Qt::Key_VolumeDown,
XKB_KEY_XF86AudioMute, Qt::Key_VolumeMute,
XKB_KEY_XF86AudioRaiseVolume, Qt::Key_VolumeUp,
XKB_KEY_XF86AudioPlay, Qt::Key_MediaPlay,
XKB_KEY_XF86AudioStop, Qt::Key_MediaStop,
XKB_KEY_XF86AudioPrev, Qt::Key_MediaPrevious,
XKB_KEY_XF86AudioNext, Qt::Key_MediaNext,
XKB_KEY_XF86AudioRecord, Qt::Key_MediaRecord,
XKB_KEY_XF86AudioPause, Qt::Key_MediaPause,
XKB_KEY_XF86Mail, Qt::Key_LaunchMail,
XKB_KEY_XF86MyComputer, Qt::Key_Launch0, // ### Qt 6: remap properly
XKB_KEY_XF86Calculator, Qt::Key_Launch1,
XKB_KEY_XF86Memo, Qt::Key_Memo,
XKB_KEY_XF86ToDoList, Qt::Key_ToDoList,
XKB_KEY_XF86Calendar, Qt::Key_Calendar,
XKB_KEY_XF86PowerDown, Qt::Key_PowerDown,
XKB_KEY_XF86ContrastAdjust, Qt::Key_ContrastAdjust,
XKB_KEY_XF86Standby, Qt::Key_Standby,
XKB_KEY_XF86MonBrightnessUp, Qt::Key_MonBrightnessUp,
XKB_KEY_XF86MonBrightnessDown, Qt::Key_MonBrightnessDown,
XKB_KEY_XF86KbdLightOnOff, Qt::Key_KeyboardLightOnOff,
XKB_KEY_XF86KbdBrightnessUp, Qt::Key_KeyboardBrightnessUp,
XKB_KEY_XF86KbdBrightnessDown, Qt::Key_KeyboardBrightnessDown,
XKB_KEY_XF86PowerOff, Qt::Key_PowerOff,
XKB_KEY_XF86WakeUp, Qt::Key_WakeUp,
XKB_KEY_XF86Eject, Qt::Key_Eject,
XKB_KEY_XF86ScreenSaver, Qt::Key_ScreenSaver,
XKB_KEY_XF86WWW, Qt::Key_WWW,
XKB_KEY_XF86Sleep, Qt::Key_Sleep,
XKB_KEY_XF86LightBulb, Qt::Key_LightBulb,
XKB_KEY_XF86Shop, Qt::Key_Shop,
XKB_KEY_XF86History, Qt::Key_History,
XKB_KEY_XF86AddFavorite, Qt::Key_AddFavorite,
XKB_KEY_XF86HotLinks, Qt::Key_HotLinks,
XKB_KEY_XF86BrightnessAdjust, Qt::Key_BrightnessAdjust,
XKB_KEY_XF86Finance, Qt::Key_Finance,
XKB_KEY_XF86Community, Qt::Key_Community,
XKB_KEY_XF86AudioRewind, Qt::Key_AudioRewind,
XKB_KEY_XF86BackForward, Qt::Key_BackForward,
XKB_KEY_XF86ApplicationLeft, Qt::Key_ApplicationLeft,
XKB_KEY_XF86ApplicationRight, Qt::Key_ApplicationRight,
XKB_KEY_XF86Book, Qt::Key_Book,
XKB_KEY_XF86CD, Qt::Key_CD,
XKB_KEY_XF86Calculater, Qt::Key_Calculator,
XKB_KEY_XF86Clear, Qt::Key_Clear,
XKB_KEY_XF86ClearGrab, Qt::Key_ClearGrab,
XKB_KEY_XF86Close, Qt::Key_Close,
XKB_KEY_XF86Copy, Qt::Key_Copy,
XKB_KEY_XF86Cut, Qt::Key_Cut,
XKB_KEY_XF86Display, Qt::Key_Display,
XKB_KEY_XF86DOS, Qt::Key_DOS,
XKB_KEY_XF86Documents, Qt::Key_Documents,
XKB_KEY_XF86Excel, Qt::Key_Excel,
XKB_KEY_XF86Explorer, Qt::Key_Explorer,
XKB_KEY_XF86Game, Qt::Key_Game,
XKB_KEY_XF86Go, Qt::Key_Go,
XKB_KEY_XF86iTouch, Qt::Key_iTouch,
XKB_KEY_XF86LogOff, Qt::Key_LogOff,
XKB_KEY_XF86Market, Qt::Key_Market,
XKB_KEY_XF86Meeting, Qt::Key_Meeting,
XKB_KEY_XF86MenuKB, Qt::Key_MenuKB,
XKB_KEY_XF86MenuPB, Qt::Key_MenuPB,
XKB_KEY_XF86MySites, Qt::Key_MySites,
XKB_KEY_XF86New, Qt::Key_New,
XKB_KEY_XF86News, Qt::Key_News,
XKB_KEY_XF86OfficeHome, Qt::Key_OfficeHome,
XKB_KEY_XF86Open, Qt::Key_Open,
XKB_KEY_XF86Option, Qt::Key_Option,
XKB_KEY_XF86Paste, Qt::Key_Paste,
XKB_KEY_XF86Phone, Qt::Key_Phone,
XKB_KEY_XF86Reply, Qt::Key_Reply,
XKB_KEY_XF86Reload, Qt::Key_Reload,
XKB_KEY_XF86RotateWindows, Qt::Key_RotateWindows,
XKB_KEY_XF86RotationPB, Qt::Key_RotationPB,
XKB_KEY_XF86RotationKB, Qt::Key_RotationKB,
XKB_KEY_XF86Save, Qt::Key_Save,
XKB_KEY_XF86Send, Qt::Key_Send,
XKB_KEY_XF86Spell, Qt::Key_Spell,
XKB_KEY_XF86SplitScreen, Qt::Key_SplitScreen,
XKB_KEY_XF86Support, Qt::Key_Support,
XKB_KEY_XF86TaskPane, Qt::Key_TaskPane,
XKB_KEY_XF86Terminal, Qt::Key_Terminal,
XKB_KEY_XF86Tools, Qt::Key_Tools,
XKB_KEY_XF86Travel, Qt::Key_Travel,
XKB_KEY_XF86Video, Qt::Key_Video,
XKB_KEY_XF86Word, Qt::Key_Word,
XKB_KEY_XF86Xfer, Qt::Key_Xfer,
XKB_KEY_XF86ZoomIn, Qt::Key_ZoomIn,
XKB_KEY_XF86ZoomOut, Qt::Key_ZoomOut,
XKB_KEY_XF86Away, Qt::Key_Away,
XKB_KEY_XF86Messenger, Qt::Key_Messenger,
XKB_KEY_XF86WebCam, Qt::Key_WebCam,
XKB_KEY_XF86MailForward, Qt::Key_MailForward,
XKB_KEY_XF86Pictures, Qt::Key_Pictures,
XKB_KEY_XF86Music, Qt::Key_Music,
XKB_KEY_XF86Battery, Qt::Key_Battery,
XKB_KEY_XF86Bluetooth, Qt::Key_Bluetooth,
XKB_KEY_XF86WLAN, Qt::Key_WLAN,
XKB_KEY_XF86UWB, Qt::Key_UWB,
XKB_KEY_XF86AudioForward, Qt::Key_AudioForward,
XKB_KEY_XF86AudioRepeat, Qt::Key_AudioRepeat,
XKB_KEY_XF86AudioRandomPlay, Qt::Key_AudioRandomPlay,
XKB_KEY_XF86Subtitle, Qt::Key_Subtitle,
XKB_KEY_XF86AudioCycleTrack, Qt::Key_AudioCycleTrack,
XKB_KEY_XF86Time, Qt::Key_Time,
XKB_KEY_XF86Select, Qt::Key_Select,
XKB_KEY_XF86View, Qt::Key_View,
XKB_KEY_XF86TopMenu, Qt::Key_TopMenu,
XKB_KEY_XF86Red, Qt::Key_Red,
XKB_KEY_XF86Green, Qt::Key_Green,
XKB_KEY_XF86Yellow, Qt::Key_Yellow,
XKB_KEY_XF86Blue, Qt::Key_Blue,
XKB_KEY_XF86Bluetooth, Qt::Key_Bluetooth,
XKB_KEY_XF86Suspend, Qt::Key_Suspend,
XKB_KEY_XF86Hibernate, Qt::Key_Hibernate,
XKB_KEY_XF86TouchpadToggle, Qt::Key_TouchpadToggle,
XKB_KEY_XF86TouchpadOn, Qt::Key_TouchpadOn,
XKB_KEY_XF86TouchpadOff, Qt::Key_TouchpadOff,
XKB_KEY_XF86AudioMicMute, Qt::Key_MicMute,
XKB_KEY_XF86Launch0, Qt::Key_Launch2, // ### Qt 6: remap properly
XKB_KEY_XF86Launch1, Qt::Key_Launch3,
XKB_KEY_XF86Launch2, Qt::Key_Launch4,
XKB_KEY_XF86Launch3, Qt::Key_Launch5,
XKB_KEY_XF86Launch4, Qt::Key_Launch6,
XKB_KEY_XF86Launch5, Qt::Key_Launch7,
XKB_KEY_XF86Launch6, Qt::Key_Launch8,
XKB_KEY_XF86Launch7, Qt::Key_Launch9,
XKB_KEY_XF86Launch8, Qt::Key_LaunchA,
XKB_KEY_XF86Launch9, Qt::Key_LaunchB,
XKB_KEY_XF86LaunchA, Qt::Key_LaunchC,
XKB_KEY_XF86LaunchB, Qt::Key_LaunchD,
XKB_KEY_XF86LaunchC, Qt::Key_LaunchE,
XKB_KEY_XF86LaunchD, Qt::Key_LaunchF,
XKB_KEY_XF86LaunchE, Qt::Key_LaunchG,
XKB_KEY_XF86LaunchF, Qt::Key_LaunchH,
0, 0
}; };
static constexpr const auto KeyTbl = qMakeArray(
QSortedData<
// misc keys
Xkb2Qt<XKB_KEY_Escape, Qt::Key_Escape>,
Xkb2Qt<XKB_KEY_Tab, Qt::Key_Tab>,
Xkb2Qt<XKB_KEY_ISO_Left_Tab, Qt::Key_Backtab>,
Xkb2Qt<XKB_KEY_BackSpace, Qt::Key_Backspace>,
Xkb2Qt<XKB_KEY_Return, Qt::Key_Return>,
Xkb2Qt<XKB_KEY_Insert, Qt::Key_Insert>,
Xkb2Qt<XKB_KEY_Delete, Qt::Key_Delete>,
Xkb2Qt<XKB_KEY_Clear, Qt::Key_Delete>,
Xkb2Qt<XKB_KEY_Pause, Qt::Key_Pause>,
Xkb2Qt<XKB_KEY_Print, Qt::Key_Print>,
Xkb2Qt<0x1005FF60, Qt::Key_SysReq>, // hardcoded Sun SysReq
Xkb2Qt<0x1007ff00, Qt::Key_SysReq>, // hardcoded X386 SysReq
// cursor movement
Xkb2Qt<XKB_KEY_Home, Qt::Key_Home>,
Xkb2Qt<XKB_KEY_End, Qt::Key_End>,
Xkb2Qt<XKB_KEY_Left, Qt::Key_Left>,
Xkb2Qt<XKB_KEY_Up, Qt::Key_Up>,
Xkb2Qt<XKB_KEY_Right, Qt::Key_Right>,
Xkb2Qt<XKB_KEY_Down, Qt::Key_Down>,
Xkb2Qt<XKB_KEY_Prior, Qt::Key_PageUp>,
Xkb2Qt<XKB_KEY_Next, Qt::Key_PageDown>,
// modifiers
Xkb2Qt<XKB_KEY_Shift_L, Qt::Key_Shift>,
Xkb2Qt<XKB_KEY_Shift_R, Qt::Key_Shift>,
Xkb2Qt<XKB_KEY_Shift_Lock, Qt::Key_Shift>,
Xkb2Qt<XKB_KEY_Control_L, Qt::Key_Control>,
Xkb2Qt<XKB_KEY_Control_R, Qt::Key_Control>,
Xkb2Qt<XKB_KEY_Meta_L, Qt::Key_Meta>,
Xkb2Qt<XKB_KEY_Meta_R, Qt::Key_Meta>,
Xkb2Qt<XKB_KEY_Alt_L, Qt::Key_Alt>,
Xkb2Qt<XKB_KEY_Alt_R, Qt::Key_Alt>,
Xkb2Qt<XKB_KEY_Caps_Lock, Qt::Key_CapsLock>,
Xkb2Qt<XKB_KEY_Num_Lock, Qt::Key_NumLock>,
Xkb2Qt<XKB_KEY_Scroll_Lock, Qt::Key_ScrollLock>,
Xkb2Qt<XKB_KEY_Super_L, Qt::Key_Super_L>,
Xkb2Qt<XKB_KEY_Super_R, Qt::Key_Super_R>,
Xkb2Qt<XKB_KEY_Menu, Qt::Key_Menu>,
Xkb2Qt<XKB_KEY_Hyper_L, Qt::Key_Hyper_L>,
Xkb2Qt<XKB_KEY_Hyper_R, Qt::Key_Hyper_R>,
Xkb2Qt<XKB_KEY_Help, Qt::Key_Help>,
Xkb2Qt<0x1000FF74, Qt::Key_Backtab>, // hardcoded HP backtab
Xkb2Qt<0x1005FF10, Qt::Key_F11>, // hardcoded Sun F36 (labeled F11)
Xkb2Qt<0x1005FF11, Qt::Key_F12>, // hardcoded Sun F37 (labeled F12)
// numeric and function keypad keys
Xkb2Qt<XKB_KEY_KP_Space, Qt::Key_Space>,
Xkb2Qt<XKB_KEY_KP_Tab, Qt::Key_Tab>,
Xkb2Qt<XKB_KEY_KP_Enter, Qt::Key_Enter>,
//Xkb2Qt<XKB_KEY_KP_F1, Qt::Key_F1>,
//Xkb2Qt<XKB_KEY_KP_F2, Qt::Key_F2>,
//Xkb2Qt<XKB_KEY_KP_F3, Qt::Key_F3>,
//Xkb2Qt<XKB_KEY_KP_F4, Qt::Key_F4>,
Xkb2Qt<XKB_KEY_KP_Home, Qt::Key_Home>,
Xkb2Qt<XKB_KEY_KP_Left, Qt::Key_Left>,
Xkb2Qt<XKB_KEY_KP_Up, Qt::Key_Up>,
Xkb2Qt<XKB_KEY_KP_Right, Qt::Key_Right>,
Xkb2Qt<XKB_KEY_KP_Down, Qt::Key_Down>,
Xkb2Qt<XKB_KEY_KP_Prior, Qt::Key_PageUp>,
Xkb2Qt<XKB_KEY_KP_Next, Qt::Key_PageDown>,
Xkb2Qt<XKB_KEY_KP_End, Qt::Key_End>,
Xkb2Qt<XKB_KEY_KP_Begin, Qt::Key_Clear>,
Xkb2Qt<XKB_KEY_KP_Insert, Qt::Key_Insert>,
Xkb2Qt<XKB_KEY_KP_Delete, Qt::Key_Delete>,
Xkb2Qt<XKB_KEY_KP_Equal, Qt::Key_Equal>,
Xkb2Qt<XKB_KEY_KP_Multiply, Qt::Key_Asterisk>,
Xkb2Qt<XKB_KEY_KP_Add, Qt::Key_Plus>,
Xkb2Qt<XKB_KEY_KP_Separator, Qt::Key_Comma>,
Xkb2Qt<XKB_KEY_KP_Subtract, Qt::Key_Minus>,
Xkb2Qt<XKB_KEY_KP_Decimal, Qt::Key_Period>,
Xkb2Qt<XKB_KEY_KP_Divide, Qt::Key_Slash>,
// International input method support keys
// International & multi-key character composition
Xkb2Qt<XKB_KEY_ISO_Level3_Shift, Qt::Key_AltGr>,
Xkb2Qt<XKB_KEY_Multi_key, Qt::Key_Multi_key>,
Xkb2Qt<XKB_KEY_Codeinput, Qt::Key_Codeinput>,
Xkb2Qt<XKB_KEY_SingleCandidate, Qt::Key_SingleCandidate>,
Xkb2Qt<XKB_KEY_MultipleCandidate, Qt::Key_MultipleCandidate>,
Xkb2Qt<XKB_KEY_PreviousCandidate, Qt::Key_PreviousCandidate>,
// Misc Functions
Xkb2Qt<XKB_KEY_Mode_switch, Qt::Key_Mode_switch>,
Xkb2Qt<XKB_KEY_script_switch, Qt::Key_Mode_switch>,
// Japanese keyboard support
Xkb2Qt<XKB_KEY_Kanji, Qt::Key_Kanji>,
Xkb2Qt<XKB_KEY_Muhenkan, Qt::Key_Muhenkan>,
//Xkb2Qt<XKB_KEY_Henkan_Mode, Qt::Key_Henkan_Mode>,
Xkb2Qt<XKB_KEY_Henkan_Mode, Qt::Key_Henkan>,
Xkb2Qt<XKB_KEY_Henkan, Qt::Key_Henkan>,
Xkb2Qt<XKB_KEY_Romaji, Qt::Key_Romaji>,
Xkb2Qt<XKB_KEY_Hiragana, Qt::Key_Hiragana>,
Xkb2Qt<XKB_KEY_Katakana, Qt::Key_Katakana>,
Xkb2Qt<XKB_KEY_Hiragana_Katakana, Qt::Key_Hiragana_Katakana>,
Xkb2Qt<XKB_KEY_Zenkaku, Qt::Key_Zenkaku>,
Xkb2Qt<XKB_KEY_Hankaku, Qt::Key_Hankaku>,
Xkb2Qt<XKB_KEY_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku>,
Xkb2Qt<XKB_KEY_Touroku, Qt::Key_Touroku>,
Xkb2Qt<XKB_KEY_Massyo, Qt::Key_Massyo>,
Xkb2Qt<XKB_KEY_Kana_Lock, Qt::Key_Kana_Lock>,
Xkb2Qt<XKB_KEY_Kana_Shift, Qt::Key_Kana_Shift>,
Xkb2Qt<XKB_KEY_Eisu_Shift, Qt::Key_Eisu_Shift>,
Xkb2Qt<XKB_KEY_Eisu_toggle, Qt::Key_Eisu_toggle>,
//Xkb2Qt<XKB_KEY_Kanji_Bangou, Qt::Key_Kanji_Bangou>,
//Xkb2Qt<XKB_KEY_Zen_Koho, Qt::Key_Zen_Koho>,
//Xkb2Qt<XKB_KEY_Mae_Koho, Qt::Key_Mae_Koho>,
Xkb2Qt<XKB_KEY_Kanji_Bangou, Qt::Key_Codeinput>,
Xkb2Qt<XKB_KEY_Zen_Koho, Qt::Key_MultipleCandidate>,
Xkb2Qt<XKB_KEY_Mae_Koho, Qt::Key_PreviousCandidate>,
// Korean keyboard support
Xkb2Qt<XKB_KEY_Hangul, Qt::Key_Hangul>,
Xkb2Qt<XKB_KEY_Hangul_Start, Qt::Key_Hangul_Start>,
Xkb2Qt<XKB_KEY_Hangul_End, Qt::Key_Hangul_End>,
Xkb2Qt<XKB_KEY_Hangul_Hanja, Qt::Key_Hangul_Hanja>,
Xkb2Qt<XKB_KEY_Hangul_Jamo, Qt::Key_Hangul_Jamo>,
Xkb2Qt<XKB_KEY_Hangul_Romaja, Qt::Key_Hangul_Romaja>,
//Xkb2Qt<XKB_KEY_Hangul_Codeinput, Qt::Key_Hangul_Codeinput>,
Xkb2Qt<XKB_KEY_Hangul_Codeinput, Qt::Key_Codeinput>,
Xkb2Qt<XKB_KEY_Hangul_Jeonja, Qt::Key_Hangul_Jeonja>,
Xkb2Qt<XKB_KEY_Hangul_Banja, Qt::Key_Hangul_Banja>,
Xkb2Qt<XKB_KEY_Hangul_PreHanja, Qt::Key_Hangul_PreHanja>,
Xkb2Qt<XKB_KEY_Hangul_PostHanja, Qt::Key_Hangul_PostHanja>,
//Xkb2Qt<XKB_KEY_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate>,
//Xkb2Qt<XKB_KEY_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate>,
//Xkb2Qt<XKB_KEY_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate>,
Xkb2Qt<XKB_KEY_Hangul_SingleCandidate, Qt::Key_SingleCandidate>,
Xkb2Qt<XKB_KEY_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate>,
Xkb2Qt<XKB_KEY_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate>,
Xkb2Qt<XKB_KEY_Hangul_Special, Qt::Key_Hangul_Special>,
//Xkb2Qt<XKB_KEY_Hangul_switch, Qt::Key_Hangul_switch>,
Xkb2Qt<XKB_KEY_Hangul_switch, Qt::Key_Mode_switch>,
// dead keys
Xkb2Qt<XKB_KEY_dead_grave, Qt::Key_Dead_Grave>,
Xkb2Qt<XKB_KEY_dead_acute, Qt::Key_Dead_Acute>,
Xkb2Qt<XKB_KEY_dead_circumflex, Qt::Key_Dead_Circumflex>,
Xkb2Qt<XKB_KEY_dead_tilde, Qt::Key_Dead_Tilde>,
Xkb2Qt<XKB_KEY_dead_macron, Qt::Key_Dead_Macron>,
Xkb2Qt<XKB_KEY_dead_breve, Qt::Key_Dead_Breve>,
Xkb2Qt<XKB_KEY_dead_abovedot, Qt::Key_Dead_Abovedot>,
Xkb2Qt<XKB_KEY_dead_diaeresis, Qt::Key_Dead_Diaeresis>,
Xkb2Qt<XKB_KEY_dead_abovering, Qt::Key_Dead_Abovering>,
Xkb2Qt<XKB_KEY_dead_doubleacute, Qt::Key_Dead_Doubleacute>,
Xkb2Qt<XKB_KEY_dead_caron, Qt::Key_Dead_Caron>,
Xkb2Qt<XKB_KEY_dead_cedilla, Qt::Key_Dead_Cedilla>,
Xkb2Qt<XKB_KEY_dead_ogonek, Qt::Key_Dead_Ogonek>,
Xkb2Qt<XKB_KEY_dead_iota, Qt::Key_Dead_Iota>,
Xkb2Qt<XKB_KEY_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound>,
Xkb2Qt<XKB_KEY_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound>,
Xkb2Qt<XKB_KEY_dead_belowdot, Qt::Key_Dead_Belowdot>,
Xkb2Qt<XKB_KEY_dead_hook, Qt::Key_Dead_Hook>,
Xkb2Qt<XKB_KEY_dead_horn, Qt::Key_Dead_Horn>,
Xkb2Qt<XKB_KEY_dead_stroke, Qt::Key_Dead_Stroke>,
Xkb2Qt<XKB_KEY_dead_abovecomma, Qt::Key_Dead_Abovecomma>,
Xkb2Qt<XKB_KEY_dead_abovereversedcomma, Qt::Key_Dead_Abovereversedcomma>,
Xkb2Qt<XKB_KEY_dead_doublegrave, Qt::Key_Dead_Doublegrave>,
Xkb2Qt<XKB_KEY_dead_belowring, Qt::Key_Dead_Belowring>,
Xkb2Qt<XKB_KEY_dead_belowmacron, Qt::Key_Dead_Belowmacron>,
Xkb2Qt<XKB_KEY_dead_belowcircumflex, Qt::Key_Dead_Belowcircumflex>,
Xkb2Qt<XKB_KEY_dead_belowtilde, Qt::Key_Dead_Belowtilde>,
Xkb2Qt<XKB_KEY_dead_belowbreve, Qt::Key_Dead_Belowbreve>,
Xkb2Qt<XKB_KEY_dead_belowdiaeresis, Qt::Key_Dead_Belowdiaeresis>,
Xkb2Qt<XKB_KEY_dead_invertedbreve, Qt::Key_Dead_Invertedbreve>,
Xkb2Qt<XKB_KEY_dead_belowcomma, Qt::Key_Dead_Belowcomma>,
Xkb2Qt<XKB_KEY_dead_currency, Qt::Key_Dead_Currency>,
Xkb2Qt<XKB_KEY_dead_a, Qt::Key_Dead_a>,
Xkb2Qt<XKB_KEY_dead_A, Qt::Key_Dead_A>,
Xkb2Qt<XKB_KEY_dead_e, Qt::Key_Dead_e>,
Xkb2Qt<XKB_KEY_dead_E, Qt::Key_Dead_E>,
Xkb2Qt<XKB_KEY_dead_i, Qt::Key_Dead_i>,
Xkb2Qt<XKB_KEY_dead_I, Qt::Key_Dead_I>,
Xkb2Qt<XKB_KEY_dead_o, Qt::Key_Dead_o>,
Xkb2Qt<XKB_KEY_dead_O, Qt::Key_Dead_O>,
Xkb2Qt<XKB_KEY_dead_u, Qt::Key_Dead_u>,
Xkb2Qt<XKB_KEY_dead_U, Qt::Key_Dead_U>,
Xkb2Qt<XKB_KEY_dead_small_schwa, Qt::Key_Dead_Small_Schwa>,
Xkb2Qt<XKB_KEY_dead_capital_schwa, Qt::Key_Dead_Capital_Schwa>,
Xkb2Qt<XKB_KEY_dead_greek, Qt::Key_Dead_Greek>,
Xkb2Qt<XKB_KEY_dead_lowline, Qt::Key_Dead_Lowline>,
Xkb2Qt<XKB_KEY_dead_aboveverticalline, Qt::Key_Dead_Aboveverticalline>,
Xkb2Qt<XKB_KEY_dead_belowverticalline, Qt::Key_Dead_Belowverticalline>,
Xkb2Qt<XKB_KEY_dead_longsolidusoverlay, Qt::Key_Dead_Longsolidusoverlay>,
// Special keys from X.org - This include multimedia keys,
// wireless/bluetooth/uwb keys, special launcher keys, etc.
Xkb2Qt<XKB_KEY_XF86Back, Qt::Key_Back>,
Xkb2Qt<XKB_KEY_XF86Forward, Qt::Key_Forward>,
Xkb2Qt<XKB_KEY_XF86Stop, Qt::Key_Stop>,
Xkb2Qt<XKB_KEY_XF86Refresh, Qt::Key_Refresh>,
Xkb2Qt<XKB_KEY_XF86Favorites, Qt::Key_Favorites>,
Xkb2Qt<XKB_KEY_XF86AudioMedia, Qt::Key_LaunchMedia>,
Xkb2Qt<XKB_KEY_XF86OpenURL, Qt::Key_OpenUrl>,
Xkb2Qt<XKB_KEY_XF86HomePage, Qt::Key_HomePage>,
Xkb2Qt<XKB_KEY_XF86Search, Qt::Key_Search>,
Xkb2Qt<XKB_KEY_XF86AudioLowerVolume, Qt::Key_VolumeDown>,
Xkb2Qt<XKB_KEY_XF86AudioMute, Qt::Key_VolumeMute>,
Xkb2Qt<XKB_KEY_XF86AudioRaiseVolume, Qt::Key_VolumeUp>,
Xkb2Qt<XKB_KEY_XF86AudioPlay, Qt::Key_MediaPlay>,
Xkb2Qt<XKB_KEY_XF86AudioStop, Qt::Key_MediaStop>,
Xkb2Qt<XKB_KEY_XF86AudioPrev, Qt::Key_MediaPrevious>,
Xkb2Qt<XKB_KEY_XF86AudioNext, Qt::Key_MediaNext>,
Xkb2Qt<XKB_KEY_XF86AudioRecord, Qt::Key_MediaRecord>,
Xkb2Qt<XKB_KEY_XF86AudioPause, Qt::Key_MediaPause>,
Xkb2Qt<XKB_KEY_XF86Mail, Qt::Key_LaunchMail>,
Xkb2Qt<XKB_KEY_XF86MyComputer, Qt::Key_Launch0>, // ### Qt 6: remap properly
Xkb2Qt<XKB_KEY_XF86Calculator, Qt::Key_Launch1>,
Xkb2Qt<XKB_KEY_XF86Memo, Qt::Key_Memo>,
Xkb2Qt<XKB_KEY_XF86ToDoList, Qt::Key_ToDoList>,
Xkb2Qt<XKB_KEY_XF86Calendar, Qt::Key_Calendar>,
Xkb2Qt<XKB_KEY_XF86PowerDown, Qt::Key_PowerDown>,
Xkb2Qt<XKB_KEY_XF86ContrastAdjust, Qt::Key_ContrastAdjust>,
Xkb2Qt<XKB_KEY_XF86Standby, Qt::Key_Standby>,
Xkb2Qt<XKB_KEY_XF86MonBrightnessUp, Qt::Key_MonBrightnessUp>,
Xkb2Qt<XKB_KEY_XF86MonBrightnessDown, Qt::Key_MonBrightnessDown>,
Xkb2Qt<XKB_KEY_XF86KbdLightOnOff, Qt::Key_KeyboardLightOnOff>,
Xkb2Qt<XKB_KEY_XF86KbdBrightnessUp, Qt::Key_KeyboardBrightnessUp>,
Xkb2Qt<XKB_KEY_XF86KbdBrightnessDown, Qt::Key_KeyboardBrightnessDown>,
Xkb2Qt<XKB_KEY_XF86PowerOff, Qt::Key_PowerOff>,
Xkb2Qt<XKB_KEY_XF86WakeUp, Qt::Key_WakeUp>,
Xkb2Qt<XKB_KEY_XF86Eject, Qt::Key_Eject>,
Xkb2Qt<XKB_KEY_XF86ScreenSaver, Qt::Key_ScreenSaver>,
Xkb2Qt<XKB_KEY_XF86WWW, Qt::Key_WWW>,
Xkb2Qt<XKB_KEY_XF86Sleep, Qt::Key_Sleep>,
Xkb2Qt<XKB_KEY_XF86LightBulb, Qt::Key_LightBulb>,
Xkb2Qt<XKB_KEY_XF86Shop, Qt::Key_Shop>,
Xkb2Qt<XKB_KEY_XF86History, Qt::Key_History>,
Xkb2Qt<XKB_KEY_XF86AddFavorite, Qt::Key_AddFavorite>,
Xkb2Qt<XKB_KEY_XF86HotLinks, Qt::Key_HotLinks>,
Xkb2Qt<XKB_KEY_XF86BrightnessAdjust, Qt::Key_BrightnessAdjust>,
Xkb2Qt<XKB_KEY_XF86Finance, Qt::Key_Finance>,
Xkb2Qt<XKB_KEY_XF86Community, Qt::Key_Community>,
Xkb2Qt<XKB_KEY_XF86AudioRewind, Qt::Key_AudioRewind>,
Xkb2Qt<XKB_KEY_XF86BackForward, Qt::Key_BackForward>,
Xkb2Qt<XKB_KEY_XF86ApplicationLeft, Qt::Key_ApplicationLeft>,
Xkb2Qt<XKB_KEY_XF86ApplicationRight, Qt::Key_ApplicationRight>,
Xkb2Qt<XKB_KEY_XF86Book, Qt::Key_Book>,
Xkb2Qt<XKB_KEY_XF86CD, Qt::Key_CD>,
Xkb2Qt<XKB_KEY_XF86Calculater, Qt::Key_Calculator>,
Xkb2Qt<XKB_KEY_XF86Clear, Qt::Key_Clear>,
Xkb2Qt<XKB_KEY_XF86ClearGrab, Qt::Key_ClearGrab>,
Xkb2Qt<XKB_KEY_XF86Close, Qt::Key_Close>,
Xkb2Qt<XKB_KEY_XF86Copy, Qt::Key_Copy>,
Xkb2Qt<XKB_KEY_XF86Cut, Qt::Key_Cut>,
Xkb2Qt<XKB_KEY_XF86Display, Qt::Key_Display>,
Xkb2Qt<XKB_KEY_XF86DOS, Qt::Key_DOS>,
Xkb2Qt<XKB_KEY_XF86Documents, Qt::Key_Documents>,
Xkb2Qt<XKB_KEY_XF86Excel, Qt::Key_Excel>,
Xkb2Qt<XKB_KEY_XF86Explorer, Qt::Key_Explorer>,
Xkb2Qt<XKB_KEY_XF86Game, Qt::Key_Game>,
Xkb2Qt<XKB_KEY_XF86Go, Qt::Key_Go>,
Xkb2Qt<XKB_KEY_XF86iTouch, Qt::Key_iTouch>,
Xkb2Qt<XKB_KEY_XF86LogOff, Qt::Key_LogOff>,
Xkb2Qt<XKB_KEY_XF86Market, Qt::Key_Market>,
Xkb2Qt<XKB_KEY_XF86Meeting, Qt::Key_Meeting>,
Xkb2Qt<XKB_KEY_XF86MenuKB, Qt::Key_MenuKB>,
Xkb2Qt<XKB_KEY_XF86MenuPB, Qt::Key_MenuPB>,
Xkb2Qt<XKB_KEY_XF86MySites, Qt::Key_MySites>,
Xkb2Qt<XKB_KEY_XF86New, Qt::Key_New>,
Xkb2Qt<XKB_KEY_XF86News, Qt::Key_News>,
Xkb2Qt<XKB_KEY_XF86OfficeHome, Qt::Key_OfficeHome>,
Xkb2Qt<XKB_KEY_XF86Open, Qt::Key_Open>,
Xkb2Qt<XKB_KEY_XF86Option, Qt::Key_Option>,
Xkb2Qt<XKB_KEY_XF86Paste, Qt::Key_Paste>,
Xkb2Qt<XKB_KEY_XF86Phone, Qt::Key_Phone>,
Xkb2Qt<XKB_KEY_XF86Reply, Qt::Key_Reply>,
Xkb2Qt<XKB_KEY_XF86Reload, Qt::Key_Reload>,
Xkb2Qt<XKB_KEY_XF86RotateWindows, Qt::Key_RotateWindows>,
Xkb2Qt<XKB_KEY_XF86RotationPB, Qt::Key_RotationPB>,
Xkb2Qt<XKB_KEY_XF86RotationKB, Qt::Key_RotationKB>,
Xkb2Qt<XKB_KEY_XF86Save, Qt::Key_Save>,
Xkb2Qt<XKB_KEY_XF86Send, Qt::Key_Send>,
Xkb2Qt<XKB_KEY_XF86Spell, Qt::Key_Spell>,
Xkb2Qt<XKB_KEY_XF86SplitScreen, Qt::Key_SplitScreen>,
Xkb2Qt<XKB_KEY_XF86Support, Qt::Key_Support>,
Xkb2Qt<XKB_KEY_XF86TaskPane, Qt::Key_TaskPane>,
Xkb2Qt<XKB_KEY_XF86Terminal, Qt::Key_Terminal>,
Xkb2Qt<XKB_KEY_XF86Tools, Qt::Key_Tools>,
Xkb2Qt<XKB_KEY_XF86Travel, Qt::Key_Travel>,
Xkb2Qt<XKB_KEY_XF86Video, Qt::Key_Video>,
Xkb2Qt<XKB_KEY_XF86Word, Qt::Key_Word>,
Xkb2Qt<XKB_KEY_XF86Xfer, Qt::Key_Xfer>,
Xkb2Qt<XKB_KEY_XF86ZoomIn, Qt::Key_ZoomIn>,
Xkb2Qt<XKB_KEY_XF86ZoomOut, Qt::Key_ZoomOut>,
Xkb2Qt<XKB_KEY_XF86Away, Qt::Key_Away>,
Xkb2Qt<XKB_KEY_XF86Messenger, Qt::Key_Messenger>,
Xkb2Qt<XKB_KEY_XF86WebCam, Qt::Key_WebCam>,
Xkb2Qt<XKB_KEY_XF86MailForward, Qt::Key_MailForward>,
Xkb2Qt<XKB_KEY_XF86Pictures, Qt::Key_Pictures>,
Xkb2Qt<XKB_KEY_XF86Music, Qt::Key_Music>,
Xkb2Qt<XKB_KEY_XF86Battery, Qt::Key_Battery>,
Xkb2Qt<XKB_KEY_XF86Bluetooth, Qt::Key_Bluetooth>,
Xkb2Qt<XKB_KEY_XF86WLAN, Qt::Key_WLAN>,
Xkb2Qt<XKB_KEY_XF86UWB, Qt::Key_UWB>,
Xkb2Qt<XKB_KEY_XF86AudioForward, Qt::Key_AudioForward>,
Xkb2Qt<XKB_KEY_XF86AudioRepeat, Qt::Key_AudioRepeat>,
Xkb2Qt<XKB_KEY_XF86AudioRandomPlay, Qt::Key_AudioRandomPlay>,
Xkb2Qt<XKB_KEY_XF86Subtitle, Qt::Key_Subtitle>,
Xkb2Qt<XKB_KEY_XF86AudioCycleTrack, Qt::Key_AudioCycleTrack>,
Xkb2Qt<XKB_KEY_XF86Time, Qt::Key_Time>,
Xkb2Qt<XKB_KEY_XF86Select, Qt::Key_Select>,
Xkb2Qt<XKB_KEY_XF86View, Qt::Key_View>,
Xkb2Qt<XKB_KEY_XF86TopMenu, Qt::Key_TopMenu>,
Xkb2Qt<XKB_KEY_XF86Red, Qt::Key_Red>,
Xkb2Qt<XKB_KEY_XF86Green, Qt::Key_Green>,
Xkb2Qt<XKB_KEY_XF86Yellow, Qt::Key_Yellow>,
Xkb2Qt<XKB_KEY_XF86Blue, Qt::Key_Blue>,
Xkb2Qt<XKB_KEY_XF86Bluetooth, Qt::Key_Bluetooth>,
Xkb2Qt<XKB_KEY_XF86Suspend, Qt::Key_Suspend>,
Xkb2Qt<XKB_KEY_XF86Hibernate, Qt::Key_Hibernate>,
Xkb2Qt<XKB_KEY_XF86TouchpadToggle, Qt::Key_TouchpadToggle>,
Xkb2Qt<XKB_KEY_XF86TouchpadOn, Qt::Key_TouchpadOn>,
Xkb2Qt<XKB_KEY_XF86TouchpadOff, Qt::Key_TouchpadOff>,
Xkb2Qt<XKB_KEY_XF86AudioMicMute, Qt::Key_MicMute>,
Xkb2Qt<XKB_KEY_XF86Launch0, Qt::Key_Launch2>, // ### Qt 6: remap properly
Xkb2Qt<XKB_KEY_XF86Launch1, Qt::Key_Launch3>,
Xkb2Qt<XKB_KEY_XF86Launch2, Qt::Key_Launch4>,
Xkb2Qt<XKB_KEY_XF86Launch3, Qt::Key_Launch5>,
Xkb2Qt<XKB_KEY_XF86Launch4, Qt::Key_Launch6>,
Xkb2Qt<XKB_KEY_XF86Launch5, Qt::Key_Launch7>,
Xkb2Qt<XKB_KEY_XF86Launch6, Qt::Key_Launch8>,
Xkb2Qt<XKB_KEY_XF86Launch7, Qt::Key_Launch9>,
Xkb2Qt<XKB_KEY_XF86Launch8, Qt::Key_LaunchA>,
Xkb2Qt<XKB_KEY_XF86Launch9, Qt::Key_LaunchB>,
Xkb2Qt<XKB_KEY_XF86LaunchA, Qt::Key_LaunchC>,
Xkb2Qt<XKB_KEY_XF86LaunchB, Qt::Key_LaunchD>,
Xkb2Qt<XKB_KEY_XF86LaunchC, Qt::Key_LaunchE>,
Xkb2Qt<XKB_KEY_XF86LaunchD, Qt::Key_LaunchF>,
Xkb2Qt<XKB_KEY_XF86LaunchE, Qt::Key_LaunchG>,
Xkb2Qt<XKB_KEY_XF86LaunchF, Qt::Key_LaunchH>
>::Data{}
);
// Possible modifier states. // Possible modifier states.
static const Qt::KeyboardModifiers ModsTbl[] = { static const Qt::KeyboardModifiers ModsTbl[] = {
Qt::NoModifier, // 0 Qt::NoModifier, // 0
@ -1103,14 +1120,10 @@ int QXcbKeyboard::keysymToQtKey(xcb_keysym_t keysym, Qt::KeyboardModifiers modif
qtKey = xkbcommon_xkb_keysym_to_upper(keysym); qtKey = xkbcommon_xkb_keysym_to_upper(keysym);
} else { } else {
// check if we have a direct mapping // check if we have a direct mapping
int i = 0; xkb2qt_t searchKey{keysym, 0};
while (KeyTbl[i]) { auto it = std::lower_bound(KeyTbl.cbegin(), KeyTbl.cend(), searchKey);
if (keysym == KeyTbl[i]) { if (it != KeyTbl.end() && !(searchKey < *it))
qtKey = KeyTbl[i + 1]; qtKey = it->qt;
break;
}
i += 2;
}
} }
QString text; QString text;