Index: components/mus/ws/event_matcher.cc |
diff --git a/components/mus/ws/event_matcher.cc b/components/mus/ws/event_matcher.cc |
index da45554d2ea8ca138a2810d55ff2d44416288905..298d3c7aac1967e09e99d68317268017ca9aabc7 100644 |
--- a/components/mus/ws/event_matcher.cc |
+++ b/components/mus/ws/event_matcher.cc |
@@ -2,6 +2,8 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <algorithm> |
+ |
#include "components/mus/ws/event_matcher.h" |
namespace mus { |
@@ -9,37 +11,46 @@ namespace ws { |
EventMatcher::EventMatcher(const mojom::EventMatcher& matcher) |
: fields_to_match_(NONE), |
- event_type_(ui::ET_UNKNOWN), |
event_flags_(ui::EF_NONE), |
ignore_event_flags_(ui::EF_NONE), |
keyboard_code_(ui::VKEY_UNKNOWN), |
pointer_type_(ui::EventPointerType::POINTER_TYPE_UNKNOWN) { |
- if (matcher.type_matcher) { |
+ if (matcher.type_matcher || matcher.types_matcher) { |
fields_to_match_ |= TYPE; |
- switch (matcher.type_matcher->type) { |
- case ui::mojom::EventType::POINTER_DOWN: |
- event_type_ = ui::ET_POINTER_DOWN; |
- break; |
- case ui::mojom::EventType::POINTER_MOVE: |
- event_type_ = ui::ET_POINTER_MOVED; |
- break; |
- case ui::mojom::EventType::MOUSE_EXIT: |
- event_type_ = ui::ET_POINTER_EXITED; |
- break; |
- case ui::mojom::EventType::POINTER_UP: |
- event_type_ = ui::ET_POINTER_UP; |
- break; |
- case ui::mojom::EventType::POINTER_CANCEL: |
- event_type_ = ui::ET_POINTER_CANCELLED; |
- break; |
- case ui::mojom::EventType::KEY_PRESSED: |
- event_type_ = ui::ET_KEY_PRESSED; |
- break; |
- case ui::mojom::EventType::KEY_RELEASED: |
- event_type_ = ui::ET_KEY_RELEASED; |
- break; |
- default: |
- NOTREACHED(); |
+ std::vector<ui::mojom::EventType> event_types; |
+ if (matcher.type_matcher) { |
+ event_types.push_back(matcher.type_matcher->type); |
+ } else { |
+ for (ui::mojom::EventType event_type : matcher.types_matcher->types) { |
+ event_types.push_back(event_type); |
+ } |
+ } |
+ for (ui::mojom::EventType event_type : event_types) { |
+ switch (event_type) { |
+ case ui::mojom::EventType::POINTER_DOWN: |
+ event_types_.push_back(ui::ET_POINTER_DOWN); |
+ break; |
+ case ui::mojom::EventType::POINTER_MOVE: |
+ event_types_.push_back(ui::ET_POINTER_MOVED); |
+ break; |
+ case ui::mojom::EventType::MOUSE_EXIT: |
+ event_types_.push_back(ui::ET_POINTER_EXITED); |
+ break; |
+ case ui::mojom::EventType::POINTER_UP: |
+ event_types_.push_back(ui::ET_POINTER_UP); |
+ break; |
+ case ui::mojom::EventType::POINTER_CANCEL: |
+ event_types_.push_back(ui::ET_POINTER_CANCELLED); |
+ break; |
+ case ui::mojom::EventType::KEY_PRESSED: |
+ event_types_.push_back(ui::ET_KEY_PRESSED); |
+ break; |
+ case ui::mojom::EventType::KEY_RELEASED: |
+ event_types_.push_back(ui::ET_KEY_RELEASED); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
} |
} |
if (matcher.flags_matcher) { |
@@ -74,7 +85,9 @@ EventMatcher::EventMatcher(const mojom::EventMatcher& matcher) |
EventMatcher::~EventMatcher() {} |
bool EventMatcher::MatchesEvent(const ui::Event& event) const { |
- if ((fields_to_match_ & TYPE) && event.type() != event_type_) |
+ if ((fields_to_match_ & TYPE) && |
+ std::find(event_types_.begin(), event_types_.end(), event.type()) |
+ == event_types_.end()) |
return false; |
int flags = event.flags() & ~ignore_event_flags_; |
if ((fields_to_match_ & FLAGS) && flags != event_flags_) |
@@ -101,7 +114,7 @@ bool EventMatcher::MatchesEvent(const ui::Event& event) const { |
bool EventMatcher::Equals(const EventMatcher& other) const { |
return fields_to_match_ == other.fields_to_match_ && |
- event_type_ == other.event_type_ && |
+ event_types_ == other.event_types_ && |
event_flags_ == other.event_flags_ && |
ignore_event_flags_ == other.ignore_event_flags_ && |
keyboard_code_ == other.keyboard_code_ && |