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..bd6fbe636adb16dcc3bf763bcc0da7b424708adc 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,18 @@ 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); |
+ accelerators_.erase(accelerator); |
+} |
+ |
// static |
AcceleratorManager* AcceleratorManager::Get() { |
return InputManager::Get()->GetAcceleratorManager(); |