Chromium Code Reviews| Index: ui/events/event.cc |
| diff --git a/ui/events/event.cc b/ui/events/event.cc |
| index f10c2081dfc69d72f947c832866eeb547b7120bb..42ea7d4bdb2f649df7cd72a6e596d0bb11238fde 100644 |
| --- a/ui/events/event.cc |
| +++ b/ui/events/event.cc |
| @@ -479,6 +479,35 @@ void TouchEvent::UpdateForRootTransform( |
| //////////////////////////////////////////////////////////////////////////////// |
| // KeyEvent |
| +// static |
| +KeyEvent* KeyEvent::last_key_event_ = NULL; |
| + |
| +// static |
| +bool KeyEvent::IsRepeated(const KeyEvent& event) { |
| + // A safe guard in case if there were continous key pressed events that are |
| + // not auto repeat. |
| + const int kMaxAutoRepeatTimeMs = 2000; |
| + |
| + if (event.type() == ui::ET_KEY_RELEASED) { |
| + delete last_key_event_; |
| + last_key_event_ = NULL; |
| + return false; |
| + } |
| + if (!last_key_event_) { |
|
sadrul
2014/05/30 20:38:09
Maybe do a CHECK() here that type is PRESSED (and
oshima
2014/05/30 23:44:23
Done.
|
| + last_key_event_ = new KeyEvent(event); |
| + return false; |
| + } |
| + if (event.key_code() == last_key_event_->key_code() && |
| + event.flags() == last_key_event_->flags() && |
| + (event.time_stamp() - last_key_event_->time_stamp()).InMilliseconds() < |
| + kMaxAutoRepeatTimeMs) { |
| + return true; |
| + } |
| + delete last_key_event_; |
| + last_key_event_ = new KeyEvent(event); |
| + return false; |
| +} |
| + |
| KeyEvent::KeyEvent(const base::NativeEvent& native_event, bool is_char) |
| : Event(native_event, |
| EventTypeFromNative(native_event), |
| @@ -487,6 +516,9 @@ KeyEvent::KeyEvent(const base::NativeEvent& native_event, bool is_char) |
| code_(CodeFromNative(native_event)), |
| is_char_(is_char), |
| character_(0) { |
| + if (IsRepeated(*this)) |
| + set_flags(flags() | ui::EF_IS_REPEAT); |
| + |
| #if defined(USE_X11) |
| NormalizeFlags(); |
| #endif |