diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-07 21:47:21 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-07 21:47:21 +0000 |
commit | 4e717cc0c05848f8e1c04ce2d6d5b4ae8c56e8ee (patch) | |
tree | 9e2f7d20595b6bc2f059690f81370d0a08789c7e /ui/base/events | |
parent | 3510fb996568ce906992accc39e963a893ef242b (diff) | |
download | chromium_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.cc | 14 | ||||
-rw-r--r-- | ui/base/events/event.h | 10 |
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_; |