From 19342cb9b960c533bf972501dc4918c3af860678 Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Fri, 2 Jul 2010 11:15:15 +0900 Subject: [PATCH] Bug572385 some special keys (e.g., IME related keys) can't be handled on Linux r=masayuki, sr=smaug --- dom/interfaces/events/nsIDOMKeyEvent.idl | 14 ++++++++++++++ widget/public/nsGUIEvent.h | 14 ++++++++++++++ widget/src/gtk2/nsGtkKeyUtils.cpp | 20 ++++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/dom/interfaces/events/nsIDOMKeyEvent.idl b/dom/interfaces/events/nsIDOMKeyEvent.idl index 395ba0545094..c0ed1dfc59aa 100644 --- a/dom/interfaces/events/nsIDOMKeyEvent.idl +++ b/dom/interfaces/events/nsIDOMKeyEvent.idl @@ -54,7 +54,17 @@ interface nsIDOMKeyEvent : nsIDOMUIEvent const unsigned long DOM_VK_ALT = 0x12; const unsigned long DOM_VK_PAUSE = 0x13; const unsigned long DOM_VK_CAPS_LOCK = 0x14; + const unsigned long DOM_VK_KANA = 0x15; + const unsigned long DOM_VK_HANGUL = 0x15; + const unsigned long DOM_VK_JUNJA = 0x17; + const unsigned long DOM_VK_FINAL = 0x18; + const unsigned long DOM_VK_HANJA = 0x19; + const unsigned long DOM_VK_KANJI = 0x19; const unsigned long DOM_VK_ESCAPE = 0x1B; + const unsigned long DOM_VK_CONVERT = 0x1C; + const unsigned long DOM_VK_NONCONVERT = 0x1D; + const unsigned long DOM_VK_ACCEPT = 0x1E; + const unsigned long DOM_VK_MODECHANGE = 0x1F; const unsigned long DOM_VK_SPACE = 0x20; const unsigned long DOM_VK_PAGE_UP = 0x21; const unsigned long DOM_VK_PAGE_DOWN = 0x22; @@ -64,6 +74,9 @@ interface nsIDOMKeyEvent : nsIDOMUIEvent const unsigned long DOM_VK_UP = 0x26; const unsigned long DOM_VK_RIGHT = 0x27; const unsigned long DOM_VK_DOWN = 0x28; + const unsigned long DOM_VK_SELECT = 0x29; + const unsigned long DOM_VK_PRINT = 0x2A; + const unsigned long DOM_VK_EXECUTE = 0x2B; const unsigned long DOM_VK_PRINTSCREEN = 0x2C; const unsigned long DOM_VK_INSERT = 0x2D; const unsigned long DOM_VK_DELETE = 0x2E; @@ -112,6 +125,7 @@ interface nsIDOMKeyEvent : nsIDOMUIEvent const unsigned long DOM_VK_Z = 0x5A; const unsigned long DOM_VK_CONTEXT_MENU = 0x5D; + const unsigned long DOM_VK_SLEEP = 0x5F; const unsigned long DOM_VK_NUMPAD0 = 0x60; const unsigned long DOM_VK_NUMPAD1 = 0x61; diff --git a/widget/public/nsGUIEvent.h b/widget/public/nsGUIEvent.h index db960af66ca8..acb3d82c3a3e 100644 --- a/widget/public/nsGUIEvent.h +++ b/widget/public/nsGUIEvent.h @@ -1489,7 +1489,17 @@ enum nsDragDropEventStatus { #define NS_VK_ALT nsIDOMKeyEvent::DOM_VK_ALT #define NS_VK_PAUSE nsIDOMKeyEvent::DOM_VK_PAUSE #define NS_VK_CAPS_LOCK nsIDOMKeyEvent::DOM_VK_CAPS_LOCK +#define NS_VK_KANA nsIDOMKeyEvent::DOM_VK_KANA +#define NS_VK_HANGUL nsIDOMKeyEvent::DOM_VK_HANGUL +#define NS_VK_JUNJA nsIDOMKeyEvent::DOM_VK_JUNJA +#define NS_VK_FINAL nsIDOMKeyEvent::DOM_VK_FINAL +#define NS_VK_HANJA nsIDOMKeyEvent::DOM_VK_HANJA +#define NS_VK_KANJI nsIDOMKeyEvent::DOM_VK_KANJI #define NS_VK_ESCAPE nsIDOMKeyEvent::DOM_VK_ESCAPE +#define NS_VK_CONVERT nsIDOMKeyEvent::DOM_VK_CONVERT +#define NS_VK_NONCONVERT nsIDOMKeyEvent::DOM_VK_NONCONVERT +#define NS_VK_ACCEPT nsIDOMKeyEvent::DOM_VK_ACCEPT +#define NS_VK_MODECHANGE nsIDOMKeyEvent::DOM_VK_MODECHANGE #define NS_VK_SPACE nsIDOMKeyEvent::DOM_VK_SPACE #define NS_VK_PAGE_UP nsIDOMKeyEvent::DOM_VK_PAGE_UP #define NS_VK_PAGE_DOWN nsIDOMKeyEvent::DOM_VK_PAGE_DOWN @@ -1499,6 +1509,9 @@ enum nsDragDropEventStatus { #define NS_VK_UP nsIDOMKeyEvent::DOM_VK_UP #define NS_VK_RIGHT nsIDOMKeyEvent::DOM_VK_RIGHT #define NS_VK_DOWN nsIDOMKeyEvent::DOM_VK_DOWN +#define NS_VK_SELECT nsIDOMKeyEvent::DOM_VK_SELECT +#define NS_VK_PRINT nsIDOMKeyEvent::DOM_VK_PRINT +#define NS_VK_EXECUTE nsIDOMKeyEvent::DOM_VK_EXECUTE #define NS_VK_PRINTSCREEN nsIDOMKeyEvent::DOM_VK_PRINTSCREEN #define NS_VK_INSERT nsIDOMKeyEvent::DOM_VK_INSERT #define NS_VK_DELETE nsIDOMKeyEvent::DOM_VK_DELETE @@ -1547,6 +1560,7 @@ enum nsDragDropEventStatus { #define NS_VK_Z nsIDOMKeyEvent::DOM_VK_Z #define NS_VK_CONTEXT_MENU nsIDOMKeyEvent::DOM_VK_CONTEXT_MENU +#define NS_VK_SLEEP nsIDOMKeyEvent::DOM_VK_SLEEP #define NS_VK_NUMPAD0 nsIDOMKeyEvent::DOM_VK_NUMPAD0 #define NS_VK_NUMPAD1 nsIDOMKeyEvent::DOM_VK_NUMPAD1 diff --git a/widget/src/gtk2/nsGtkKeyUtils.cpp b/widget/src/gtk2/nsGtkKeyUtils.cpp index c0c4a0832c5e..770a49144e99 100644 --- a/widget/src/gtk2/nsGtkKeyUtils.cpp +++ b/widget/src/gtk2/nsGtkKeyUtils.cpp @@ -38,6 +38,10 @@ * ***** END LICENSE BLOCK ***** */ #include +#ifndef GDK_Sleep +#define GDK_Sleep 0x1008ff2f +#endif + #include #ifdef MOZ_X11 #include @@ -71,7 +75,18 @@ struct nsKeyConverter nsKeycodes[] = { { NS_VK_META, GDK_Meta_R }, { NS_VK_PAUSE, GDK_Pause }, { NS_VK_CAPS_LOCK, GDK_Caps_Lock }, + { NS_VK_KANA, GDK_Kana_Lock }, + { NS_VK_KANA, GDK_Kana_Shift }, + { NS_VK_HANGUL, GDK_Hangul }, + // { NS_VK_JUNJA, GDK_XXX }, + // { NS_VK_FINAL, GDK_XXX }, + { NS_VK_HANJA, GDK_Hangul_Hanja }, + { NS_VK_KANJI, GDK_Kanji }, { NS_VK_ESCAPE, GDK_Escape }, + { NS_VK_CONVERT, GDK_Henkan }, + { NS_VK_NONCONVERT, GDK_Muhenkan }, + // { NS_VK_ACCEPT, GDK_XXX }, + { NS_VK_MODECHANGE, GDK_Mode_switch }, { NS_VK_SPACE, GDK_space }, { NS_VK_PAGE_UP, GDK_Page_Up }, { NS_VK_PAGE_DOWN, GDK_Page_Down }, @@ -81,9 +96,13 @@ struct nsKeyConverter nsKeycodes[] = { { NS_VK_UP, GDK_Up }, { NS_VK_RIGHT, GDK_Right }, { NS_VK_DOWN, GDK_Down }, + { NS_VK_SELECT, GDK_Select }, + { NS_VK_PRINT, GDK_Print }, + { NS_VK_EXECUTE, GDK_Execute }, { NS_VK_PRINTSCREEN, GDK_Print }, { NS_VK_INSERT, GDK_Insert }, { NS_VK_DELETE, GDK_Delete }, + { NS_VK_HELP, GDK_Help }, // keypad keys { NS_VK_LEFT, GDK_KP_Left }, @@ -125,6 +144,7 @@ struct nsKeyConverter nsKeycodes[] = { // context menu key, keysym 0xff67, typically keycode 117 on 105-key (Microsoft) // x86 keyboards, located between right 'Windows' key and right Ctrl key { NS_VK_CONTEXT_MENU, GDK_Menu }, + { NS_VK_SLEEP, GDK_Sleep }, // NS doesn't have dash or equals distinct from the numeric keypad ones, // so we'll use those for now. See bug 17008: