Chromium Code Reviews| Index: ash/mus/accelerators/accelerator_controller_registrar.cc |
| diff --git a/ash/mus/accelerators/accelerator_controller_registrar.cc b/ash/mus/accelerators/accelerator_controller_registrar.cc |
| index 12df77c21a1df982aeb715dc7226fcf2f54ea6eb..895973acb54d2116def46055bc679c770919e622 100644 |
| --- a/ash/mus/accelerators/accelerator_controller_registrar.cc |
| +++ b/ash/mus/accelerators/accelerator_controller_registrar.cc |
| @@ -28,7 +28,14 @@ void OnAcceleratorAdded(const ui::Accelerator& accelerator, bool added) { |
| << " modifiers=" << accelerator.modifiers(); |
| } |
| +// Callback from registering the accelerators. |
| +void OnAcceleratorsAdded(const std::vector<ui::Accelerator>& ui_accelerators, |
| + bool added) { |
| + for (auto iter = ui_accelerators.begin(); iter != ui_accelerators.end(); |
| + ++iter) |
| + OnAcceleratorAdded(*iter, added); |
| } // namespace |
| +} |
| AcceleratorControllerRegistrar::AcceleratorControllerRegistrar( |
| WindowManager* window_manager, |
| @@ -99,8 +106,21 @@ ui::mojom::EventResult AcceleratorControllerRegistrar::OnAccelerator( |
| : ui::mojom::EventResult::UNHANDLED; |
| } |
| +void AcceleratorControllerRegistrar::OnAcceleratorsRegistered( |
| + const std::vector<ui::Accelerator>& accelerators) { |
| + accelerator_ptrs_.clear(); |
|
mfomitchev
2016/12/22 01:04:50
I think this all could be done a bit cleaner:
Don'
thanhph
2016/12/22 17:48:44
If we get rid of |add_accelerator_immediately|, we
|
| + for (auto iter = accelerators.begin(); iter != accelerators.end(); ++iter) |
| + OnAcceleratorRegistered(*iter, false); |
| + |
| + window_manager_->window_manager_client()->AddAccelerators( |
| + std::move(accelerator_ptrs_), |
| + base::Bind(OnAcceleratorsAdded, accelerators)); |
| +} |
| + |
| +// add_accelerator_immediately default set to true. |
| void AcceleratorControllerRegistrar::OnAcceleratorRegistered( |
| - const ui::Accelerator& accelerator) { |
| + const ui::Accelerator& accelerator, |
| + bool add_accelerator_immediately) { |
| Ids ids; |
| if (!GenerateIds(&ids)) { |
| DVLOG(1) << "max number of accelerators registered, dropping request"; |
| @@ -124,17 +144,26 @@ void AcceleratorControllerRegistrar::OnAcceleratorRegistered( |
| post_event_matcher->accelerator_phase = |
| ui::mojom::AcceleratorPhase::POST_TARGET; |
| - window_manager_->window_manager_client()->AddAccelerators( |
| - ui::CreateAcceleratorVector( |
| - ComputeAcceleratorId(id_namespace_, ids.pre_id), |
| - std::move(event_matcher)), |
| - base::Bind(OnAcceleratorAdded, accelerator)); |
| - |
| - window_manager_->window_manager_client()->AddAccelerators( |
| - ui::CreateAcceleratorVector( |
| - ComputeAcceleratorId(id_namespace_, ids.post_id), |
| - std::move(post_event_matcher)), |
| - base::Bind(OnAcceleratorAdded, accelerator)); |
| + if (add_accelerator_immediately) { |
| + window_manager_->window_manager_client()->AddAccelerators( |
|
mfomitchev
2016/12/22 01:04:50
Can we create an array vector the accelerators we
thanhph
2016/12/22 20:36:01
Done.
|
| + ui::CreateAcceleratorVector( |
| + ComputeAcceleratorId(id_namespace_, ids.pre_id), |
| + std::move(event_matcher)), |
| + base::Bind(OnAcceleratorAdded, accelerator)); |
| + |
| + window_manager_->window_manager_client()->AddAccelerators( |
| + ui::CreateAcceleratorVector( |
| + ComputeAcceleratorId(id_namespace_, ids.post_id), |
| + std::move(post_event_matcher)), |
| + base::Bind(OnAcceleratorAdded, accelerator)); |
| + } else { |
| + accelerator_ptrs_.push_back( |
| + ui::CreateAccelerator(ComputeAcceleratorId(id_namespace_, ids.pre_id), |
| + std::move(event_matcher))); |
| + accelerator_ptrs_.push_back( |
| + ui::CreateAccelerator(ComputeAcceleratorId(id_namespace_, ids.post_id), |
| + std::move(post_event_matcher))); |
| + } |
| } |
| void AcceleratorControllerRegistrar::OnAcceleratorUnregistered( |
| @@ -152,6 +181,13 @@ void AcceleratorControllerRegistrar::OnAcceleratorUnregistered( |
| ComputeAcceleratorId(id_namespace_, ids.post_id)); |
| } |
| +void AcceleratorControllerRegistrar::OnAcceleratorsUnregistered( |
| + std::vector<ui::Accelerator>& accelerators) { |
| + for (auto iter = accelerators.begin(); iter != accelerators.end(); ++iter) { |
| + OnAcceleratorUnregistered(*iter); |
| + } |
| +} |
| + |
| bool AcceleratorControllerRegistrar::GenerateIds(Ids* ids) { |
| if (ids_.size() + 2 >= std::numeric_limits<uint16_t>::max()) |
| return false; |