blob: c2d4c67010e560d687aa06f232eff4d40ca586d1 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_ACCELERATORS_ACCELERATOR_TABLE_H_
#define ASH_ACCELERATORS_ACCELERATOR_TABLE_H_
#include <stddef.h>
#include <array>
#include "ash/ash_export.h"
#include "ash/public/cpp/accelerators.h"
#include "ash/strings/grit/ash_strings.h"
#include "build/branding_buildflags.h"
#include "ui/base/accelerators/accelerator.h"
#include "ui/events/event_constants.h"
#include "ui/events/keycodes/keyboard_codes.h"
namespace ash {
// The complete list of Ash accelerators is in ash/public/cpp/accelerators.h.
// This file mainly keeps track of special categories of accelerator.
//
// There are five classes of accelerators in Ash:
//
// Ash (OS) reserved:
// * Neither packaged apps nor web pages can cancel.
// * For example, power button.
// * See kReservedActions below.
//
// Ash (OS) preferred:
// * Fullscreen window can consume, but normal window can't.
// * For example, Alt-Tab window cycling.
// * See kPreferredActions below.
//
// Chrome OS system keys:
// * For legacy reasons, v1 apps can process and cancel. Otherwise handled
// directly by Ash.
// * Brightness, volume control, etc.
// * See IsSystemKey() in ash/accelerators/accelerator_filter.cc.
//
// Browser reserved:
// * Packaged apps can cancel but web pages cannot.
// * For example, browser back and forward from first-row function keys.
// * See IsReservedCommandOrKey() in
// chrome/browser/ui/browser_command_controller.cc.
//
// Browser non-reserved:
// * Both packaged apps and web pages can cancel.
// * For example, selecting tabs by number with Ctrl-1 to Ctrl-9.
// * See kAcceleratorMap in chrome/browser/ui/views/accelerator_table.cc.
//
// In particular, there is not an accelerator processing pass for Ash after
// the browser gets the accelerator. See crbug.com/285308 for details.
//
// There are also various restrictions on accelerators allowed at the login
// screen, when running in "forced app mode" (like a kiosk), etc. See the
// various kActionsAllowed* below.
// Gathers the needed data to handle deprecated accelerators.
struct DeprecatedAcceleratorData {
// The action that has deprecated accelerators.
AcceleratorAction action;
// The name of the UMA histogram that will be used to measure the deprecated
// v.s. new accelerator usage.
const char* uma_histogram_name;
// The ID of the localized notification message to show to users informing
// them about the deprecation.
int notification_message_id;
// The ID of the localized new shortcut key.
int new_shortcut_id;
// The replacement of the deprecated accelerator.
ui::Accelerator replacement;
// Specifies whether the deprecated accelerator is still enabled to do its
// associated action.
bool deprecated_enabled;
// The accelerator name in the pref dict to check if a deprecated accelerator
// notification is displayed 3 times or within the last 24 hours.
const char* pref_name;
};
// This will be used for the UMA stats to measure the how many users are using
// the old v.s. new accelerators.
enum DeprecatedAcceleratorUsage {
DEPRECATED_USED = 0, // The deprecated accelerator is used.
NEW_USED, // The new accelerator is used.
DEPRECATED_USAGE_COUNT, // Maximum value of this enum for histogram use.
};
// The list of the deprecated accelerators.
// Instructions for how to deprecate and replace an Accelerator:
//
// 1- Replace the old deprecated accelerator from the above list with the new
// accelerator that will take its place.
// 2- Add an entry for it in the following |kDeprecatedAccelerators| list.
// 3- Add another entry in the |kDeprecatedAcceleratorsData|.
// 4- That entry should contain the following:
// - The action that the deprecated accelerator maps to.
// - Define a histogram for this action in |histograms.xml| in the form
// "Ash.Accelerators.Deprecated.{ActionName}" and include the name of this
// histogram in this entry. This name will be used as the ID of the
// notification to be shown to the user. This is to prevent duplication of
// same notification.
// - The ID of the localized notification message to give the users telling
// them about the deprecation (Add one in |ash_strings.grd|. Search for
// the comment <!-- Deprecated Accelerators Messages -->).
// - The IDs of the localized old and new shortcut text to be used to fill
// the notification text. Also found in |ash_strings.grd|.
// - {true or false} whether the deprecated accelerator is still enabled (we
// don't disable a deprecated accelerator abruptly).
ASH_EXPORT inline constexpr auto kDeprecatedAccelerators =
std::to_array<AcceleratorData>({
{true, ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
AcceleratorAction::kShowShortcutViewer},
{true, ui::VKEY_OEM_2,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN,
AcceleratorAction::kShowShortcutViewer},
{true, ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN,
AcceleratorAction::kOpenGetHelp},
{true, ui::VKEY_OEM_2, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
AcceleratorAction::kOpenGetHelp},
});
// The list of the actions with deprecated accelerators and the needed data to
// handle them.
// When removing entries from kDeprecatedAcceleratorsData, also clean up their
// prefs in kDeprecatedAcceleratorNotificationsShownCounts and
// kDeprecatedAcceleratorNotificationsLastShown.
ASH_EXPORT inline constexpr auto kDeprecatedAcceleratorsData =
std::to_array<DeprecatedAcceleratorData>(
{{AcceleratorAction::kShowShortcutViewer,
"Ash.Accelerators.Deprecated.ShowShortcutViewer",
IDS_DEPRECATED_SHOW_SHORTCUT_VIEWER_MSG,
IDS_SHORTCUT_SHOW_SHORTCUT_VIEWER_NEW,
ui::Accelerator(ui::VKEY_S,
ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN),
false, "show_shortcut_viewer"},
{AcceleratorAction::kOpenGetHelp,
"Ash.Accelerators.Deprecated.ShowShortcutViewer",
IDS_DEPRECATED_OPEN_GET_HELP_MSG, IDS_SHORTCUT_OPEN_GET_HELP_NEW,
ui::Accelerator(ui::VKEY_H, ui::EF_COMMAND_DOWN), false,
"open_get_help"}});
// Debug accelerators. Debug accelerators are only enabled when the "Debugging
// keyboard shortcuts" flag (--ash-debug-shortcuts) is enabled. Debug actions
// are always run (similar to reserved actions). Debug accelerators can be
// enabled in about:flags.
ASH_EXPORT inline constexpr auto kDebugAcceleratorData =
std::to_array<AcceleratorData>({
{true, ui::VKEY_N, kDebugModifier, AcceleratorAction::kToggleWifi},
{true, ui::VKEY_X, kDebugModifier,
AcceleratorAction::kDebugKeyboardBacklightToggle},
{true, ui::VKEY_M, kDebugModifier,
AcceleratorAction::kDebugMicrophoneMuteToggle},
{true, ui::VKEY_9, kDebugModifier,
AcceleratorAction::kDebugShowInformedRestore},
{true, ui::VKEY_O, kDebugModifier, AcceleratorAction::kDebugShowToast},
{true, ui::VKEY_J, kDebugModifier,
AcceleratorAction::kDebugShowSystemNudge},
{true, ui::VKEY_Z, kDebugModifier,
AcceleratorAction::kDebugSystemUiStyleViewer},
{true, ui::VKEY_P, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN,
AcceleratorAction::kDebugToggleTouchPad},
{true, ui::VKEY_T, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN,
AcceleratorAction::kDebugToggleTouchScreen},
{true, ui::VKEY_T, kDebugModifier,
AcceleratorAction::kDebugToggleTabletMode},
{true, ui::VKEY_A, kDebugModifier,
AcceleratorAction::kDebugToggleVideoConferenceCameraTrayIcon},
{true, ui::VKEY_B, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
AcceleratorAction::kDebugToggleWallpaperMode},
{true, ui::VKEY_L, kDebugModifier,
AcceleratorAction::kDebugPrintLayerHierarchy},
{true, ui::VKEY_V, kDebugModifier,
AcceleratorAction::kDebugPrintViewHierarchy},
{true, ui::VKEY_W, kDebugModifier,
AcceleratorAction::kDebugPrintWindowHierarchy},
{true, ui::VKEY_B, kDebugModifier,
AcceleratorAction::kDebugToggleShowDebugBorders},
{true, ui::VKEY_F, kDebugModifier,
AcceleratorAction::kDebugToggleShowFpsCounter},
{true, ui::VKEY_P, kDebugModifier,
AcceleratorAction::kDebugToggleShowPaintRects},
{true, ui::VKEY_K, kDebugModifier,
AcceleratorAction::kDebugTriggerCrash},
{true, ui::VKEY_G, kDebugModifier,
AcceleratorAction::kDebugToggleHudDisplay},
{true, ui::VKEY_Q, kDebugModifier,
AcceleratorAction::kDebugToggleVirtualTrackpad},
{true, ui::VKEY_D, kDebugModifier,
AcceleratorAction::kDebugToggleDarkMode},
{true, ui::VKEY_Y, kDebugModifier,
AcceleratorAction::kDebugToggleDynamicColor},
{true, ui::VKEY_E, kDebugModifier,
AcceleratorAction::kDebugTogglePowerButtonMenu},
{true, ui::VKEY_C, kDebugModifier,
AcceleratorAction::kDebugClearUseKMeansPref},
{true, ui::VKEY_H, kDebugModifier,
AcceleratorAction::kDebugToggleFocusModeState},
{true, ui::VKEY_8, kDebugModifier,
AcceleratorAction::kDebugStartSunfishSession},
{true, ui::VKEY_0, kDebugModifier,
AcceleratorAction::kDebugShowTestWindow},
});
// Developer accelerators that are enabled only with the command-line switch
// --ash-dev-shortcuts. They are always run similar to reserved actions.
ASH_EXPORT inline constexpr auto kDeveloperAcceleratorData = std::to_array<
AcceleratorData>({
// Extra shortcut for debug build to control magnifier on Linux desktop.
{true, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN,
AcceleratorAction::kMagnifierZoomOut},
{true, ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN,
AcceleratorAction::kMagnifierZoomIn},
// Extra shortcuts to lock the screen on Linux desktop.
{true, ui::VKEY_L, ui::EF_ALT_DOWN, AcceleratorAction::kLockPressed},
{false, ui::VKEY_L, ui::EF_ALT_DOWN, AcceleratorAction::kLockReleased},
{true, ui::VKEY_P, ui::EF_ALT_DOWN, AcceleratorAction::kPowerPressed},
{false, ui::VKEY_P, ui::EF_ALT_DOWN, AcceleratorAction::kPowerReleased},
{true, ui::VKEY_POWER, ui::EF_SHIFT_DOWN, AcceleratorAction::kLockPressed},
{false, ui::VKEY_POWER, ui::EF_SHIFT_DOWN,
AcceleratorAction::kLockReleased},
{true, ui::VKEY_D, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
AcceleratorAction::kDevAddRemoveDisplay},
{true, ui::VKEY_U, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
AcceleratorAction::kDevToggleUnifiedDesktop},
{true, ui::VKEY_M, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
AcceleratorAction::kToggleMirrorMode},
{true, ui::VKEY_W, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
AcceleratorAction::kToggleWifi},
// Extra shortcut for display swapping as Alt-F4 is taken on Linux desktop.
{true, ui::VKEY_S, kDebugModifier, AcceleratorAction::kSwapPrimaryDisplay},
// Extra shortcut to rotate/scale up/down the screen on Linux desktop.
{true, ui::VKEY_R, kDebugModifier, AcceleratorAction::kRotateScreen},
// For testing on systems where Alt-Tab is already mapped.
{true, ui::VKEY_W, ui::EF_ALT_DOWN, AcceleratorAction::kCycleForwardMru},
{true, ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
AcceleratorAction::kCycleBackwardMru},
{true, ui::VKEY_F, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
AcceleratorAction::kToggleFullscreen},
// For testing on Linux desktop where it's hard to rebind the caps lock key.
{true, ui::VKEY_A, ui::EF_ALT_DOWN, AcceleratorAction::kDevToggleAppList},
{true, ui::VKEY_S, ui::EF_ALT_DOWN, AcceleratorAction::kTogglePicker},
// For testing fingerprint ui.
{true, ui::VKEY_1, kDebugModifier, kTouchFingerprintSensor1},
{true, ui::VKEY_2, kDebugModifier, kTouchFingerprintSensor2},
{true, ui::VKEY_3, kDebugModifier, kTouchFingerprintSensor3},
});
// Actions that should be handled very early in Ash unless the current target
// window is full-screen.
ASH_EXPORT inline constexpr std::array kPreferredActions = {
// Window cycling accelerators.
AcceleratorAction::kCycleBackwardMru, // Shift+Alt+Tab
AcceleratorAction::kCycleForwardMru, // Alt+Tab
AcceleratorAction::kCycleSameAppWindowsBackward, // Shift+Alt+Backtick
AcceleratorAction::kCycleSameAppWindowsForward, // Alt+Backtick
// Pass through debug shortcuts so that these works on Fullscreen Chrome
// Remote Desktop.
AcceleratorAction::kDebugPrintLayerHierarchy,
AcceleratorAction::kDebugPrintViewHierarchy,
AcceleratorAction::kDebugPrintWindowHierarchy,
AcceleratorAction::kDebugShowSystemNudge,
AcceleratorAction::kDebugToggleHudDisplay,
AcceleratorAction::kDebugToggleTouchPad,
AcceleratorAction::kDebugToggleTouchScreen,
AcceleratorAction::kDebugToggleTabletMode,
};
// Actions that are always handled in Ash.
ASH_EXPORT inline constexpr std::array kReservedActions = {
AcceleratorAction::kPowerPressed, AcceleratorAction::kPowerReleased,
AcceleratorAction::kLockPressed, AcceleratorAction::kLockReleased,
AcceleratorAction::kSuspend, AcceleratorAction::kLockScreen,
};
// Actions allowed while user is not signed in or screen is locked.
ASH_EXPORT inline constexpr std::array kActionsAllowedAtLoginOrLockScreen = {
AcceleratorAction::kBrightnessDown,
AcceleratorAction::kBrightnessUp,
AcceleratorAction::kDebugPrintLayerHierarchy,
AcceleratorAction::kDebugPrintViewHierarchy,
AcceleratorAction::kDebugPrintWindowHierarchy,
AcceleratorAction::kDebugShowSystemNudge,
AcceleratorAction::kDebugToggleHudDisplay,
AcceleratorAction::kDebugToggleTouchPad,
AcceleratorAction::kDebugToggleTouchScreen,
AcceleratorAction::kDebugToggleTabletMode,
AcceleratorAction::kDevAddRemoveDisplay,
AcceleratorAction::kDisableCapsLock,
AcceleratorAction::kEnableSelectToSpeak,
AcceleratorAction::kEnableOrToggleDictation,
AcceleratorAction::kKeyboardBacklightToggle,
AcceleratorAction::kKeyboardBrightnessDown,
AcceleratorAction::kKeyboardBrightnessUp,
AcceleratorAction::kMagnifierZoomIn, // Control+F7
AcceleratorAction::kMagnifierZoomOut, // Control+F6
AcceleratorAction::kMediaFastForward,
AcceleratorAction::kMediaNextTrack,
AcceleratorAction::kMediaPause,
AcceleratorAction::kMediaPlay,
AcceleratorAction::kMediaPlayPause,
AcceleratorAction::kMediaPrevTrack,
AcceleratorAction::kMediaRewind,
AcceleratorAction::kMediaStop,
AcceleratorAction::kMicrophoneMuteToggle,
AcceleratorAction::kPrivacyScreenToggle,
AcceleratorAction::kPrintUiHierarchies,
AcceleratorAction::kRotateScreen,
AcceleratorAction::kScaleUiDown,
AcceleratorAction::kScaleUiReset,
AcceleratorAction::kScaleUiUp,
AcceleratorAction::kToggleImeMenuBubble,
AcceleratorAction::kSwitchToLastUsedIme,
AcceleratorAction::kSwitchToNextIme,
AcceleratorAction::kTakeScreenshot,
AcceleratorAction::kToggleCalendar,
AcceleratorAction::kToggleCapsLock,
AcceleratorAction::kToggleDockedMagnifier,
AcceleratorAction::kToggleFullscreenMagnifier,
AcceleratorAction::kToggleHighContrast,
AcceleratorAction::kToggleMirrorMode,
AcceleratorAction::kTogglePicker,
AcceleratorAction::kToggleSpokenFeedback,
AcceleratorAction::kToggleSystemTrayBubble,
AcceleratorAction::kToggleWifi,
AcceleratorAction::kTouchHudClear,
AcceleratorAction::kTouchFingerprintSensor1,
AcceleratorAction::kTouchFingerprintSensor2,
AcceleratorAction::kTouchFingerprintSensor3,
AcceleratorAction::kVolumeDown,
AcceleratorAction::kVolumeMute,
AcceleratorAction::kVolumeUp,
#if !defined(NDEBUG)
AcceleratorAction::kPowerPressed,
AcceleratorAction::kPowerReleased,
#endif // !defined(NDEBUG)
};
// Actions allowed while screen is locked (in addition to
// kActionsAllowedAtLoginOrLockScreen).
ASH_EXPORT inline constexpr std::array kActionsAllowedAtLockScreen = {
AcceleratorAction::kDebugToggleFocusModeState,
AcceleratorAction::kExit,
AcceleratorAction::kSuspend,
};
// Actions allowed while power menu is opened.
ASH_EXPORT inline constexpr std::array kActionsAllowedAtPowerMenu = {
AcceleratorAction::kBrightnessDown, AcceleratorAction::kBrightnessUp,
AcceleratorAction::kVolumeDown, AcceleratorAction::kVolumeUp,
AcceleratorAction::kVolumeMute,
};
// Actions allowed while a modal window is up.
ASH_EXPORT inline constexpr std::array kActionsAllowedAtModalWindow = {
AcceleratorAction::kBrightnessDown,
AcceleratorAction::kBrightnessUp,
AcceleratorAction::kDebugKeyboardBacklightToggle,
AcceleratorAction::kDebugMicrophoneMuteToggle,
AcceleratorAction::kDebugToggleTouchPad,
AcceleratorAction::kDebugToggleTouchScreen,
AcceleratorAction::kDevAddRemoveDisplay,
AcceleratorAction::kDisableCapsLock,
AcceleratorAction::kEnableSelectToSpeak,
AcceleratorAction::kEnableOrToggleDictation,
AcceleratorAction::kExit,
AcceleratorAction::kKeyboardBacklightToggle,
AcceleratorAction::kKeyboardBrightnessDown,
AcceleratorAction::kKeyboardBrightnessUp,
AcceleratorAction::kLockScreen,
AcceleratorAction::kMagnifierZoomIn,
AcceleratorAction::kMagnifierZoomOut,
AcceleratorAction::kMediaFastForward,
AcceleratorAction::kMediaNextTrack,
AcceleratorAction::kMediaPause,
AcceleratorAction::kMediaPlay,
AcceleratorAction::kMediaPlayPause,
AcceleratorAction::kMediaPrevTrack,
AcceleratorAction::kMediaRewind,
AcceleratorAction::kMediaStop,
AcceleratorAction::kMicrophoneMuteToggle,
AcceleratorAction::kOpenFeedbackPage,
AcceleratorAction::kPowerPressed,
AcceleratorAction::kPowerReleased,
AcceleratorAction::kPrintUiHierarchies,
AcceleratorAction::kPrivacyScreenToggle,
AcceleratorAction::kRotateScreen,
AcceleratorAction::kScaleUiDown,
AcceleratorAction::kScaleUiReset,
AcceleratorAction::kScaleUiUp,
AcceleratorAction::kToggleImeMenuBubble,
AcceleratorAction::kShowShortcutViewer,
AcceleratorAction::kSuspend,
AcceleratorAction::kSwapPrimaryDisplay,
AcceleratorAction::kSwitchToLastUsedIme,
AcceleratorAction::kSwitchToNextIme,
AcceleratorAction::kTakePartialScreenshot,
AcceleratorAction::kTakeScreenshot,
AcceleratorAction::kTakeWindowScreenshot,
AcceleratorAction::kToggleCapsLock,
AcceleratorAction::kToggleDockedMagnifier,
AcceleratorAction::kToggleFullscreenMagnifier,
AcceleratorAction::kToggleHighContrast,
AcceleratorAction::kToggleMirrorMode,
AcceleratorAction::kToggleSpokenFeedback,
AcceleratorAction::kTogglePicker,
AcceleratorAction::kToggleWifi,
AcceleratorAction::kTouchFingerprintSensor1,
AcceleratorAction::kTouchFingerprintSensor2,
AcceleratorAction::kTouchFingerprintSensor3,
AcceleratorAction::kVolumeDown,
AcceleratorAction::kVolumeMute,
AcceleratorAction::kVolumeUp,
};
// Actions which may be repeated by holding an accelerator key.
ASH_EXPORT inline constexpr std::array kRepeatableActions = {
AcceleratorAction::kBrightnessDown,
AcceleratorAction::kBrightnessUp,
AcceleratorAction::kFocusNextPane,
AcceleratorAction::kFocusPreviousPane,
AcceleratorAction::kKeyboardBrightnessDown,
AcceleratorAction::kKeyboardBrightnessUp,
AcceleratorAction::kMagnifierZoomIn,
AcceleratorAction::kMagnifierZoomOut,
AcceleratorAction::kMediaFastForward,
AcceleratorAction::kMediaNextTrack,
AcceleratorAction::kMediaPrevTrack,
AcceleratorAction::kMediaRewind,
AcceleratorAction::kRestoreTab,
AcceleratorAction::kTilingWindowResizeDown,
AcceleratorAction::kTilingWindowResizeLeft,
AcceleratorAction::kTilingWindowResizeRight,
AcceleratorAction::kTilingWindowResizeUp,
AcceleratorAction::kVolumeDown,
AcceleratorAction::kVolumeUp,
};
// Actions allowed in app mode or pinned mode.
ASH_EXPORT inline constexpr std::array kActionsAllowedInAppModeOrPinnedMode = {
AcceleratorAction::kBrightnessDown,
AcceleratorAction::kBrightnessUp,
AcceleratorAction::kDebugKeyboardBacklightToggle,
AcceleratorAction::kDebugMicrophoneMuteToggle,
AcceleratorAction::kDebugPrintLayerHierarchy,
AcceleratorAction::kDebugPrintViewHierarchy,
AcceleratorAction::kDebugPrintWindowHierarchy,
AcceleratorAction::kDebugToggleTouchPad,
AcceleratorAction::kDebugToggleTouchScreen,
AcceleratorAction::kDevAddRemoveDisplay,
AcceleratorAction::kDisableCapsLock,
AcceleratorAction::kEnableSelectToSpeak,
AcceleratorAction::kEnableOrToggleDictation,
AcceleratorAction::kKeyboardBacklightToggle,
AcceleratorAction::kKeyboardBrightnessDown,
AcceleratorAction::kKeyboardBrightnessUp,
AcceleratorAction::kMagnifierZoomIn, // Control+F7
AcceleratorAction::kMagnifierZoomOut, // Control+F6
AcceleratorAction::kMediaFastForward,
AcceleratorAction::kMediaNextTrack,
AcceleratorAction::kMediaPause,
AcceleratorAction::kMediaPlay,
AcceleratorAction::kMediaPlayPause,
AcceleratorAction::kMediaPrevTrack,
AcceleratorAction::kMediaRewind,
AcceleratorAction::kMediaStop,
AcceleratorAction::kMicrophoneMuteToggle,
AcceleratorAction::kPasteClipboardHistoryPlainText,
AcceleratorAction::kPowerPressed,
AcceleratorAction::kPowerReleased,
AcceleratorAction::kPrintUiHierarchies,
AcceleratorAction::kPrivacyScreenToggle,
AcceleratorAction::kRotateScreen,
AcceleratorAction::kScaleUiDown,
AcceleratorAction::kScaleUiReset,
AcceleratorAction::kScaleUiUp,
AcceleratorAction::kSwapPrimaryDisplay,
AcceleratorAction::kSwitchToLastUsedIme,
AcceleratorAction::kSwitchToNextIme,
AcceleratorAction::kToggleCapsLock,
AcceleratorAction::kToggleClipboardHistory,
AcceleratorAction::kToggleDockedMagnifier,
AcceleratorAction::kToggleFullscreenMagnifier,
AcceleratorAction::kToggleHighContrast,
AcceleratorAction::kToggleMirrorMode,
AcceleratorAction::kToggleSpokenFeedback,
AcceleratorAction::kToggleWifi,
AcceleratorAction::kTouchHudClear,
AcceleratorAction::kVolumeDown,
AcceleratorAction::kVolumeMute,
AcceleratorAction::kVolumeUp,
};
// Actions that can be performed in pinned mode.
// In pinned mode, the action listed in this or "in app mode or pinned mode"
// table can be performed.
ASH_EXPORT inline constexpr std::array kActionsAllowedInPinnedMode = {
AcceleratorAction::kLockScreen,
AcceleratorAction::kSuspend,
AcceleratorAction::kTakePartialScreenshot,
AcceleratorAction::kTakeScreenshot,
AcceleratorAction::kTakeWindowScreenshot,
AcceleratorAction::kUnpin,
};
// Actions that can be performed in app mode.
// In app mode, the action listed in this or "in app mode or pinned mode" table
// can be performed.
ASH_EXPORT inline constexpr std::array kActionsAllowedInAppMode = {
AcceleratorAction::kFocusShelf,
};
// Actions that require at least 1 window.
ASH_EXPORT inline constexpr std::array kActionsNeedingWindow = {
// clang-format off
AcceleratorAction::kDesksMoveActiveItemLeft,
AcceleratorAction::kDesksMoveActiveItemRight,
AcceleratorAction::kDesksToggleAssignToAllDesks,
AcceleratorAction::kMoveActiveWindowBetweenDisplays,
AcceleratorAction::kRotateWindow,
AcceleratorAction::kTilingWindowResizeDown,
AcceleratorAction::kTilingWindowResizeLeft,
AcceleratorAction::kTilingWindowResizeRight,
AcceleratorAction::kTilingWindowResizeUp,
AcceleratorAction::kToggleFloating,
AcceleratorAction::kToggleFullscreen,
AcceleratorAction::kToggleMaximized,
AcceleratorAction::kToggleSnapGroup,
AcceleratorAction::kToggleSnapGroupWindowsMinimizeAndRestore,
AcceleratorAction::kWindowCycleSnapLeft,
AcceleratorAction::kWindowCycleSnapRight,
AcceleratorAction::kWindowMinimize,
// clang-format on
};
// Actions that can be performed while keeping the menu open.
ASH_EXPORT inline constexpr std::array kActionsKeepingMenuOpen = {
AcceleratorAction::kBrightnessDown,
AcceleratorAction::kBrightnessUp,
AcceleratorAction::kDebugKeyboardBacklightToggle,
AcceleratorAction::kDebugMicrophoneMuteToggle,
AcceleratorAction::kDebugToggleTouchPad,
AcceleratorAction::kDebugToggleTouchScreen,
// Keep the menu open when switching desks. The desk activation code will
// close the menu without animation manually. Otherwise, the menu will fade
// out and a trace will be visible while switching desks.
AcceleratorAction::kDesksActivateDeskLeft,
AcceleratorAction::kDesksActivateDeskRight,
AcceleratorAction::kDesksNewDesk,
AcceleratorAction::kDesksRemoveCurrentDesk,
AcceleratorAction::kDisableCapsLock,
AcceleratorAction::kEnableSelectToSpeak,
AcceleratorAction::kEnableOrToggleDictation,
AcceleratorAction::kKeyboardBacklightToggle,
AcceleratorAction::kKeyboardBrightnessDown,
AcceleratorAction::kKeyboardBrightnessUp,
AcceleratorAction::kMediaFastForward,
AcceleratorAction::kMediaNextTrack,
AcceleratorAction::kMediaPause,
AcceleratorAction::kMediaPlay,
AcceleratorAction::kMediaPlayPause,
AcceleratorAction::kMediaPrevTrack,
AcceleratorAction::kMediaRewind,
AcceleratorAction::kMediaStop,
AcceleratorAction::kMicrophoneMuteToggle,
AcceleratorAction::kPasteClipboardHistoryPlainText,
AcceleratorAction::kPrintUiHierarchies,
AcceleratorAction::kPrivacyScreenToggle,
AcceleratorAction::kSwitchToLastUsedIme,
AcceleratorAction::kSwitchToNextIme,
AcceleratorAction::kTakePartialScreenshot,
AcceleratorAction::kTakeScreenshot,
AcceleratorAction::kTakeWindowScreenshot,
AcceleratorAction::kToggleAppList,
AcceleratorAction::kToggleCapsLock,
AcceleratorAction::kToggleClipboardHistory,
AcceleratorAction::kToggleDockedMagnifier,
AcceleratorAction::kToggleFullscreenMagnifier,
AcceleratorAction::kToggleHighContrast,
AcceleratorAction::kToggleSpokenFeedback,
AcceleratorAction::kToggleWifi,
AcceleratorAction::kVolumeDown,
AcceleratorAction::kVolumeMute,
AcceleratorAction::kVolumeUp,
};
// Actions that are duplicated with browser shortcuts.
ASH_EXPORT inline constexpr std::array kActionsDuplicatedWithBrowser = {
// clang-format off
AcceleratorAction::kNewWindow,
AcceleratorAction::kNewIncognitoWindow,
AcceleratorAction::kRestoreTab,
AcceleratorAction::kNewTab,
AcceleratorAction::kToggleMultitaskMenu,
// clang-format on
// kOpenFeedbackPage has two accelerators in browser:
// 1: [alt shift i] guarded by GOOGLE_CHROME_BRANDING.
// 2: [search ctrl i] guarded by both GOOGLE_CHROME_BRANDING and IS_CHROMEOS.
// This file is built only for ash-chrome, so we only need to check BRANDING
// macro.
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
AcceleratorAction::kOpenFeedbackPage,
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
};
// Actions that are interceptable by browser.
// These actions are ash's shortcuts, but they are sent to the browser
// once in order to make it interceptable by webpage/apps.
ASH_EXPORT inline constexpr std::array kActionsInterceptableByBrowser = {
AcceleratorAction::kShowTaskManager,
AcceleratorAction::kOpenGetHelp,
AcceleratorAction::kMinimizeTopWindowOnBack,
};
} // namespace ash
#endif // ASH_ACCELERATORS_ACCELERATOR_TABLE_H_