blob: 0671b7bbcc355d113f6246b49cb524aace684323 [file] [log] [blame]
// 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.
#include "ash/ash_export.h"
#include "ash/common/shell_observer.h"
#include "base/compiler_specific.h"
#include "base/macros.h"
#include "ui/aura/window.h"
#include "ui/events/event_handler.h"
namespace ash {
// 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 ASH_EXPORT OverlayEventFilter : public ui::EventHandler,
public ShellObserver {
// Windows that need to receive events from OverlayEventFilter implement this.
class ASH_EXPORT Delegate {
// 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() override;
// 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(Delegate* delegate);
// Cancels the partial screenshot UI. Do nothing if it's not activated.
void Cancel();
// Returns true if it's currently active.
bool IsActive();
// ui::EventHandler overrides:
void OnKeyEvent(ui::KeyEvent* event) override;
// ShellObserver overrides:
void OnLoginStateChanged(LoginStatus status) override;
void OnAppTerminating() override;
void OnLockStateChanged(bool locked) override;
Delegate* delegate_;
} // namespace ash