1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef ASH_WM_OVERLAY_EVENT_FILTER_H_ 6 #define ASH_WM_OVERLAY_EVENT_FILTER_H_ 7 8 #include "ash/shell_observer.h" 9 #include "base/compiler_specific.h" 10 #include "ui/aura/window.h" 11 #include "ui/base/events/event_handler.h" 12 13 namespace ash { 14 namespace internal { 15 16 // EventFilter for the "overlay window", which intercepts events before they are 17 // processed by the usual path (e.g. the partial screenshot UI, the keyboard 18 // overlay). It does nothing the first time, but works when |Activate()| is 19 // called. The main task of this event filter is just to stop propagation 20 // of any key events during activation, and also signal cancellation when keys 21 // for canceling are pressed. 22 class OverlayEventFilter : public ui::EventHandler, 23 public ShellObserver { 24 public: 25 // Windows that need to receive events from OverlayEventFilter implement this. 26 class Delegate { 27 public: 28 // Invoked when OverlayEventFilter needs to stop handling events. 29 virtual void Cancel() = 0; 30 31 // Returns true if the overlay should be canceled in response to |event|. 32 virtual bool IsCancelingKeyEvent(ui::KeyEvent* event) = 0; 33 34 // Returns the window that needs to receive events. NULL if no window needs 35 // to receive key events from OverlayEventFilter. 36 virtual aura::Window* GetWindow() = 0; 37 }; 38 39 OverlayEventFilter(); 40 virtual ~OverlayEventFilter(); 41 42 // Starts the filtering of events. It also notifies the specified 43 // |delegate| when a key event means cancel (like Esc). It holds the 44 // pointer to the specified |delegate| until Deactivate() is called, but 45 // does not take ownership. 46 void Activate(Delegate* delegate); 47 48 // Ends the filtering of events. 49 void Deactivate(); 50 51 // Cancels the partial screenshot UI. Do nothing if it's not activated. 52 void Cancel(); 53 54 // ui::EventHandler overrides: 55 virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE; 56 57 // ShellObserver overrides: 58 virtual void OnLoginStateChanged(user::LoginStatus status) OVERRIDE; 59 virtual void OnAppTerminating() OVERRIDE; 60 virtual void OnLockStateChanged(bool locked) OVERRIDE; 61 62 private: 63 Delegate* delegate_; 64 65 DISALLOW_COPY_AND_ASSIGN(OverlayEventFilter); 66 }; 67 68 } // namespace internal 69 } // namespace ash 70 71 #endif // ASH_WM_OVERLAY_EVENT_FILTER_H_ 72