Index: ui/events/event_utils.cc |
diff --git a/ui/events/event_utils.cc b/ui/events/event_utils.cc |
index 021ac278708168b8344b3f1ca5364c239ee0a27a..c775e10957a447c73b8668a9b67007686102a004 100644 |
--- a/ui/events/event_utils.cc |
+++ b/ui/events/event_utils.cc |
@@ -63,6 +63,53 @@ scoped_ptr<Event> EventFromNative(const base::NativeEvent& native_event) { |
return event.Pass(); |
} |
+#if defined(OS_LINUX) |
+// From third_party/WebKit/Source/web/gtk/WebInputEventFactory.cpp: |
+uint16 GetControlCharacterForKeycode(int windows_key_code, bool shift) { |
+ if (windows_key_code >= ui::VKEY_A && |
+ windows_key_code <= ui::VKEY_Z) { |
+ // ctrl-A ~ ctrl-Z map to \x01 ~ \x1A |
+ return windows_key_code - ui::VKEY_A + 1; |
+ } |
+ if (shift) { |
+ // following graphics chars require shift key to input. |
+ switch (windows_key_code) { |
+ // ctrl-@ maps to \x00 (Null byte) |
+ case ui::VKEY_2: |
+ return 0; |
+ // ctrl-^ maps to \x1E (Record separator, Information separator two) |
+ case ui::VKEY_6: |
+ return 0x1E; |
+ // ctrl-_ maps to \x1F (Unit separator, Information separator one) |
+ case ui::VKEY_OEM_MINUS: |
+ return 0x1F; |
+ // Returns 0 for all other keys to avoid inputting unexpected chars. |
+ default: |
+ break; |
+ } |
+ } else { |
+ switch (windows_key_code) { |
+ // ctrl-[ maps to \x1B (Escape) |
+ case ui::VKEY_OEM_4: |
+ return 0x1B; |
+ // ctrl-\ maps to \x1C (File separator, Information separator four) |
+ case ui::VKEY_OEM_5: |
+ return 0x1C; |
+ // ctrl-] maps to \x1D (Group separator, Information separator three) |
+ case ui::VKEY_OEM_6: |
+ return 0x1D; |
+ // ctrl-Enter maps to \x0A (Line feed) |
+ case ui::VKEY_RETURN: |
+ return 0x0A; |
+ // Returns 0 for all other keys to avoid inputting unexpected chars. |
+ default: |
+ break; |
+ } |
+ } |
+ return 0; |
+} |
+#endif |
+ |
int RegisterCustomEventType() { |
return ++g_custom_event_types; |
} |