ash_focus_manager_factory.cc 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/accelerators/ash_focus_manager_factory.h"
  5. #include <memory>
  6. #include "ash/accelerators/accelerator_controller_impl.h"
  7. #include "ash/accessibility/magnifier/docked_magnifier_controller.h"
  8. #include "ash/accessibility/magnifier/fullscreen_magnifier_controller.h"
  9. #include "ash/shell.h"
  10. #include "ui/base/ime/text_input_client.h"
  11. #include "ui/views/focus/focus_manager.h"
  12. #include "ui/views/focus/focus_manager_delegate.h"
  13. #include "ui/views/view.h"
  14. namespace ash {
  15. namespace {
  16. // As the name implies, this class is responsible for handling accelerators
  17. // *after* pre-target accelerators and after the target is given a chance to
  18. // process the accelerator.
  19. class PostTargetAcceleratorHandler : public views::FocusManagerDelegate {
  20. public:
  21. PostTargetAcceleratorHandler() = default;
  22. PostTargetAcceleratorHandler(const PostTargetAcceleratorHandler&) = delete;
  23. PostTargetAcceleratorHandler& operator=(const PostTargetAcceleratorHandler&) =
  24. delete;
  25. ~PostTargetAcceleratorHandler() override = default;
  26. // views::FocusManagerDelegate overrides:
  27. bool ProcessAccelerator(const ui::Accelerator& accelerator) override;
  28. };
  29. bool PostTargetAcceleratorHandler::ProcessAccelerator(
  30. const ui::Accelerator& accelerator) {
  31. AcceleratorController* controller = Shell::Get()->accelerator_controller();
  32. return controller && controller->Process(accelerator);
  33. }
  34. } // namespace
  35. AshFocusManagerFactory::AshFocusManagerFactory() = default;
  36. AshFocusManagerFactory::~AshFocusManagerFactory() = default;
  37. std::unique_ptr<views::FocusManager> AshFocusManagerFactory::CreateFocusManager(
  38. views::Widget* widget) {
  39. return std::make_unique<views::FocusManager>(
  40. widget, std::make_unique<PostTargetAcceleratorHandler>());
  41. }
  42. } // namespace ash