| OLD | NEW | 
|    1 // Copyright 2013 The Chromium Authors. All rights reserved. |    1 // Copyright 2013 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #include "chrome/browser/ui/libgtk2ui/x11_input_method_context_impl_gtk2.h" |    5 #include "chrome/browser/ui/libgtk2ui/x11_input_method_context_impl_gtk2.h" | 
|    6  |    6  | 
|    7 #include <gdk/gdk.h> |    7 #include <gdk/gdk.h> | 
|    8 #include <gdk/gdkkeysyms.h> |    8 #include <gdk/gdkkeysyms.h> | 
|    9 #include <gdk/gdkx.h> |    9 #include <gdk/gdkx.h> | 
|   10  |   10  | 
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  146  |  146  | 
|  147 // private: |  147 // private: | 
|  148  |  148  | 
|  149 void X11InputMethodContextImplGtk2::ResetXModifierKeycodesCache() { |  149 void X11InputMethodContextImplGtk2::ResetXModifierKeycodesCache() { | 
|  150   modifier_keycodes_.clear(); |  150   modifier_keycodes_.clear(); | 
|  151   meta_keycodes_.clear(); |  151   meta_keycodes_.clear(); | 
|  152   super_keycodes_.clear(); |  152   super_keycodes_.clear(); | 
|  153   hyper_keycodes_.clear(); |  153   hyper_keycodes_.clear(); | 
|  154  |  154  | 
|  155   Display* display = gfx::GetXDisplay(); |  155   Display* display = gfx::GetXDisplay(); | 
|  156   const XModifierKeymap* modmap = XGetModifierMapping(display); |  156   gfx::XScopedPtr<XModifierKeymap, | 
 |  157                   gfx::XObjectDeleter<XModifierKeymap, int, XFreeModifiermap>> | 
 |  158       modmap(XGetModifierMapping(display)); | 
|  157   int min_keycode = 0; |  159   int min_keycode = 0; | 
|  158   int max_keycode = 0; |  160   int max_keycode = 0; | 
|  159   int keysyms_per_keycode = 1; |  161   int keysyms_per_keycode = 1; | 
|  160   XDisplayKeycodes(display, &min_keycode, &max_keycode); |  162   XDisplayKeycodes(display, &min_keycode, &max_keycode); | 
|  161   const KeySym* keysyms = XGetKeyboardMapping( |  163   gfx::XScopedPtr<KeySym[]> keysyms( | 
|  162       display, min_keycode, max_keycode - min_keycode + 1, |  164       XGetKeyboardMapping(display, min_keycode, max_keycode - min_keycode + 1, | 
|  163       &keysyms_per_keycode); |  165                           &keysyms_per_keycode)); | 
|  164   for (int i = 0; i < 8 * modmap->max_keypermod; ++i) { |  166   for (int i = 0; i < 8 * modmap->max_keypermod; ++i) { | 
|  165     const int keycode = modmap->modifiermap[i]; |  167     const int keycode = modmap->modifiermap[i]; | 
|  166     if (!keycode) |  168     if (!keycode) | 
|  167       continue; |  169       continue; | 
|  168     modifier_keycodes_.insert(keycode); |  170     modifier_keycodes_.insert(keycode); | 
|  169  |  171  | 
|  170     if (!keysyms) |  172     if (!keysyms) | 
|  171       continue; |  173       continue; | 
|  172     for (int j = 0; j < keysyms_per_keycode; ++j) { |  174     for (int j = 0; j < keysyms_per_keycode; ++j) { | 
|  173       switch (keysyms[(keycode - min_keycode) * keysyms_per_keycode + j]) { |  175       switch (keysyms[(keycode - min_keycode) * keysyms_per_keycode + j]) { | 
|  174         case XK_Meta_L: |  176         case XK_Meta_L: | 
|  175         case XK_Meta_R: |  177         case XK_Meta_R: | 
|  176           meta_keycodes_.push_back(keycode); |  178           meta_keycodes_.push_back(keycode); | 
|  177           break; |  179           break; | 
|  178         case XK_Super_L: |  180         case XK_Super_L: | 
|  179         case XK_Super_R: |  181         case XK_Super_R: | 
|  180           super_keycodes_.push_back(keycode); |  182           super_keycodes_.push_back(keycode); | 
|  181           break; |  183           break; | 
|  182         case XK_Hyper_L: |  184         case XK_Hyper_L: | 
|  183         case XK_Hyper_R: |  185         case XK_Hyper_R: | 
|  184           hyper_keycodes_.push_back(keycode); |  186           hyper_keycodes_.push_back(keycode); | 
|  185           break; |  187           break; | 
|  186       } |  188       } | 
|  187     } |  189     } | 
|  188   } |  190   } | 
|  189   XFree(const_cast<KeySym*>(keysyms)); |  | 
|  190   XFreeModifiermap(const_cast<XModifierKeymap*>(modmap)); |  | 
|  191 } |  191 } | 
|  192  |  192  | 
|  193 GdkEvent* X11InputMethodContextImplGtk2::GdkEventFromNativeEvent( |  193 GdkEvent* X11InputMethodContextImplGtk2::GdkEventFromNativeEvent( | 
|  194     const base::NativeEvent& native_event) { |  194     const base::NativeEvent& native_event) { | 
|  195   XEvent xkeyevent; |  195   XEvent xkeyevent; | 
|  196   if (native_event->type == GenericEvent) { |  196   if (native_event->type == GenericEvent) { | 
|  197     // If this is an XI2 key event, build a matching core X event, to avoid |  197     // If this is an XI2 key event, build a matching core X event, to avoid | 
|  198     // having two cases for every use. |  198     // having two cases for every use. | 
|  199     ui::InitXKeyEventFromXIDeviceEvent(*native_event, &xkeyevent); |  199     ui::InitXKeyEventFromXIDeviceEvent(*native_event, &xkeyevent); | 
|  200   } else { |  200   } else { | 
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  381       text.length() == 1 && |  381       text.length() == 1 && | 
|  382       text[0] == gdk_keyval_to_unicode(gdk_event_key_keyval_)) { |  382       text[0] == gdk_keyval_to_unicode(gdk_event_key_keyval_)) { | 
|  383     is_signal_caught_ = true; |  383     is_signal_caught_ = true; | 
|  384     return true; |  384     return true; | 
|  385   } else { |  385   } else { | 
|  386     return false; |  386     return false; | 
|  387   } |  387   } | 
|  388 } |  388 } | 
|  389  |  389  | 
|  390 }  // namespace libgtk2ui |  390 }  // namespace libgtk2ui | 
| OLD | NEW |