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

Side by Side Diff: ui/events/event.cc

Issue 336403005: Use XInput2 events for keyboard events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments (sadrul) 3 Created 6 years, 5 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
« no previous file with comments | « ui/events/event.h ('k') | ui/events/event_constants.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/events/event.h" 5 #include "ui/events/event.h"
6 6
7 #if defined(USE_X11) 7 #if defined(USE_X11)
8 #include <X11/extensions/XInput2.h> 8 #include <X11/extensions/XInput2.h>
9 #include <X11/Xlib.h> 9 #include <X11/Xlib.h>
10 #endif 10 #endif
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 140
141 Event::Event(EventType type, base::TimeDelta time_stamp, int flags) 141 Event::Event(EventType type, base::TimeDelta time_stamp, int flags)
142 : type_(type), 142 : type_(type),
143 time_stamp_(time_stamp), 143 time_stamp_(time_stamp),
144 flags_(flags), 144 flags_(flags),
145 native_event_(base::NativeEvent()), 145 native_event_(base::NativeEvent()),
146 delete_native_event_(false), 146 delete_native_event_(false),
147 cancelable_(true), 147 cancelable_(true),
148 target_(NULL), 148 target_(NULL),
149 phase_(EP_PREDISPATCH), 149 phase_(EP_PREDISPATCH),
150 result_(ER_UNHANDLED) { 150 result_(ER_UNHANDLED),
151 source_device_id_(ED_UNKNOWN_DEVICE) {
151 if (type_ < ET_LAST) 152 if (type_ < ET_LAST)
152 name_ = EventTypeName(type_); 153 name_ = EventTypeName(type_);
153 } 154 }
154 155
155 Event::Event(const base::NativeEvent& native_event, 156 Event::Event(const base::NativeEvent& native_event,
156 EventType type, 157 EventType type,
157 int flags) 158 int flags)
158 : type_(type), 159 : type_(type),
159 time_stamp_(EventTimeFromNative(native_event)), 160 time_stamp_(EventTimeFromNative(native_event)),
160 flags_(flags), 161 flags_(flags),
161 native_event_(native_event), 162 native_event_(native_event),
162 delete_native_event_(false), 163 delete_native_event_(false),
163 cancelable_(true), 164 cancelable_(true),
164 target_(NULL), 165 target_(NULL),
165 phase_(EP_PREDISPATCH), 166 phase_(EP_PREDISPATCH),
166 result_(ER_UNHANDLED) { 167 result_(ER_UNHANDLED),
168 source_device_id_(ED_UNKNOWN_DEVICE) {
167 base::TimeDelta delta = EventTimeForNow() - time_stamp_; 169 base::TimeDelta delta = EventTimeForNow() - time_stamp_;
168 if (type_ < ET_LAST) 170 if (type_ < ET_LAST)
169 name_ = EventTypeName(type_); 171 name_ = EventTypeName(type_);
170 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.Browser", 172 UMA_HISTOGRAM_CUSTOM_COUNTS("Event.Latency.Browser",
171 delta.InMicroseconds(), 1, 1000000, 100); 173 delta.InMicroseconds(), 1, 1000000, 100);
172 std::string name_for_event = 174 std::string name_for_event =
173 base::StringPrintf("Event.Latency.Browser.%s", name_.c_str()); 175 base::StringPrintf("Event.Latency.Browser.%s", name_.c_str());
174 base::HistogramBase* counter_for_type = 176 base::HistogramBase* counter_for_type =
175 base::Histogram::FactoryGet( 177 base::Histogram::FactoryGet(
176 name_for_event, 178 name_for_event,
177 1, 179 1,
178 1000000, 180 1000000,
179 100, 181 100,
180 base::HistogramBase::kUmaTargetedHistogramFlag); 182 base::HistogramBase::kUmaTargetedHistogramFlag);
181 counter_for_type->Add(delta.InMicroseconds()); 183 counter_for_type->Add(delta.InMicroseconds());
184
185 #if defined(USE_X11)
186 if (native_event->type == GenericEvent) {
187 XIDeviceEvent* xiev =
188 static_cast<XIDeviceEvent*>(native_event->xcookie.data);
189 source_device_id_ = xiev->deviceid;
190 }
191 #endif
182 } 192 }
183 193
184 Event::Event(const Event& copy) 194 Event::Event(const Event& copy)
185 : type_(copy.type_), 195 : type_(copy.type_),
186 time_stamp_(copy.time_stamp_), 196 time_stamp_(copy.time_stamp_),
187 latency_(copy.latency_), 197 latency_(copy.latency_),
188 flags_(copy.flags_), 198 flags_(copy.flags_),
189 native_event_(CopyNativeEvent(copy.native_event_)), 199 native_event_(CopyNativeEvent(copy.native_event_)),
190 delete_native_event_(true), 200 delete_native_event_(true),
191 cancelable_(true), 201 cancelable_(true),
192 target_(NULL), 202 target_(NULL),
193 phase_(EP_PREDISPATCH), 203 phase_(EP_PREDISPATCH),
194 result_(ER_UNHANDLED) { 204 result_(ER_UNHANDLED),
205 source_device_id_(copy.source_device_id_) {
195 if (type_ < ET_LAST) 206 if (type_ < ET_LAST)
196 name_ = EventTypeName(type_); 207 name_ = EventTypeName(type_);
197 } 208 }
198 209
199 void Event::SetType(EventType type) { 210 void Event::SetType(EventType type) {
200 if (type_ < ET_LAST) 211 if (type_ < ET_LAST)
201 name_ = std::string(); 212 name_ = std::string();
202 type_ = type; 213 type_ = type;
203 if (type_ < ET_LAST) 214 if (type_ < ET_LAST)
204 name_ = EventTypeName(type_); 215 name_ = EventTypeName(type_);
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 432
422 //////////////////////////////////////////////////////////////////////////////// 433 ////////////////////////////////////////////////////////////////////////////////
423 // TouchEvent 434 // TouchEvent
424 435
425 TouchEvent::TouchEvent(const base::NativeEvent& native_event) 436 TouchEvent::TouchEvent(const base::NativeEvent& native_event)
426 : LocatedEvent(native_event), 437 : LocatedEvent(native_event),
427 touch_id_(GetTouchId(native_event)), 438 touch_id_(GetTouchId(native_event)),
428 radius_x_(GetTouchRadiusX(native_event)), 439 radius_x_(GetTouchRadiusX(native_event)),
429 radius_y_(GetTouchRadiusY(native_event)), 440 radius_y_(GetTouchRadiusY(native_event)),
430 rotation_angle_(GetTouchAngle(native_event)), 441 rotation_angle_(GetTouchAngle(native_event)),
431 force_(GetTouchForce(native_event)), 442 force_(GetTouchForce(native_event)) {
432 source_device_id_(-1) {
433 latency()->AddLatencyNumberWithTimestamp( 443 latency()->AddLatencyNumberWithTimestamp(
434 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 444 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
435 0, 445 0,
436 0, 446 0,
437 base::TimeTicks::FromInternalValue(time_stamp().ToInternalValue()), 447 base::TimeTicks::FromInternalValue(time_stamp().ToInternalValue()),
438 1); 448 1);
439 449
440 #if defined(USE_X11)
441 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(native_event->xcookie.data);
442 source_device_id_ = xiev->deviceid;
443 #endif
444
445 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); 450 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
446 } 451 }
447 452
448 TouchEvent::TouchEvent(EventType type, 453 TouchEvent::TouchEvent(EventType type,
449 const gfx::PointF& location, 454 const gfx::PointF& location,
450 int touch_id, 455 int touch_id,
451 base::TimeDelta time_stamp) 456 base::TimeDelta time_stamp)
452 : LocatedEvent(type, location, location, time_stamp, 0), 457 : LocatedEvent(type, location, location, time_stamp, 0),
453 touch_id_(touch_id), 458 touch_id_(touch_id),
454 radius_x_(0.0f), 459 radius_x_(0.0f),
455 radius_y_(0.0f), 460 radius_y_(0.0f),
456 rotation_angle_(0.0f), 461 rotation_angle_(0.0f),
457 force_(0.0f), 462 force_(0.0f) {
458 source_device_id_(-1) {
459 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); 463 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
460 } 464 }
461 465
462 TouchEvent::TouchEvent(EventType type, 466 TouchEvent::TouchEvent(EventType type,
463 const gfx::PointF& location, 467 const gfx::PointF& location,
464 int flags, 468 int flags,
465 int touch_id, 469 int touch_id,
466 base::TimeDelta time_stamp, 470 base::TimeDelta time_stamp,
467 float radius_x, 471 float radius_x,
468 float radius_y, 472 float radius_y,
469 float angle, 473 float angle,
470 float force) 474 float force)
471 : LocatedEvent(type, location, location, time_stamp, flags), 475 : LocatedEvent(type, location, location, time_stamp, flags),
472 touch_id_(touch_id), 476 touch_id_(touch_id),
473 radius_x_(radius_x), 477 radius_x_(radius_x),
474 radius_y_(radius_y), 478 radius_y_(radius_y),
475 rotation_angle_(angle), 479 rotation_angle_(angle),
476 force_(force), 480 force_(force) {
477 source_device_id_(-1) {
478 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); 481 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
479 } 482 }
480 483
481 TouchEvent::~TouchEvent() { 484 TouchEvent::~TouchEvent() {
482 // In ctor TouchEvent(native_event) we call GetTouchId() which in X11 485 // In ctor TouchEvent(native_event) we call GetTouchId() which in X11
483 // platform setups the tracking_id to slot mapping. So in dtor here, 486 // platform setups the tracking_id to slot mapping. So in dtor here,
484 // if this touch event is a release event, we clear the mapping accordingly. 487 // if this touch event is a release event, we clear the mapping accordingly.
485 if (HasNativeEvent()) 488 if (HasNativeEvent())
486 ClearTouchIdIfReleased(native_event()); 489 ClearTouchIdIfReleased(native_event());
487 } 490 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 return character_; 586 return character_;
584 587
585 #if defined(OS_WIN) 588 #if defined(OS_WIN)
586 return (native_event().message == WM_CHAR) ? key_code_ : 589 return (native_event().message == WM_CHAR) ? key_code_ :
587 GetCharacterFromKeyCode(key_code_, flags()); 590 GetCharacterFromKeyCode(key_code_, flags());
588 #elif defined(USE_X11) 591 #elif defined(USE_X11)
589 if (!native_event()) 592 if (!native_event())
590 return GetCharacterFromKeyCode(key_code_, flags()); 593 return GetCharacterFromKeyCode(key_code_, flags());
591 594
592 DCHECK(native_event()->type == KeyPress || 595 DCHECK(native_event()->type == KeyPress ||
593 native_event()->type == KeyRelease); 596 native_event()->type == KeyRelease ||
597 (native_event()->type == GenericEvent &&
598 (native_event()->xgeneric.evtype == XI_KeyPress ||
599 native_event()->xgeneric.evtype == XI_KeyRelease)));
594 600
595 // When a control key is held, prefer ASCII characters to non ASCII 601 // When a control key is held, prefer ASCII characters to non ASCII
596 // characters in order to use it for shortcut keys. GetCharacterFromKeyCode 602 // characters in order to use it for shortcut keys. GetCharacterFromKeyCode
597 // returns 'a' for VKEY_A even if the key is actually bound to 'à' in X11. 603 // returns 'a' for VKEY_A even if the key is actually bound to 'à' in X11.
598 // GetCharacterFromXEvent returns 'à' in that case. 604 // GetCharacterFromXEvent returns 'à' in that case.
599 return IsControlDown() ? 605 return IsControlDown() ?
600 GetCharacterFromKeyCode(key_code_, flags()) : 606 GetCharacterFromKeyCode(key_code_, flags()) :
601 GetCharacterFromXEvent(native_event()); 607 GetCharacterFromXEvent(native_event());
602 #else 608 #else
603 if (native_event()) { 609 if (native_event()) {
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 int GestureEvent::GetLowestTouchId() const { 761 int GestureEvent::GetLowestTouchId() const {
756 if (touch_ids_bitfield_ == 0) 762 if (touch_ids_bitfield_ == 0)
757 return -1; 763 return -1;
758 int i = -1; 764 int i = -1;
759 // Find the index of the least significant 1 bit 765 // Find the index of the least significant 1 bit
760 while (!(1 << ++i & touch_ids_bitfield_)); 766 while (!(1 << ++i & touch_ids_bitfield_));
761 return i; 767 return i;
762 } 768 }
763 769
764 } // namespace ui 770 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/event.h ('k') | ui/events/event_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698