Index: ui/aura_shell/desktop_event_filter.h |
diff --git a/ui/aura_shell/desktop_event_filter.h b/ui/aura_shell/desktop_event_filter.h |
index 1ad0438e5ffe5c1a9c207affd17c8923c06436b6..a5cb2c85922840a45406e7c8b3eec583c6766114 100644 |
--- a/ui/aura_shell/desktop_event_filter.h |
+++ b/ui/aura_shell/desktop_event_filter.h |
@@ -7,17 +7,29 @@ |
#pragma once |
#include "base/compiler_specific.h" |
+#include "base/observer_list.h" |
#include "ui/aura/event_filter.h" |
#include "ui/aura_shell/aura_shell_export.h" |
namespace aura_shell { |
namespace internal { |
+// DesktopEventFilter gets all desktop events first and can provide actions to |
+// those events. It implements desktop features such as click to activate a |
+// window and cursor change when moving mouse. |
+// Additional event filters can be added to DesktopEventFilter. Events will |
+// pass through those additional filters in their addition order and could be |
+// consumed by any of those filters. If an event is consumed by a filter, the |
+// rest of the filter(s) and DesktopEventFilter will not see the consumed event. |
class AURA_SHELL_EXPORT DesktopEventFilter : public aura::EventFilter { |
public: |
DesktopEventFilter(); |
virtual ~DesktopEventFilter(); |
+ // Adds/removes additional event filters. |
+ void AddFilter(aura::EventFilter* filter); |
+ void RemoveFilter(aura::EventFilter* filter); |
+ |
// Overridden from EventFilter: |
virtual bool PreHandleKeyEvent(aura::Window* target, |
aura::KeyEvent* event) OVERRIDE; |
@@ -34,6 +46,16 @@ class AURA_SHELL_EXPORT DesktopEventFilter : public aura::EventFilter { |
// default resize cursors for window edges. |
void HandleMouseMoved(aura::Window* target, aura::MouseEvent* event); |
+ // Dispatches event to addtional filters. Returns false or |
+ // ui::TOUCH_STATUS_UNKNOWN if event is consumed. |
+ bool FilterKeyEvent(aura::Window* target, aura::KeyEvent* event); |
+ bool FilterMouseEvent(aura::Window* target, aura::MouseEvent* event); |
+ ui::TouchStatus FilterTouchEvent(aura::Window* target, |
+ aura::TouchEvent* event); |
+ |
+ // Additional event filters that pre-handles events. |
+ ObserverList<aura::EventFilter, true> filters_; |
+ |
DISALLOW_COPY_AND_ASSIGN(DesktopEventFilter); |
}; |