1// Copyright 2014 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 UI_AURA_SCOPED_WINDOW_TARGETER_H_
6#define UI_AURA_SCOPED_WINDOW_TARGETER_H_
7
8#include "base/macros.h"
9#include "base/memory/scoped_ptr.h"
10#include "ui/aura/window_observer.h"
11
12namespace ui {
13class EventTargeter;
14}
15
16namespace aura {
17
18class Window;
19
20// ScopedWindowTargeter is used to temporarily replace the event-targeter for a
21// window. Upon construction, it installs a new targeter on the window, and upon
22// destruction, it restores the previous event-targeter on the window.
23class AURA_EXPORT ScopedWindowTargeter : public WindowObserver {
24 public:
25  ScopedWindowTargeter(Window* window,
26                       scoped_ptr<ui::EventTargeter> new_targeter);
27
28  virtual ~ScopedWindowTargeter();
29
30  ui::EventTargeter* old_targeter() {
31    return old_targeter_.get();
32  }
33
34 private:
35  // WindowObserver:
36  virtual void OnWindowDestroyed(Window* window) OVERRIDE;
37
38  Window* window_;
39  scoped_ptr<ui::EventTargeter> old_targeter_;
40
41  DISALLOW_COPY_AND_ASSIGN(ScopedWindowTargeter);
42};
43
44}  // namespace aura
45
46#endif  // UI_AURA_SCOPED_WINDOW_TARGETER_H_
47