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 264b914dc26a69c2588cda967a0fe3a490f8550c..9c0c8a53458bca93957fc1d5879258fa60363e14 100644 |
| --- a/ash/mus/accelerators/accelerator_controller_registrar.cc |
| +++ b/ash/mus/accelerators/accelerator_controller_registrar.cc |
| @@ -19,12 +19,10 @@ namespace ash { |
| namespace mus { |
| namespace { |
| -// Callback from registering the accelerator. |
| -void OnAcceleratorAdded(const ui::Accelerator& accelerator, bool added) { |
| - // All our accelerators should be registered, so we expect |added| to be true. |
| - DCHECK(added) << "duplicate accelerator key_code=" << accelerator.key_code() |
| - << " type=" << accelerator.type() |
| - << " modifiers=" << accelerator.modifiers(); |
| +// Callback from registering the accelerators. |
| +void OnAcceleratorVectorAdded(const std::vector<ui::Accelerator>& accelerators, |
| + bool added) { |
| + DCHECK(added) << "Unexpected accelerator vector registration failure."; |
|
mfomitchev
2017/01/26 21:39:49
Please add a comment similar to the one we had in
thanhph1
2017/01/26 22:24:05
Done.
|
| } |
| } // namespace |
| @@ -98,8 +96,36 @@ ui::mojom::EventResult AcceleratorControllerRegistrar::OnAccelerator( |
| : ui::mojom::EventResult::UNHANDLED; |
| } |
| -void AcceleratorControllerRegistrar::OnAcceleratorRegistered( |
| +void AcceleratorControllerRegistrar::OnAcceleratorUnregistered( |
| const ui::Accelerator& accelerator) { |
| + auto iter = accelerator_to_ids_.find(accelerator); |
| + DCHECK(iter != accelerator_to_ids_.end()); |
| + Ids ids = iter->second; |
| + accelerator_to_ids_.erase(iter); |
| + ids_.erase(ids.pre_id); |
| + ids_.erase(ids.post_id); |
| + DCHECK_EQ(accelerator_to_ids_.size() * 2, ids_.size()); |
| + window_manager_->window_manager_client()->RemoveAccelerator( |
| + ComputeAcceleratorId(id_namespace_, ids.pre_id)); |
| + window_manager_->window_manager_client()->RemoveAccelerator( |
| + ComputeAcceleratorId(id_namespace_, ids.post_id)); |
| +} |
| + |
| +void AcceleratorControllerRegistrar::OnAcceleratorVectorRegistered( |
| + const std::vector<ui::Accelerator>& accelerators) { |
| + std::vector<ui::mojom::AcceleratorPtr> accelerator_vector; |
| + |
| + for (auto iter = accelerators.begin(); iter != accelerators.end(); ++iter) |
| + AddAcceleratorToVector(*iter, accelerator_vector); |
| + |
| + window_manager_->window_manager_client()->AddAccelerators( |
| + std::move(accelerator_vector), |
| + base::Bind(OnAcceleratorVectorAdded, accelerators)); |
| +} |
| + |
| +void AcceleratorControllerRegistrar::AddAcceleratorToVector( |
| + const ui::Accelerator& accelerator, |
| + std::vector<ui::mojom::AcceleratorPtr>& accelerator_vector) { |
| Ids ids; |
| if (!GenerateIds(&ids)) { |
| DVLOG(1) << "max number of accelerators registered, dropping request"; |
|
mfomitchev
2017/01/26 21:39:49
Let's turn this into LOG(ERROR) - this seems like
thanhph1
2017/01/26 22:24:05
Done.
|
| @@ -109,46 +135,29 @@ void AcceleratorControllerRegistrar::OnAcceleratorRegistered( |
| accelerator_to_ids_[accelerator] = ids; |
| DCHECK_EQ(accelerator_to_ids_.size() * 2, ids_.size()); |
| - ui::mojom::EventMatcherPtr event_matcher = ui::CreateKeyMatcher( |
| + ui::mojom::EventMatcherPtr pre_event_matcher = ui::CreateKeyMatcher( |
| static_cast<ui::mojom::KeyboardCode>(accelerator.key_code()), |
| accelerator.modifiers()); |
| - event_matcher->accelerator_phase = ui::mojom::AcceleratorPhase::PRE_TARGET; |
| + pre_event_matcher->accelerator_phase = |
| + ui::mojom::AcceleratorPhase::PRE_TARGET; |
| DCHECK(accelerator.type() == ui::ET_KEY_PRESSED || |
| accelerator.type() == ui::ET_KEY_RELEASED); |
| - event_matcher->type_matcher->type = accelerator.type() == ui::ET_KEY_PRESSED |
| - ? ui::mojom::EventType::KEY_PRESSED |
| - : ui::mojom::EventType::KEY_RELEASED; |
| + pre_event_matcher->type_matcher->type = |
| + accelerator.type() == ui::ET_KEY_PRESSED |
| + ? ui::mojom::EventType::KEY_PRESSED |
| + : ui::mojom::EventType::KEY_RELEASED; |
| - ui::mojom::EventMatcherPtr post_event_matcher = event_matcher.Clone(); |
| + ui::mojom::EventMatcherPtr post_event_matcher = pre_event_matcher.Clone(); |
| 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)); |
| -} |
| + accelerator_vector.push_back( |
| + ui::CreateAccelerator(ComputeAcceleratorId(id_namespace_, ids.pre_id), |
| + std::move(pre_event_matcher))); |
| -void AcceleratorControllerRegistrar::OnAcceleratorUnregistered( |
| - const ui::Accelerator& accelerator) { |
| - auto iter = accelerator_to_ids_.find(accelerator); |
| - DCHECK(iter != accelerator_to_ids_.end()); |
| - Ids ids = iter->second; |
| - accelerator_to_ids_.erase(iter); |
| - ids_.erase(ids.pre_id); |
| - ids_.erase(ids.post_id); |
| - DCHECK_EQ(accelerator_to_ids_.size() * 2, ids_.size()); |
| - window_manager_->window_manager_client()->RemoveAccelerator( |
| - ComputeAcceleratorId(id_namespace_, ids.pre_id)); |
| - window_manager_->window_manager_client()->RemoveAccelerator( |
| - ComputeAcceleratorId(id_namespace_, ids.post_id)); |
| + accelerator_vector.push_back( |
| + ui::CreateAccelerator(ComputeAcceleratorId(id_namespace_, ids.post_id), |
| + std::move(post_event_matcher))); |
| } |
| bool AcceleratorControllerRegistrar::GenerateIds(Ids* ids) { |