summaryrefslogtreecommitdiffstats
path: root/ui/base/events
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-07 21:47:21 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-07 21:47:21 +0000
commit4e717cc0c05848f8e1c04ce2d6d5b4ae8c56e8ee (patch)
tree9e2f7d20595b6bc2f059690f81370d0a08789c7e /ui/base/events
parent3510fb996568ce906992accc39e963a893ef242b (diff)
downloadchromium_src-4e717cc0c05848f8e1c04ce2d6d5b4ae8c56e8ee.zip
chromium_src-4e717cc0c05848f8e1c04ce2d6d5b4ae8c56e8ee.tar.gz
chromium_src-4e717cc0c05848f8e1c04ce2d6d5b4ae8c56e8ee.tar.bz2
events: Introduce non-cancelable events.
A ui::Event can be canceled by default. But some events should not be cancelable (e.g. focus-change events). BUG=163617 Review URL: https://codereview.chromium.org/11443027 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171851 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/base/events')
-rw-r--r--ui/base/events/event.cc14
-rw-r--r--ui/base/events/event.h10
2 files changed, 21 insertions, 3 deletions
diff --git a/ui/base/events/event.cc b/ui/base/events/event.cc
index e6cbd25..317d93c 100644
--- a/ui/base/events/event.cc
+++ b/ui/base/events/event.cc
@@ -120,13 +120,18 @@ bool Event::HasNativeEvent() const {
}
void Event::StopPropagation() {
-// CHECK(phase_ != EP_PREDISPATCH && phase_ != EP_POSTDISPATCH);
+ // TODO(sad): Re-enable these checks once View uses dispatcher to dispatch
+ // events.
+ // CHECK(phase_ != EP_PREDISPATCH && phase_ != EP_POSTDISPATCH);
+ CHECK(cancelable_);
result_ = static_cast<ui::EventResult>(result_ | ER_CONSUMED);
- CHECK(stopped_propagation());
}
void Event::SetHandled() {
-// CHECK(phase_ != EP_PREDISPATCH && phase_ != EP_POSTDISPATCH);
+ // TODO(sad): Re-enable these checks once View uses dispatcher to dispatch
+ // events.
+ // CHECK(phase_ != EP_PREDISPATCH && phase_ != EP_POSTDISPATCH);
+ CHECK(cancelable_);
result_ = static_cast<ui::EventResult>(result_ | ER_HANDLED);
}
@@ -136,6 +141,7 @@ Event::Event(EventType type, base::TimeDelta time_stamp, int flags)
flags_(flags),
dispatch_to_hidden_targets_(false),
delete_native_event_(false),
+ cancelable_(true),
target_(NULL),
phase_(EP_PREDISPATCH),
result_(ER_UNHANDLED) {
@@ -152,6 +158,7 @@ Event::Event(const base::NativeEvent& native_event,
flags_(flags),
dispatch_to_hidden_targets_(false),
delete_native_event_(false),
+ cancelable_(true),
target_(NULL),
phase_(EP_PREDISPATCH),
result_(ER_UNHANDLED) {
@@ -167,6 +174,7 @@ Event::Event(const Event& copy)
flags_(copy.flags_),
dispatch_to_hidden_targets_(false),
delete_native_event_(false),
+ cancelable_(true),
target_(NULL),
phase_(EP_PREDISPATCH),
result_(ER_UNHANDLED) {
diff --git a/ui/base/events/event.h b/ui/base/events/event.h
index 2115402..4cdbd18 100644
--- a/ui/base/events/event.h
+++ b/ui/base/events/event.h
@@ -80,6 +80,12 @@ class UI_EXPORT Event {
return dispatch_to_hidden_targets_;
}
+ // By default, events are "cancelable", this means any default processing that
+ // the containing abstraction layer may perform can be prevented by calling
+ // SetHandled(). SetHandled() or StopPropagation() must not be called for
+ // events that are not cancelable.
+ bool cancelable() const { return cancelable_; }
+
// The following methods return true if the respective keys were pressed at
// the time the event was created.
bool IsShiftDown() const { return (flags_ & EF_SHIFT_DOWN) != 0; }
@@ -168,6 +174,8 @@ class UI_EXPORT Event {
// Immediately stops the propagation of the event. This must be called only
// from an EventHandler during an event-dispatch. Any event handler that may
// be in the list will not receive the event after this is called.
+ // Note that StopPropagation() or SetHandled() must not be called for
+ // cancelable events.
void StopPropagation();
bool stopped_propagation() const { return !!(result_ & ui::ER_CONSUMED); }
@@ -182,6 +190,7 @@ class UI_EXPORT Event {
void set_delete_native_event(bool delete_native_event) {
delete_native_event_ = delete_native_event;
}
+ void set_cancelable(bool cancelable) { cancelable_ = cancelable; }
void set_time_stamp(base::TimeDelta time_stamp) { time_stamp_ = time_stamp; }
void set_dispatch_to_hidden_targets(bool dispatch_to_hidden_targets) {
dispatch_to_hidden_targets_ = dispatch_to_hidden_targets;
@@ -203,6 +212,7 @@ class UI_EXPORT Event {
int flags_;
bool dispatch_to_hidden_targets_;
bool delete_native_event_;
+ bool cancelable_;
EventTarget* target_;
EventPhase phase_;
EventResult result_;