Index: ui/events/event.cc |
diff --git a/ui/events/event.cc b/ui/events/event.cc |
index 5e7d8c86377a4d6a7c5546dcde02b6a76e6c71d4..2054ce3b17861688933a3c4535620b340add8e24 100644 |
--- a/ui/events/event.cc |
+++ b/ui/events/event.cc |
@@ -645,12 +645,16 @@ bool KeyEvent::IsRepeated(const KeyEvent& event) { |
if (!last_key_event_) { |
last_key_event_ = new KeyEvent(event); |
return false; |
+ } else if (event.time_stamp() == last_key_event_->time_stamp()) { |
+ // The KeyEvent is created from the same native event. |
+ return (last_key_event_->flags() & ui::EF_IS_REPEAT) != 0; |
} |
if (event.key_code() == last_key_event_->key_code() && |
- event.flags() == last_key_event_->flags() && |
+ event.flags() == (last_key_event_->flags() & ~ui::EF_IS_REPEAT) && |
(event.time_stamp() - last_key_event_->time_stamp()).InMilliseconds() < |
- kMaxAutoRepeatTimeMs) { |
+ kMaxAutoRepeatTimeMs) { |
last_key_event_->set_time_stamp(event.time_stamp()); |
+ last_key_event_->set_flags(last_key_event_->flags() | ui::EF_IS_REPEAT); |
return true; |
} |
delete last_key_event_; |