blob: b59d5350ec4e3ee3fcb465037cada7d78c2083be [file] [log] [blame]
// Copyright 2018 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 CHROMECAST_GRAPHICS_CAST_TOUCH_EVENT_GATE_H_
#define CHROMECAST_GRAPHICS_CAST_TOUCH_EVENT_GATE_H_
#include "base/containers/flat_set.h"
#include "ui/events/event_rewriter.h"
namespace aura {
class Window;
} // namespace aura
namespace chromecast {
class CastTouchActivityObserver;
// An event rewriter whose purpose is to discard events (when enabled). This
// class is meant to be installed as the first rewriter in the chain, to handle
// scenarios where all input needs to be disabled, such as when the device
// screen is turned off. Instances of CastTouchActivityObserver can be
// registered to receive notifications of gated events.
class CastTouchEventGate : public ui::EventRewriter {
public:
explicit CastTouchEventGate(aura::Window* root_window);
~CastTouchEventGate() override;
void SetEnabled(bool enabled);
void AddObserver(CastTouchActivityObserver* observer);
void RemoveObserver(CastTouchActivityObserver* observer);
// ui::EventRewriter implementation.
ui::EventRewriteStatus RewriteEvent(
const ui::Event& event,
std::unique_ptr<ui::Event>* rewritten_event) override;
ui::EventRewriteStatus NextDispatchEvent(
const ui::Event& last_event,
std::unique_ptr<ui::Event>* new_event) override;
private:
bool enabled_ = false;
aura::Window* root_window_;
base::flat_set<CastTouchActivityObserver*> observers_;
};
} // namespace chromecast
#endif // CHROMECAST_GRAPHICS_CAST_TOUCH_EVENT_GATE_H_