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

Side by Side Diff: views/events/event_x.cc

Issue 6713027: Add GetCharacter() and GetUnmodifiedCharacter() methods to views::Event. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "views/events/event.h" 5 #include "views/events/event.h"
6 6
7 #include <gdk/gdk.h>
7 #include <gdk/gdkx.h> 8 #include <gdk/gdkx.h>
8 #if defined(HAVE_XINPUT2) 9 #if defined(HAVE_XINPUT2)
9 #include <X11/extensions/XInput2.h> 10 #include <X11/extensions/XInput2.h>
10 #endif 11 #endif
12 #include <X11/Xlib.h>
11 13
14 #include "base/utf_string_conversions.h"
12 #include "ui/base/keycodes/keyboard_code_conversion_x.h" 15 #include "ui/base/keycodes/keyboard_code_conversion_x.h"
13 #include "views/widget/root_view.h" 16 #include "views/widget/root_view.h"
14 #include "views/widget/widget_gtk.h" 17 #include "views/widget/widget_gtk.h"
15 18
16 namespace views { 19 namespace views {
17 20
18 namespace { 21 namespace {
19 22
20 // Scroll amount for each wheelscroll event. 53 is also the value used for GTK+. 23 // Scroll amount for each wheelscroll event. 53 is also the value used for GTK+.
21 static int kWheelScrollAmount = 53; 24 static int kWheelScrollAmount = 53;
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 return GetButtonMaskForX2Event(xievent) | 209 return GetButtonMaskForX2Event(xievent) |
207 GetEventFlagsFromXState(xievent->mods.effective); 210 GetEventFlagsFromXState(xievent->mods.effective);
208 } 211 }
209 } 212 }
210 #endif 213 #endif
211 } 214 }
212 215
213 return 0; 216 return 0;
214 } 217 }
215 218
219 uint16 GetCharacterFromXKeyEvent(XKeyEvent* key) {
220 char buf[7];
Yusuke Sato 2011/03/18 12:07:41 I guess it should be either [6]; or [7] = {};
James Su 2011/03/18 15:54:09 Done.
221 int bytes_written = XLookupString(key, buf, 6, NULL, NULL);
222 DCHECK(bytes_written <= 6);
223
224 string16 result;
225 return (bytes_written > 0 && UTF8ToUTF16(buf, bytes_written, &result) &&
226 result.length() == 1) ? result[0] : 0;
227 }
228
216 } // namespace 229 } // namespace
217 230
218 //////////////////////////////////////////////////////////////////////////////// 231 ////////////////////////////////////////////////////////////////////////////////
219 // Event, private: 232 // Event, private:
220 233
221 void Event::InitWithNativeEvent2(NativeEvent2 native_event_2, 234 void Event::InitWithNativeEvent2(NativeEvent2 native_event_2,
222 FromNativeEvent2) { 235 FromNativeEvent2) {
223 native_event_ = NULL; 236 native_event_ = NULL;
224 // TODO(beng): remove once we rid views of Gtk/Gdk. 237 // TODO(beng): remove once we rid views of Gtk/Gdk.
225 native_event_2_ = native_event_2; 238 native_event_2_ = native_event_2;
(...skipping 15 matching lines...) Expand all
241 // KeyEvent, public: 254 // KeyEvent, public:
242 255
243 KeyEvent::KeyEvent(NativeEvent2 native_event_2, FromNativeEvent2 from_native) 256 KeyEvent::KeyEvent(NativeEvent2 native_event_2, FromNativeEvent2 from_native)
244 : Event(native_event_2, 257 : Event(native_event_2,
245 EventTypeFromNative(native_event_2), 258 EventTypeFromNative(native_event_2),
246 GetEventFlagsFromXState(native_event_2->xkey.state), 259 GetEventFlagsFromXState(native_event_2->xkey.state),
247 from_native), 260 from_native),
248 key_code_(ui::KeyboardCodeFromXKeyEvent(native_event_2)) { 261 key_code_(ui::KeyboardCodeFromXKeyEvent(native_event_2)) {
249 } 262 }
250 263
264 uint16 KeyEvent::GetCharacter() const {
265 if (!native_event_2())
Yusuke Sato 2011/03/18 12:07:41 when native_event_2() can be NULL?
266 return GetCharacterFromKeyCode(key_code_, flags());
267
268 DCHECK(native_event_2()->type == KeyPress ||
269 native_event_2()->type == KeyRelease);
270
271 uint16 ch = GetCharacterFromXKeyEvent(&native_event_2()->xkey);
272 return ch ? ch : GetCharacterFromKeyCode(key_code_, flags());
273 }
274
275 uint16 KeyEvent::GetUnmodifiedCharacter() const {
276 static const unsigned int kIgnoredModifiers = ControlMask | LockMask |
277 Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask;
278
279 if (!native_event_2())
Yusuke Sato 2011/03/18 12:07:41 ditto.
280 return GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN);
281
282 DCHECK(native_event_2()->type == KeyPress ||
283 native_event_2()->type == KeyRelease);
284
285 XKeyEvent key = native_event_2()->xkey;
286
287 // We can't use things like (key.state & ShiftMask), as it may mask out bits
288 // used by X11 internally.
289 key.state &= ~kIgnoredModifiers;
290 uint16 ch = GetCharacterFromXKeyEvent(&key);
291 return ch ? ch :
292 GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN);
293 }
294
251 //////////////////////////////////////////////////////////////////////////////// 295 ////////////////////////////////////////////////////////////////////////////////
252 // MouseEvent, public: 296 // MouseEvent, public:
253 297
254 MouseEvent::MouseEvent(NativeEvent2 native_event_2, 298 MouseEvent::MouseEvent(NativeEvent2 native_event_2,
255 FromNativeEvent2 from_native) 299 FromNativeEvent2 from_native)
256 : LocatedEvent(native_event_2, from_native) { 300 : LocatedEvent(native_event_2, from_native) {
257 } 301 }
258 302
259 //////////////////////////////////////////////////////////////////////////////// 303 ////////////////////////////////////////////////////////////////////////////////
260 // MouseWheelEvent, public: 304 // MouseWheelEvent, public:
(...skipping 11 matching lines...) Expand all
272 TouchEvent::TouchEvent(NativeEvent2 native_event_2, 316 TouchEvent::TouchEvent(NativeEvent2 native_event_2,
273 FromNativeEvent2 from_native) 317 FromNativeEvent2 from_native)
274 : LocatedEvent(GetTouchEventType(native_event_2), 318 : LocatedEvent(GetTouchEventType(native_event_2),
275 GetEventLocation(native_event_2), 319 GetEventLocation(native_event_2),
276 GetLocatedEventFlags(native_event_2, true)), 320 GetLocatedEventFlags(native_event_2, true)),
277 touch_id_(GetTouchIDFromXEvent(native_event_2)) { 321 touch_id_(GetTouchIDFromXEvent(native_event_2)) {
278 } 322 }
279 #endif 323 #endif
280 324
281 } // namespace views 325 } // namespace views
OLDNEW
« views/events/event_gtk.cc ('K') | « views/events/event_win.cc ('k') | views/views.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698