Put screenshot.py back to work
[chromium-blink-merge.git] / athena / input / accelerator_manager_impl.h
blobbd0c9a751e35b4f54b9691e1254b034b3cc9d8b5
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.
5 #ifndef ATHENA_INPUT_ACCELERATOR_MANAGER_H_
6 #define ATHENA_INPUT_ACCELERATOR_MANAGER_H_
8 #include "athena/input/public/accelerator_manager.h"
10 #include <map>
12 #include "base/macros.h"
13 #include "ui/base/accelerators/accelerator.h"
14 #include "ui/base/accelerators/accelerator_history.h"
15 #include "ui/events/event_target_iterator.h"
17 namespace aura {
18 class Window;
21 namespace wm {
22 class AcceleratorFilter;
23 class NestedAcceleratorController;
26 namespace athena {
28 // AcceleratorManagerImpl provides a API to register accelerators
29 // for athena modules. It hides various details on accelerator handling
30 // such as how to handle accelerator in a nested loop, reserved accelerators
31 // and repeated accelerators.
32 class AcceleratorManagerImpl : public AcceleratorManager,
33 public ui::AcceleratorTarget {
34 public:
35 class AcceleratorWrapper;
37 // Creates an AcceleratorManager for global accelerators.
38 // This is the one returned by AcceleratorManager::Get()
39 static AcceleratorManagerImpl* CreateGlobalAcceleratorManager();
41 // Creates an AcceleratorManager for focus manager.
42 static scoped_ptr<AcceleratorManager> CreateForFocusManager(
43 views::FocusManager* focus_manager);
45 ~AcceleratorManagerImpl() override;
47 void Init();
49 void OnRootWindowCreated(aura::Window* root_window);
51 bool Process(const ui::Accelerator& accelerator);
53 // AcceleratorManager:
54 // This is made public so that implementation classes can use this.
55 virtual bool IsRegistered(const ui::Accelerator& accelerator,
56 int flags) const override;
58 private:
59 class InternalData;
61 AcceleratorManagerImpl(AcceleratorWrapper* wrapper, bool global);
63 // AcceleratorManager:
64 virtual void RegisterAccelerators(const AcceleratorData accelerators[],
65 size_t num_accelerators,
66 AcceleratorHandler* handler) override;
67 virtual void RegisterAccelerator(const AcceleratorData& accelerator_data,
68 AcceleratorHandler* handler) override;
69 virtual void UnregisterAccelerator(const AcceleratorData& accelerator_data,
70 AcceleratorHandler* handler) override;
71 virtual void SetDebugAcceleratorsEnabled(bool enabled) override;
73 // ui::AcceleratorTarget:
74 virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) override;
75 virtual bool CanHandleAccelerators() const override;
77 std::map<ui::Accelerator, InternalData> accelerators_;
78 scoped_ptr<AcceleratorWrapper> accelerator_wrapper_;
79 scoped_ptr<ui::AcceleratorHistory> accelerator_history_;
80 scoped_ptr<wm::AcceleratorFilter> accelerator_filter_;
81 scoped_ptr<wm::NestedAcceleratorController> nested_accelerator_controller_;
82 bool debug_accelerators_enabled_;
83 bool global_;
85 DISALLOW_COPY_AND_ASSIGN(AcceleratorManagerImpl);
88 } // namespace athena
90 #endif // ATHENA_INPUT_ACCELERATOR_MANAGER_H_