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"
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"
22 class AcceleratorFilter
;
23 class NestedAcceleratorController
;
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
{
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
;
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
;
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_
;
85 DISALLOW_COPY_AND_ASSIGN(AcceleratorManagerImpl
);
90 #endif // ATHENA_INPUT_ACCELERATOR_MANAGER_H_