diff options
Diffstat (limited to 'chromium/ash/wm/overlay_event_filter.h')
-rw-r--r-- | chromium/ash/wm/overlay_event_filter.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/chromium/ash/wm/overlay_event_filter.h b/chromium/ash/wm/overlay_event_filter.h new file mode 100644 index 00000000000..1989e454f15 --- /dev/null +++ b/chromium/ash/wm/overlay_event_filter.h @@ -0,0 +1,71 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ASH_WM_OVERLAY_EVENT_FILTER_H_ +#define ASH_WM_OVERLAY_EVENT_FILTER_H_ + +#include "ash/shell_observer.h" +#include "base/compiler_specific.h" +#include "ui/aura/window.h" +#include "ui/base/events/event_handler.h" + +namespace ash { +namespace internal { + +// EventFilter for the "overlay window", which intercepts events before they are +// processed by the usual path (e.g. the partial screenshot UI, the keyboard +// overlay). It does nothing the first time, but works when |Activate()| is +// called. The main task of this event filter is just to stop propagation +// of any key events during activation, and also signal cancellation when keys +// for canceling are pressed. +class OverlayEventFilter : public ui::EventHandler, + public ShellObserver { + public: + // Windows that need to receive events from OverlayEventFilter implement this. + class Delegate { + public: + // Invoked when OverlayEventFilter needs to stop handling events. + virtual void Cancel() = 0; + + // Returns true if the overlay should be canceled in response to |event|. + virtual bool IsCancelingKeyEvent(ui::KeyEvent* event) = 0; + + // Returns the window that needs to receive events. NULL if no window needs + // to receive key events from OverlayEventFilter. + virtual aura::Window* GetWindow() = 0; + }; + + OverlayEventFilter(); + virtual ~OverlayEventFilter(); + + // Starts the filtering of events. It also notifies the specified + // |delegate| when a key event means cancel (like Esc). It holds the + // pointer to the specified |delegate| until Deactivate() is called, but + // does not take ownership. + void Activate(Delegate* delegate); + + // Ends the filtering of events. + void Deactivate(); + + // Cancels the partial screenshot UI. Do nothing if it's not activated. + void Cancel(); + + // ui::EventHandler overrides: + virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE; + + // ShellObserver overrides: + virtual void OnLoginStateChanged(user::LoginStatus status) OVERRIDE; + virtual void OnAppTerminating() OVERRIDE; + virtual void OnLockStateChanged(bool locked) OVERRIDE; + + private: + Delegate* delegate_; + + DISALLOW_COPY_AND_ASSIGN(OverlayEventFilter); +}; + +} // namespace internal +} // namespace ash + +#endif // ASH_WM_OVERLAY_EVENT_FILTER_H_ |