| OLD | NEW |
| 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 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 | 10 |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 } | 183 } |
| 184 | 184 |
| 185 bool IsX11SendEventTrue(const base::NativeEvent& event) { | 185 bool IsX11SendEventTrue(const base::NativeEvent& event) { |
| 186 #if defined(USE_X11) | 186 #if defined(USE_X11) |
| 187 return event && event->xany.send_event; | 187 return event && event->xany.send_event; |
| 188 #else | 188 #else |
| 189 return false; | 189 return false; |
| 190 #endif | 190 #endif |
| 191 } | 191 } |
| 192 | 192 |
| 193 #if defined(USE_X11) |
| 193 bool X11EventHasNonStandardState(const base::NativeEvent& event) { | 194 bool X11EventHasNonStandardState(const base::NativeEvent& event) { |
| 194 #if defined(USE_X11) | |
| 195 const unsigned int kAllStateMask = | 195 const unsigned int kAllStateMask = |
| 196 Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask | | 196 Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask | |
| 197 Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask | ShiftMask | | 197 Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask | ShiftMask | |
| 198 LockMask | ControlMask | AnyModifier; | 198 LockMask | ControlMask | AnyModifier; |
| 199 |
| 199 return event && (event->xkey.state & ~kAllStateMask) != 0; | 200 return event && (event->xkey.state & ~kAllStateMask) != 0; |
| 200 #else | 201 } |
| 201 return false; | |
| 202 #endif | 202 #endif |
| 203 } | |
| 204 | 203 |
| 205 } // namespace | 204 } // namespace |
| 206 | 205 |
| 207 //////////////////////////////////////////////////////////////////////////////// | 206 //////////////////////////////////////////////////////////////////////////////// |
| 208 // Event | 207 // Event |
| 209 | 208 |
| 210 // static | 209 // static |
| 211 std::unique_ptr<Event> Event::Clone(const Event& event) { | 210 std::unique_ptr<Event> Event::Clone(const Event& event) { |
| 212 if (event.IsKeyEvent()) { | 211 if (event.IsKeyEvent()) { |
| 213 return base::MakeUnique<KeyEvent>(static_cast<const KeyEvent&>(event)); | 212 return base::MakeUnique<KeyEvent>(static_cast<const KeyEvent&>(event)); |
| (...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1077 else if (type == ET_POINTER_WHEEL_CHANGED) | 1076 else if (type == ET_POINTER_WHEEL_CHANGED) |
| 1078 latency()->set_source_event_type(ui::SourceEventType::WHEEL); | 1077 latency()->set_source_event_type(ui::SourceEventType::WHEEL); |
| 1079 else | 1078 else |
| 1080 latency()->set_source_event_type(ui::SourceEventType::OTHER); | 1079 latency()->set_source_event_type(ui::SourceEventType::OTHER); |
| 1081 } | 1080 } |
| 1082 | 1081 |
| 1083 //////////////////////////////////////////////////////////////////////////////// | 1082 //////////////////////////////////////////////////////////////////////////////// |
| 1084 // KeyEvent | 1083 // KeyEvent |
| 1085 | 1084 |
| 1086 // static | 1085 // static |
| 1087 KeyEvent* KeyEvent::last_key_event_ = NULL; | 1086 KeyEvent* KeyEvent::last_key_event_ = nullptr; |
| 1087 #if defined(USE_X11) |
| 1088 KeyEvent* KeyEvent::last_ibus_key_event_ = nullptr; |
| 1089 #endif |
| 1088 | 1090 |
| 1089 // static | 1091 // static |
| 1090 bool KeyEvent::IsRepeated(const KeyEvent& event) { | 1092 bool KeyEvent::IsRepeated(const KeyEvent& event) { |
| 1091 // A safe guard in case if there were continous key pressed events that are | 1093 // A safe guard in case if there were continous key pressed events that are |
| 1092 // not auto repeat. | 1094 // not auto repeat. |
| 1093 const int kMaxAutoRepeatTimeMs = 2000; | 1095 const int kMaxAutoRepeatTimeMs = 2000; |
| 1094 // Ignore key events that have non standard state masks as it may be | 1096 KeyEvent** last_key_event; |
| 1095 // reposted by an IME. IBUS-GTK uses this field to detect the | 1097 #if defined(USE_X11) |
| 1096 // re-posted event for example. crbug.com/385873. | 1098 // Use a different static variable for key events that have non standard |
| 1097 if (X11EventHasNonStandardState(event.native_event())) | 1099 // state masks as it may be reposted by an IME. IBUS-GTK uses this field |
| 1098 return false; | 1100 // to detect the re-posted event for example. crbug.com/385873. |
| 1101 last_key_event = X11EventHasNonStandardState(event.native_event()) |
| 1102 ? &last_ibus_key_event_ |
| 1103 : &last_key_event_; |
| 1104 #else |
| 1105 last_key_event = &last_key_event_; |
| 1106 #endif |
| 1099 if (event.is_char()) | 1107 if (event.is_char()) |
| 1100 return false; | 1108 return false; |
| 1101 if (event.type() == ui::ET_KEY_RELEASED) { | 1109 if (event.type() == ui::ET_KEY_RELEASED) { |
| 1102 delete last_key_event_; | 1110 delete *last_key_event; |
| 1103 last_key_event_ = NULL; | 1111 *last_key_event = nullptr; |
| 1104 return false; | 1112 return false; |
| 1105 } | 1113 } |
| 1114 |
| 1106 CHECK_EQ(ui::ET_KEY_PRESSED, event.type()); | 1115 CHECK_EQ(ui::ET_KEY_PRESSED, event.type()); |
| 1107 if (!last_key_event_) { | 1116 if (!(*last_key_event)) { |
| 1108 last_key_event_ = new KeyEvent(event); | 1117 *last_key_event = new KeyEvent(event); |
| 1109 return false; | 1118 return false; |
| 1110 } else if (event.time_stamp() == last_key_event_->time_stamp()) { | 1119 } else if (event.time_stamp() == (*last_key_event)->time_stamp()) { |
| 1111 // The KeyEvent is created from the same native event. | 1120 // The KeyEvent is created from the same native event. |
| 1112 return (last_key_event_->flags() & ui::EF_IS_REPEAT) != 0; | 1121 return ((*last_key_event)->flags() & ui::EF_IS_REPEAT) != 0; |
| 1113 } | 1122 } |
| 1114 if (event.key_code() == last_key_event_->key_code() && | 1123 if (event.key_code() == (*last_key_event)->key_code() && |
| 1115 event.flags() == (last_key_event_->flags() & ~ui::EF_IS_REPEAT) && | 1124 event.flags() == ((*last_key_event)->flags() & ~ui::EF_IS_REPEAT) && |
| 1116 (event.time_stamp() - last_key_event_->time_stamp()).InMilliseconds() < | 1125 (event.time_stamp() - (*last_key_event)->time_stamp()).InMilliseconds() < |
| 1117 kMaxAutoRepeatTimeMs) { | 1126 kMaxAutoRepeatTimeMs) { |
| 1118 last_key_event_->set_time_stamp(event.time_stamp()); | 1127 (*last_key_event)->set_time_stamp(event.time_stamp()); |
| 1119 last_key_event_->set_flags(last_key_event_->flags() | ui::EF_IS_REPEAT); | 1128 (*last_key_event)->set_flags((*last_key_event)->flags() | ui::EF_IS_REPEAT); |
| 1120 return true; | 1129 return true; |
| 1121 } | 1130 } |
| 1122 delete last_key_event_; | 1131 delete *last_key_event; |
| 1123 last_key_event_ = new KeyEvent(event); | 1132 *last_key_event = new KeyEvent(event); |
| 1124 return false; | 1133 return false; |
| 1125 } | 1134 } |
| 1126 | 1135 |
| 1127 KeyEvent::KeyEvent(const base::NativeEvent& native_event) | 1136 KeyEvent::KeyEvent(const base::NativeEvent& native_event) |
| 1128 : KeyEvent(native_event, EventFlagsFromNative(native_event)) {} | 1137 : KeyEvent(native_event, EventFlagsFromNative(native_event)) {} |
| 1129 | 1138 |
| 1130 KeyEvent::KeyEvent(const base::NativeEvent& native_event, int event_flags) | 1139 KeyEvent::KeyEvent(const base::NativeEvent& native_event, int event_flags) |
| 1131 : Event(native_event, EventTypeFromNative(native_event), event_flags), | 1140 : Event(native_event, EventTypeFromNative(native_event), event_flags), |
| 1132 key_code_(KeyboardCodeFromNative(native_event)), | 1141 key_code_(KeyboardCodeFromNative(native_event)), |
| 1133 code_(CodeFromNative(native_event)), | 1142 code_(CodeFromNative(native_event)), |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1437 flags | EF_FROM_TOUCH), | 1446 flags | EF_FROM_TOUCH), |
| 1438 details_(details), | 1447 details_(details), |
| 1439 unique_touch_event_id_(unique_touch_event_id) { | 1448 unique_touch_event_id_(unique_touch_event_id) { |
| 1440 latency()->set_source_event_type(ui::SourceEventType::TOUCH); | 1449 latency()->set_source_event_type(ui::SourceEventType::TOUCH); |
| 1441 } | 1450 } |
| 1442 | 1451 |
| 1443 GestureEvent::~GestureEvent() { | 1452 GestureEvent::~GestureEvent() { |
| 1444 } | 1453 } |
| 1445 | 1454 |
| 1446 } // namespace ui | 1455 } // namespace ui |
| OLD | NEW |