Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(205)

Side by Side Diff: chrome/browser/ui/libgtk2ui/x11_input_method_context_impl_gtk2.cc

Issue 989993002: x11: Use scoped_ptr<> for X11 objects where it makes sense. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « ash/wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_x11.cc ('k') | content/common/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698