| Index: ui/aura_shell/desktop_event_filter.cc
|
| diff --git a/ui/aura_shell/desktop_event_filter.cc b/ui/aura_shell/desktop_event_filter.cc
|
| index 3d17865b069be2301f74e71ef5d8e3276089f845..d69ead118f5b8531c642c99d7b192ad33f9c0c13 100644
|
| --- a/ui/aura_shell/desktop_event_filter.cc
|
| +++ b/ui/aura_shell/desktop_event_filter.cc
|
| @@ -47,6 +47,17 @@ DesktopEventFilter::DesktopEventFilter()
|
| }
|
|
|
| DesktopEventFilter::~DesktopEventFilter() {
|
| + // Additional filters are not owned by DesktopEventFilter and they
|
| + // should all be removed when running here. |filters_| has
|
| + // check_empty == true and will DCHECK failure if it is not empty.
|
| +}
|
| +
|
| +void DesktopEventFilter::AddFilter(aura::EventFilter* filter) {
|
| + filters_.AddObserver(filter);
|
| +}
|
| +
|
| +void DesktopEventFilter::RemoveFilter(aura::EventFilter* filter) {
|
| + filters_.RemoveObserver(filter);
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -54,11 +65,14 @@ DesktopEventFilter::~DesktopEventFilter() {
|
|
|
| bool DesktopEventFilter::PreHandleKeyEvent(aura::Window* target,
|
| aura::KeyEvent* event) {
|
| - return false;
|
| + return FilterKeyEvent(target, event);
|
| }
|
|
|
| bool DesktopEventFilter::PreHandleMouseEvent(aura::Window* target,
|
| aura::MouseEvent* event) {
|
| + if (FilterMouseEvent(target, event))
|
| + return true;
|
| +
|
| switch (event->type()) {
|
| case ui::ET_MOUSE_PRESSED:
|
| ActivateIfNecessary(target, event);
|
| @@ -75,6 +89,10 @@ bool DesktopEventFilter::PreHandleMouseEvent(aura::Window* target,
|
| ui::TouchStatus DesktopEventFilter::PreHandleTouchEvent(
|
| aura::Window* target,
|
| aura::TouchEvent* event) {
|
| + ui::TouchStatus status = FilterTouchEvent(target, event);
|
| + if (status != ui::TOUCH_STATUS_UNKNOWN)
|
| + return status;
|
| +
|
| if (event->type() == ui::ET_TOUCH_PRESSED)
|
| ActivateIfNecessary(target, event);
|
| return ui::TOUCH_STATUS_UNKNOWN;
|
| @@ -105,5 +123,43 @@ void DesktopEventFilter::HandleMouseMoved(aura::Window* target,
|
| aura::Desktop::GetInstance()->SetCursor(cursor);
|
| }
|
|
|
| +bool DesktopEventFilter::FilterKeyEvent(aura::Window* target,
|
| + aura::KeyEvent* event) {
|
| + bool handled = false;
|
| + if (filters_.might_have_observers()) {
|
| + ObserverListBase<aura::EventFilter>::Iterator it(filters_);
|
| + aura::EventFilter* filter;
|
| + while (!handled && (filter = it.GetNext()) != NULL)
|
| + handled = filter->PreHandleKeyEvent(target, event);
|
| + }
|
| + return handled;
|
| +}
|
| +
|
| +bool DesktopEventFilter::FilterMouseEvent(aura::Window* target,
|
| + aura::MouseEvent* event) {
|
| + bool handled = false;
|
| + if (filters_.might_have_observers()) {
|
| + ObserverListBase<aura::EventFilter>::Iterator it(filters_);
|
| + aura::EventFilter* filter;
|
| + while (!handled && (filter = it.GetNext()) != NULL)
|
| + handled = filter->PreHandleMouseEvent(target, event);
|
| + }
|
| + return handled;
|
| +}
|
| +
|
| +ui::TouchStatus DesktopEventFilter::FilterTouchEvent(aura::Window* target,
|
| + aura::TouchEvent* event) {
|
| + ui::TouchStatus status = ui::TOUCH_STATUS_UNKNOWN;
|
| + if (filters_.might_have_observers()) {
|
| + ObserverListBase<aura::EventFilter>::Iterator it(filters_);
|
| + aura::EventFilter* filter;
|
| + while (status == ui::TOUCH_STATUS_UNKNOWN &&
|
| + (filter = it.GetNext()) != NULL) {
|
| + status = filter->PreHandleTouchEvent(target, event);
|
| + }
|
| + }
|
| + return status;
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace aura_shell
|
|
|