Home | History | Annotate | Download | only in wm
      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