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..3b4fbf1aa8afe7f7a3662f2102ec5997fc2422a9 100644 |
| --- a/ash/mus/accelerators/accelerator_controller_registrar.cc |
| +++ b/ash/mus/accelerators/accelerator_controller_registrar.cc |
| @@ -27,7 +27,15 @@ void OnAcceleratorAdded(const ui::Accelerator& accelerator, bool added) { |
| << " modifiers=" << accelerator.modifiers(); |
| } |
| +// Callback from registering the accelerators. |
| +void OnAcceleratorVectorAdded( |
| + const std::vector<ui::Accelerator>& ui_accelerators, |
|
mfomitchev
2017/01/24 22:56:02
For consistency:
ui_accelerators -> accelerators
thanhph1
2017/01/25 20:12:37
Done.
|
| + bool added) { |
| + for (auto iter = ui_accelerators.begin(); iter != ui_accelerators.end(); |
| + ++iter) |
| + OnAcceleratorAdded(*iter, added); |
|
mfomitchev
2017/01/24 22:56:02
This will result in misleading DCHECK errors: if t
thanhph1
2017/01/25 20:12:37
Acknowledged. Since |added| is a variable and not
mfomitchev
2017/01/26 16:03:36
This was the reason I asked you to add logging in
|
| } // namespace |
| +} |
| AcceleratorControllerRegistrar::AcceleratorControllerRegistrar( |
| WindowManager* window_manager, |
| @@ -98,41 +106,15 @@ ui::mojom::EventResult AcceleratorControllerRegistrar::OnAccelerator( |
| : ui::mojom::EventResult::UNHANDLED; |
| } |
| +// add_accelerator_immediately default set to true. |
|
mfomitchev
2017/01/24 22:56:02
Is this leftover from previous revision?
thanhph1
2017/01/25 20:12:37
Oops. I removed it. Thanks!
|
| void AcceleratorControllerRegistrar::OnAcceleratorRegistered( |
| const ui::Accelerator& accelerator) { |
| - Ids ids; |
| - if (!GenerateIds(&ids)) { |
| - DVLOG(1) << "max number of accelerators registered, dropping request"; |
| - return; |
| - } |
| - DCHECK_EQ(0u, accelerator_to_ids_.count(accelerator)); |
| - accelerator_to_ids_[accelerator] = ids; |
| - DCHECK_EQ(accelerator_to_ids_.size() * 2, ids_.size()); |
| - |
| - ui::mojom::EventMatcherPtr event_matcher = ui::CreateKeyMatcher( |
| - static_cast<ui::mojom::KeyboardCode>(accelerator.key_code()), |
| - accelerator.modifiers()); |
| - 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; |
| + std::vector<ui::mojom::AcceleratorPtr> accelerator_vector; |
| - ui::mojom::EventMatcherPtr post_event_matcher = event_matcher.Clone(); |
| - post_event_matcher->accelerator_phase = |
| - ui::mojom::AcceleratorPhase::POST_TARGET; |
| + AddAcceleratorToVector(accelerator, accelerator_vector); |
| 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)), |
| + std::move(accelerator_vector), |
| base::Bind(OnAcceleratorAdded, accelerator)); |
| } |
| @@ -151,6 +133,55 @@ void AcceleratorControllerRegistrar::OnAcceleratorUnregistered( |
| 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)); |
|
mfomitchev
2017/01/24 22:56:02
Because AddAcceleratorToVector may abort when Gene
thanhph1
2017/01/25 20:12:37
I think accelerator_vector is already used in std:
mfomitchev
2017/01/26 21:39:48
Ok. Then lets not pass accelerators vector to OnAc
|
| +} |
| + |
| +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"; |
| + return; |
| + } |
| + DCHECK_EQ(0u, accelerator_to_ids_.count(accelerator)); |
| + accelerator_to_ids_[accelerator] = ids; |
| + DCHECK_EQ(accelerator_to_ids_.size() * 2, ids_.size()); |
| + |
| + ui::mojom::EventMatcherPtr pre_event_matcher = ui::CreateKeyMatcher( |
| + static_cast<ui::mojom::KeyboardCode>(accelerator.key_code()), |
| + accelerator.modifiers()); |
| + pre_event_matcher->accelerator_phase = |
| + ui::mojom::AcceleratorPhase::PRE_TARGET; |
| + DCHECK(accelerator.type() == ui::ET_KEY_PRESSED || |
| + accelerator.type() == ui::ET_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 = pre_event_matcher.Clone(); |
| + post_event_matcher->accelerator_phase = |
| + ui::mojom::AcceleratorPhase::POST_TARGET; |
| + |
| + accelerator_vector.push_back( |
| + ui::CreateAccelerator(ComputeAcceleratorId(id_namespace_, ids.pre_id), |
| + std::move(pre_event_matcher))); |
| + |
| + accelerator_vector.push_back( |
| + ui::CreateAccelerator(ComputeAcceleratorId(id_namespace_, ids.post_id), |
| + std::move(post_event_matcher))); |
| +} |
| + |
| bool AcceleratorControllerRegistrar::GenerateIds(Ids* ids) { |
| if (ids_.size() + 2 >= std::numeric_limits<uint16_t>::max()) |
| return false; |