0
Files
src/ash/accelerators
Sanja Perisic c78ab72bf3 Move remaining annotator methods from projector
Move all annotator-related methods from projector to annotator
controller.

Test video: https://drive.google.com/file/d/16T_-b-_XSZEb_R-6LXEoZjnFwBb_-FIR/view?usp=sharing&resourcekey=0-fdGMOOAzxxJxo_cCWYUSPg

Bug: 342104047
Change-Id: I99279d94243549c20d5956920f12e3bf1083409c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5644870
Reviewed-by: Ahmed Fakhry <afakhry@chromium.org>
Commit-Queue: Sanja Perisic <sanjaperisic@chromium.org>
Reviewed-by: Benjamin Zielinski <bzielinski@google.com>
Cr-Commit-Position: refs/heads/main@{#1320286}
2024-06-27 12:37:13 +00:00
..
2024-05-28 17:43:57 +00:00

This directory contains code for handling accelerators in Ash. The following documents the flow of accelerators.

  1. wm::AcceleratorFilter() sees events first as it's a pre-target handler on Shell.
  2. wm::AcceleratorFilter calls to PreTargetAcceleratorHandler.
  3. PreTargetAcceleratorHandler handles accelerators that need to be handled early on, such as system keys. This does not include accelerators such as control-n (for new window).
  4. If focus is on a Widget, then views handles the accelerator.
  5. Views does normally processing first (meaning sends to the focused view). If the focused view doesn't handle the event, then Views sends to the FocusManager.
  6. FocusManager::OnKeyEvent() calls PostTargetAcceleratorHandler::ProcessAccelerator().
  7. PostTargetAcceleratorHandler::ProcessAccelerator() calls to Ash's AcceleratorController.

Steps 1-3 give Ash the opportunity to have accelerators before the target (these are often referred to as pre-target accelerators). Step 4-5 allows the target to handle the accelerator. Step 6-7 allow for post-target accelerators (accelerators that only occur if the target does not handle the accelerator).

Steps 4-7 differ if focus is on a remote window (a window created at the request of a client connecting by way of the WindowService). If focus is on a remote window, then step 4-7 are replaced with:

  1. WindowService waits for response from remote client.
  2. If remote client does not handle the event, WindowService calls WindowServiceDelegate::OnUnhandledKeyEvent().
  3. Ash's WindowServiceDelegateImpl::OnUnhandledKeyEvent() calls to AcceleratorController::Process(), which handles the post-target processing phase.