Chromium Code Reviews| Index: athena/input/accelerator_manager_impl.cc |
| diff --git a/athena/input/accelerator_manager_impl.cc b/athena/input/accelerator_manager_impl.cc |
| index 196a3d564bb6c61b7726b0b72ab16f00d01b0026..ad2d2f6be178728f4d7fa5d648fd1c41febc53f3 100644 |
| --- a/athena/input/accelerator_manager_impl.cc |
| +++ b/athena/input/accelerator_manager_impl.cc |
| @@ -29,6 +29,8 @@ class AcceleratorManagerImpl::AcceleratorWrapper { |
| virtual ~AcceleratorWrapper() {} |
| virtual void Register(const ui::Accelerator& accelerator, |
| ui::AcceleratorTarget* target) = 0; |
| + virtual void Unregister(const ui::Accelerator& accelerator, |
| + ui::AcceleratorTarget* target) = 0; |
| virtual bool Process(const ui::Accelerator& accelerator) = 0; |
| virtual ui::AcceleratorTarget* GetCurrentTarget( |
| const ui::Accelerator& accelertor) const = 0; |
| @@ -142,10 +144,15 @@ class UIAcceleratorManagerWrapper |
| virtual void Register(const ui::Accelerator& accelerator, |
| ui::AcceleratorTarget* target) override { |
| - return ui_accelerator_manager_->Register( |
| + ui_accelerator_manager_->Register( |
| accelerator, ui::AcceleratorManager::kNormalPriority, target); |
| } |
| + virtual void Unregister(const ui::Accelerator& accelerator, |
| + ui::AcceleratorTarget* target) override { |
| + ui_accelerator_manager_->Unregister(accelerator, target); |
| + } |
| + |
| virtual bool Process(const ui::Accelerator& accelerator) override { |
| return ui_accelerator_manager_->Process(accelerator); |
| } |
| @@ -173,6 +180,11 @@ class FocusManagerWrapper : public AcceleratorManagerImpl::AcceleratorWrapper { |
| accelerator, ui::AcceleratorManager::kNormalPriority, target); |
| } |
| + virtual void Unregister(const ui::Accelerator& accelerator, |
| + ui::AcceleratorTarget* target) override { |
| + focus_manager_->UnregisterAccelerator(accelerator, target); |
| + } |
| + |
| virtual bool Process(const ui::Accelerator& accelerator) override { |
| NOTREACHED(); |
| return true; |
| @@ -324,6 +336,21 @@ void AcceleratorManagerImpl::RegisterAccelerator( |
| accelerator_data.accelerator_flags))); |
| } |
| +void AcceleratorManagerImpl::UnregisterAccelerator( |
| + const AcceleratorData& accelerator_data, |
| + AcceleratorHandler* handler) { |
| + ui::Accelerator accelerator(accelerator_data.keycode, |
| + accelerator_data.keyevent_flags); |
| + accelerator.set_type(accelerator_data.trigger_event == TRIGGER_ON_PRESS |
| + ? ui::ET_KEY_PRESSED |
| + : ui::ET_KEY_RELEASED); |
| + accelerator_wrapper_->Unregister(accelerator, this); |
| + std::map<ui::Accelerator, InternalData>::const_iterator iter = |
| + accelerators_.find(accelerator); |
| + if (iter != accelerators_.end()) |
| + accelerators_.erase(iter); |
|
pkotwicz
2014/10/15 17:00:33
Can you just do
accelerators_.erase(accelerator)
a
Greg Levin
2014/10/15 20:56:13
Done.
|
| +} |
| + |
| // static |
| AcceleratorManager* AcceleratorManager::Get() { |
| return InputManager::Get()->GetAcceleratorManager(); |