| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/shortcut_viewer/keyboard_shortcut_viewer_metadata.h" |
| |
| #include "ash/constants/ash_features.h" |
| #include "ash/public/cpp/keyboard_shortcut_item.h" |
| #include "ash/shortcut_viewer/strings/grit/shortcut_viewer_strings.h" |
| #include "ash/shortcut_viewer/vector_icons/vector_icons.h" |
| #include "base/check.h" |
| #include "base/feature_list.h" |
| #include "base/no_destructor.h" |
| #include "base/notreached.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "ui/base/accelerators/accelerator.h" |
| #include "ui/base/l10n/l10n_util.h" |
| #include "ui/base/ui_base_features.h" |
| #include "ui/chromeos/events/keyboard_layout_util.h" |
| #include "ui/events/devices/device_data_manager.h" |
| #include "ui/events/event_constants.h" |
| #include "ui/events/keycodes/dom/dom_code.h" |
| #include "ui/events/keycodes/dom/dom_codes.h" |
| #include "ui/events/keycodes/dom/dom_key.h" |
| #include "ui/events/keycodes/dom/keycode_converter.h" |
| #include "ui/events/keycodes/keyboard_code_conversion.h" |
| #include "ui/events/keycodes/keyboard_codes_posix.h" |
| #include "ui/events/ozone/layout/keyboard_layout_engine.h" |
| #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" |
| #include "ui/gfx/vector_icon_types.h" |
| |
| namespace keyboard_shortcut_viewer { |
| |
| using ash::ShortcutCategory; |
| |
| namespace { |
| |
| // Gets the keyboard codes for modifiers. |
| ui::KeyboardCode GetKeyCodeForModifier(ui::EventFlags modifier) { |
| switch (modifier) { |
| case ui::EF_CONTROL_DOWN: |
| return ui::VKEY_CONTROL; |
| case ui::EF_ALT_DOWN: |
| return ui::VKEY_LMENU; |
| case ui::EF_SHIFT_DOWN: |
| return ui::VKEY_SHIFT; |
| case ui::EF_COMMAND_DOWN: |
| return ui::VKEY_COMMAND; |
| default: |
| NOTREACHED(); |
| return ui::VKEY_UNKNOWN; |
| } |
| } |
| |
| // Provides I18n string for key codes which have no mapping to a meaningful |
| // description or they require a special one we explicitly specify. For example, |
| // ui::VKEY_COMMAND could return a string "Meta", but we want to display it as |
| // "Search" or "Launcher". |
| absl::optional<std::u16string> GetSpecialStringForKeyboardCode( |
| ui::KeyboardCode key_code) { |
| int msg_id = 0; |
| switch (key_code) { |
| case ui::VKEY_CONTROL: |
| msg_id = IDS_KSV_MODIFIER_CONTROL; |
| break; |
| case ui::VKEY_LMENU: |
| msg_id = IDS_KSV_MODIFIER_ALT; |
| break; |
| case ui::VKEY_SHIFT: |
| msg_id = IDS_KSV_MODIFIER_SHIFT; |
| break; |
| case ui::VKEY_COMMAND: |
| // DeviceUsesKeyboardLayout2() relies on DeviceDataManager. |
| DCHECK(ui::DeviceDataManager::HasInstance()); |
| DCHECK(ui::DeviceDataManager::GetInstance()->AreDeviceListsComplete()); |
| msg_id = ui::DeviceUsesKeyboardLayout2() ? IDS_KSV_MODIFIER_LAUNCHER |
| : IDS_KSV_MODIFIER_SEARCH; |
| break; |
| case ui::VKEY_ESCAPE: |
| msg_id = IDS_KSV_KEY_ESCAPE; |
| break; |
| case ui::VKEY_SPACE: |
| msg_id = IDS_KSV_KEY_SPACE; |
| break; |
| case ui::VKEY_MEDIA_LAUNCH_APP1: |
| msg_id = IDS_KSV_KEY_OVERVIEW; |
| break; |
| case ui::VKEY_ZOOM: |
| msg_id = IDS_KSV_KEY_FULLSCREEN; |
| break; |
| case ui::VKEY_SNAPSHOT: |
| msg_id = IDS_KSV_KEY_SNAPSHOT; |
| break; |
| case ui::VKEY_UNKNOWN: |
| // TODO(wutao): make this reliable. |
| // If this is VKEY_UNKNOWN, it indicates to insert a "+" separator. Use |
| // one plus and one space to replace the string resourece's placeholder so |
| // that the separator will not conflict with the replacement string for |
| // "VKEY_OEM_PLUS", which is "+" and "VKEY_SPACE", which is "Space". |
| return u"+ "; |
| default: |
| return absl::nullopt; |
| } |
| return l10n_util::GetStringUTF16(msg_id); |
| } |
| |
| // Dead keys work by combining two consecutive keystrokes together. The first |
| // keystroke does not produce an output character, it acts as a one-shot |
| // modifier for a subsequent keystroke. So for example on a German keyboard, |
| // pressing the acute ´ dead key, then pressing the letter e will produce é. |
| // The first character is called the combining character and does not produce |
| // an output glyph. This table maps the combining character to a string |
| // containing the non-combining equivalent that can be displayed. |
| std::u16string GetStringForDeadKey(ui::DomKey dom_key) { |
| DCHECK(dom_key.IsDeadKey()); |
| int32_t ch = dom_key.ToDeadKeyCombiningCharacter(); |
| switch (ch) { |
| // Combining grave. |
| case 0x300: |
| return u"`"; |
| // Combining acute. |
| case 0x301: |
| return u"´"; |
| // Combining circumflex. |
| case 0x302: |
| return u"^"; |
| // Combining tilde. |
| case 0x303: |
| return u"~"; |
| // Combining diaeresis. |
| case 0x308: |
| return u"¨"; |
| default: |
| break; |
| } |
| |
| LOG(WARNING) << "No mapping for dead key shortcut " << ch; |
| return base::UTF8ToUTF16(ui::KeycodeConverter::DomKeyToKeyString(dom_key)); |
| } |
| |
| } // namespace |
| |
| std::u16string GetStringForCategory(ShortcutCategory category) { |
| int msg_id = 0; |
| switch (category) { |
| case ShortcutCategory::kPopular: |
| msg_id = IDS_KSV_CATEGORY_POPULAR; |
| break; |
| case ShortcutCategory::kTabAndWindow: |
| msg_id = IDS_KSV_CATEGORY_TAB_WINDOW; |
| break; |
| case ShortcutCategory::kPageAndBrowser: |
| msg_id = IDS_KSV_CATEGORY_PAGE_BROWSER; |
| break; |
| case ShortcutCategory::kSystemAndDisplay: |
| msg_id = IDS_KSV_CATEGORY_SYSTEM_DISPLAY; |
| break; |
| case ShortcutCategory::kTextEditing: |
| msg_id = IDS_KSV_CATEGORY_TEXT_EDITING; |
| break; |
| case ShortcutCategory::kAccessibility: |
| msg_id = IDS_KSV_CATEGORY_ACCESSIBILITY; |
| break; |
| default: |
| NOTREACHED(); |
| return std::u16string(); |
| } |
| return l10n_util::GetStringUTF16(msg_id); |
| } |
| |
| std::u16string GetStringForKeyboardCode(ui::KeyboardCode key_code, |
| bool remap_positional_key) { |
| const absl::optional<std::u16string> key_label = |
| GetSpecialStringForKeyboardCode(key_code); |
| if (key_label) |
| return key_label.value(); |
| |
| ui::DomKey dom_key; |
| ui::KeyboardCode key_code_to_compare = ui::VKEY_UNKNOWN; |
| const ui::KeyboardLayoutEngine* layout_engine = |
| ui::KeyboardLayoutEngineManager::GetKeyboardLayoutEngine(); |
| |
| // The input |key_code| is the |KeyboardCode| aka VKEY of the shortcut in |
| // the US layout which is registered from the shortcut table. |key_code| |
| // is first mapped to the |DomCode| this key is on in the US layout. If |
| // the key is not positional, this processing is skipped and it is handled |
| // normally in the loop below. For the positional keys, the |DomCode| is |
| // then mapped to the |DomKey| in the current layout which represents the |
| // glyph/character that appears on the key (and usually when typed). |
| if (remap_positional_key && |
| ::features::IsImprovedKeyboardShortcutsEnabled()) { |
| ui::DomCode dom_code = |
| ui::KeycodeConverter::MapUSPositionalShortcutKeyToDomCode(key_code); |
| if (dom_code != ui::DomCode::NONE) { |
| if (layout_engine->Lookup(dom_code, /*flags=*/ui::EF_NONE, &dom_key, |
| &key_code_to_compare)) { |
| if (dom_key.IsDeadKey()) { |
| return GetStringForDeadKey(dom_key); |
| } |
| if (!dom_key.IsValid()) { |
| return std::u16string(); |
| } |
| return base::UTF8ToUTF16( |
| ui::KeycodeConverter::DomKeyToKeyString(dom_key)); |
| } |
| return std::u16string(); |
| } |
| } |
| |
| for (const auto& dom_code : ui::dom_codes) { |
| if (!layout_engine->Lookup(dom_code, /*flags=*/ui::EF_NONE, &dom_key, |
| &key_code_to_compare)) { |
| continue; |
| } |
| if (key_code_to_compare != key_code || !dom_key.IsValid() || |
| dom_key.IsDeadKey()) { |
| continue; |
| } |
| return base::UTF8ToUTF16(ui::KeycodeConverter::DomKeyToKeyString(dom_key)); |
| } |
| return std::u16string(); |
| } |
| |
| std::u16string GetAccessibleNameForKeyboardCode(ui::KeyboardCode key_code) { |
| int msg_id = 0; |
| switch (key_code) { |
| case ui::VKEY_OEM_PERIOD: |
| msg_id = IDS_KSV_KEY_PERIOD_ACCESSIBILITY_NAME; |
| break; |
| case ui::VKEY_OEM_COMMA: |
| msg_id = IDS_KSV_KEY_COMMA_ACCESSIBILITY_NAME; |
| break; |
| case ui::VKEY_OEM_MINUS: |
| msg_id = IDS_KSV_KEY_HYPHEN_ACCESSIBILITY_NAME; |
| break; |
| case ui::VKEY_OEM_4: |
| msg_id = IDS_KSV_KEY_BRACKET_LEFT_ACCESSIBILITY_NAME; |
| break; |
| case ui::VKEY_OEM_6: |
| msg_id = IDS_KSV_KEY_BRACKET_RIGHT_ACCESSIBILITY_NAME; |
| break; |
| default: |
| break; |
| } |
| return msg_id ? l10n_util::GetStringUTF16(msg_id) : std::u16string(); |
| } |
| |
| const gfx::VectorIcon* GetVectorIconForKeyboardCode(ui::KeyboardCode key_code) { |
| switch (key_code) { |
| case ui::VKEY_BROWSER_BACK: |
| return &kKsvBrowserBackIcon; |
| case ui::VKEY_BROWSER_FORWARD: |
| return &kKsvBrowserForwardIcon; |
| case ui::VKEY_BROWSER_REFRESH: |
| return &kKsvReloadIcon; |
| case ui::VKEY_ZOOM: |
| return &kKsvFullscreenIcon; |
| case ui::VKEY_MEDIA_LAUNCH_APP1: |
| return &kKsvOverviewIcon; |
| case ui::VKEY_BRIGHTNESS_DOWN: |
| return &kKsvBrightnessDownIcon; |
| case ui::VKEY_BRIGHTNESS_UP: |
| return &kKsvBrightnessUpIcon; |
| case ui::VKEY_VOLUME_MUTE: |
| return &kKsvMuteIcon; |
| case ui::VKEY_VOLUME_DOWN: |
| return &kKsvVolumeDownIcon; |
| case ui::VKEY_VOLUME_UP: |
| return &kKsvVolumeUpIcon; |
| case ui::VKEY_UP: |
| return &kKsvArrowUpIcon; |
| case ui::VKEY_DOWN: |
| return &kKsvArrowDownIcon; |
| case ui::VKEY_LEFT: |
| return &kKsvArrowLeftIcon; |
| case ui::VKEY_RIGHT: |
| return &kKsvArrowRightIcon; |
| case ui::VKEY_PRIVACY_SCREEN_TOGGLE: |
| return &kKsvPrivacyScreenToggleIcon; |
| case ui::VKEY_SNAPSHOT: |
| return &kKsvSnapshotIcon; |
| default: |
| return nullptr; |
| } |
| } |
| |
| const std::vector<ash::KeyboardShortcutItem>& GetKeyboardShortcutItemList() { |
| static base::NoDestructor<std::vector<ash::KeyboardShortcutItem>> item_list({ |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_TOGGLE_DOCKED_MAGNIFIER, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_D, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_TOGGLE_FULLSCREEN_MAGNIFIER, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_M, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular}, |
| IDS_KSV_DESCRIPTION_LOCK_SCREEN, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_L, ui::EF_COMMAND_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_DISPLAY_ZOOM_OUT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_MINUS, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_DISPLAY_ZOOM_IN, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_PLUS, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_DRAG_LINK_IN_SAME_TAB, |
| IDS_KSV_SHORTCUT_DRAG_LINK_IN_SAME_TAB}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_DRAG_LINK_IN_NEW_TAB, |
| IDS_KSV_SHORTCUT_DRAG_LINK_IN_NEW_TAB}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_HIGHLIGHT_NEXT_ITEM_ON_SHELF, |
| IDS_KSV_SHORTCUT_HIGHLIGHT_NEXT_ITEM_ON_SHELF, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, ui::VKEY_LMENU, ui::VKEY_UNKNOWN, |
| ui::VKEY_L, ui::VKEY_TAB, ui::VKEY_RIGHT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_CYCLE_BACKWARD_MRU, |
| IDS_KSV_SHORTCUT_CYCLE_BACKWARD_MRU, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_LMENU, ui::VKEY_UNKNOWN, ui::VKEY_SHIFT, ui::VKEY_TAB}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_CYCLE_FORWARD_MRU, |
| IDS_KSV_SHORTCUT_CYCLE_FORWARD_MRU, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_LMENU, ui::VKEY_TAB}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_FOCUS_SHELF, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_BOOKMARK_ALL_TABS, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_D, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_BOOKMARK_THIS_TAB, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_D, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_IDC_CLOSE_TAB, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_W, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_IDC_CLOSE_WINDOW, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_IDC_CONTENT_CONTEXT_SELECTALL, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_A}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_DEV_TOOLS, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_I, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_DEV_TOOLS_CONSOLE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_J, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_FIND, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_F, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_FIND_NEXT, |
| IDS_KSV_SHORTCUT_IDC_FIND_NEXT, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_G, ui::VKEY_RETURN}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_FIND_PREVIOUS, |
| IDS_KSV_SHORTCUT_IDC_FIND_PREVIOUS, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, |
| ui::VKEY_G, ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, ui::VKEY_RETURN}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser, ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_IDC_FOCUS_BOOKMARKS, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_IDC_FOCUS_LOCATION, |
| IDS_KSV_SHORTCUT_IDC_FOCUS_LOCATION, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_L, ui::VKEY_LMENU, |
| ui::VKEY_UNKNOWN, ui::VKEY_D}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_FOCUS_SEARCH, |
| IDS_KSV_SHORTCUT_IDC_FOCUS_SEARCH, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_K, ui::VKEY_E}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_IDC_FOCUS_TOOLBAR, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_KEYBOARD_BRIGHTNESS_DOWN, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_KEYBOARD_BRIGHTNESS_UP, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_LAUNCH_LAST_APP, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_9, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_NEW_TAB, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_T, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_NEW_WINDOW, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_N, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_IDC_NEW_INCOGNITO_WINDOW, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_N, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_IDC_OPEN_FILE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_O, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_PRINT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_P, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_RELOAD, |
| IDS_KSV_SHORTCUT_IDC_RELOAD, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_BROWSER_REFRESH, ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, |
| ui::VKEY_R}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_RELOAD_BYPASSING_CACHE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_R, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_IDC_RESTORE_TAB, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_T, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_BACK, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_LEFT, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_FORWARD, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_RIGHT, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_SAVE_PAGE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_S, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_IDC_SEARCH_TABS, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_A, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_IDC_SELECT_LAST_TAB, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_9, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular}, |
| IDS_KSV_DESCRIPTION_IDC_SELECT_NEXT_TAB, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_TAB, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular}, |
| IDS_KSV_DESCRIPTION_IDC_SELECT_PREVIOUS_TAB, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_TAB, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_SHOW_BOOKMARK_BAR, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_SHOW_HISTORY, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_H, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_CLOSE_FIND_OR_STOP, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_ESCAPE}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_VIEW_SOURCE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_U, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_ZOOM_MINUS, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_MINUS, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_ZOOM_NORMAL, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_0, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_ZOOM_PLUS, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_PLUS, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay, ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_SWITCH_TO_NEXT_IME, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_SPACE, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_OPEN_FILE_MANAGER, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_M, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay, ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_SWITCH_TO_LAST_USED_IME, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_SPACE, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_ROTATE_SCREEN, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_SCALE_UI_RESET, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_0, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_SWITCH_TO_NEXT_USER, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_PERIOD, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_SWITCH_TO_PREVIOUS_USER, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_COMMA, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular}, |
| IDS_KSV_DESCRIPTION_TAKE_PARTIAL_SCREENSHOT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular}, |
| IDS_KSV_DESCRIPTION_TAKE_SCREENSHOT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_SNAPSHOT, ui::EF_NONE}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular}, |
| IDS_KSV_DESCRIPTION_TAKE_FULLSCREEN_SCREENSHOT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_TOGGLE_CAPS_LOCK, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_LWIN, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_TOGGLE_HIGH_CONTRAST, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_H, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_CARET_BROWSING_TOGGLE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_7, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_TOGGLE_MESSAGE_CENTER_BUBBLE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_N, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular}, |
| IDS_KSV_DESCRIPTION_TOGGLE_OVERVIEW, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_TOGGLE_RESIZE_LOCK_MENU, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_C, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_TOGGLE_SPOKEN_FEEDBACK, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_Z, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_TOGGLE_SYSTEM_TRAY_BUBBLE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_S, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_WINDOW_CYCLE_SNAP_LEFT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_4, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_WINDOW_CYCLE_SNAP_RIGHT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_6, ui::EF_ALT_DOWN}}}, |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_CLIPBOARD_HISTORY, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, ui::VKEY_V}}, |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_COPY, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_C}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular, ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_PASTE, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_V}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular}, |
| IDS_KSV_DESCRIPTION_SELECT_NUMBERED_TAB, |
| IDS_KSV_SHORTCUT_SELECT_NUMBERED_TAB, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular}, |
| IDS_KSV_DESCRIPTION_KEYBOARD_SHORTCUT_HELPER, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_OPEN_LINK_IN_TAB_BACKGROUND, |
| IDS_KSV_SHORTCUT_OPEN_LINK_IN_TAB_BACKGROUND, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_OPEN_LINK_IN_TAB, |
| IDS_KSV_SHORTCUT_OPEN_LINK_IN_TAB, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_SHIFT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_OPEN_LINK_IN_WINDOW, |
| IDS_KSV_SHORTCUT_OPEN_LINK_IN_WINDOW, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_SHIFT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_OPEN_PAGE_IN_NEW_TAB, |
| IDS_KSV_SHORTCUT_OPEN_PAGE_IN_NEW_TAB, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_LMENU, ui::VKEY_UNKNOWN, ui::VKEY_RETURN}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_STOP_DRAG_TAB, |
| IDS_KSV_SHORTCUT_STOP_DRAG_TAB, |
| // |accelerator_ids| |
| {{ui::VKEY_ESCAPE, ui::EF_NONE}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_PAGE_UP, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, ui::VKEY_UP}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_PAGE_DOWN, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, ui::VKEY_DOWN}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_SCROLL_DOWN_PAGE, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_SPACE}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_GO_TO_TOP, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, ui::VKEY_LEFT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_GO_TO_BOTTOM, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, ui::VKEY_RIGHT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_RIGHT_CLICK, |
| IDS_KSV_SHORTCUT_RIGHT_CLICK, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_LMENU}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_SAVE_LINK_AS_BOOKMARK, |
| IDS_KSV_SHORTCUT_SAVE_LINK_AS_BOOKMARK, |
| // |accelerator_ids| |
| {}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_AUTO_COMPLETE, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_RETURN}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_OPEN_DOWNLOADS_PAGE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_J, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_OPEN_FILE, |
| IDS_KSV_SHORTCUT_OPEN_FILE, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_SPACE}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_DISPLAY_HIDDEN_FILES, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_OEM_PERIOD}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_LAUNCH_NUMBERED_APP, |
| IDS_KSV_SHORTCUT_LAUNCH_NUMBERED_APP, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_LMENU, ui::VKEY_UNKNOWN}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_SELECT_ADDRESS_BAR, |
| IDS_KSV_SHORTCUT_SELECT_ADDRESS_BAR, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_L, ui::VKEY_LMENU, |
| ui::VKEY_UNKNOWN, ui::VKEY_D}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_SELECT_NEXT_WORD, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, |
| ui::VKEY_RIGHT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_SELECT_TEXT_TO_END_OF_LINE, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, |
| ui::VKEY_RIGHT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_SELECT_TEXT_TO_BEGINNING, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, |
| ui::VKEY_LEFT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_SELECT_PREVIOUS_WORD, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, |
| ui::VKEY_LEFT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_MOVE_TO_END_OF_WORD, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_RIGHT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_MOVE_TO_START_OF_PREVIOUS_WORD, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_LEFT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_GO_TO_END_OF_DOCUMENT, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, |
| ui::VKEY_RIGHT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_GO_TO_END_OF_LINE, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, ui::VKEY_RIGHT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_GO_TO_BEGINNING_OF_DOCUMENT, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, |
| ui::VKEY_LEFT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_GO_TO_BEGINNING_OF_LINE, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, ui::VKEY_LEFT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_PASTE_CONTENT_AS_TEXT, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, |
| ui::VKEY_V}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_CUT, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_X}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_DELETE_PREVIOUS_WORD, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_BACK}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_DELETE_NEXT_WORD, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, ui::VKEY_BACK}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_UNDO, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_Z}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_REDO, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, |
| ui::VKEY_Z}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_HIGHLIGHT_PREVIOUS_ITEM_ON_SHELF, |
| IDS_KSV_SHORTCUT_HIGHLIGHT_PREVIOUS_ITEM_ON_SHELF, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, ui::VKEY_LMENU, ui::VKEY_UNKNOWN, |
| ui::VKEY_L, ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, ui::VKEY_TAB, |
| ui::VKEY_LEFT}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_OPEN_HIGHLIGHTED_ITEM_ON_SHELF, |
| IDS_KSV_SHORTCUT_OPEN_HIGHLIGHTED_ITEM_ON_SHELF, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, ui::VKEY_LMENU, ui::VKEY_UNKNOWN, |
| ui::VKEY_L, ui::VKEY_SPACE, ui::VKEY_RETURN}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_REMOVE_HIGHLIGHT_ON_SHELF, |
| IDS_KSV_SHORTCUT_REMOVE_HIGHLIGHT_ON_SHELF, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, ui::VKEY_LMENU, ui::VKEY_UNKNOWN, |
| ui::VKEY_L, ui::VKEY_ESCAPE}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_SWITCH_FOCUS, |
| IDS_KSV_SHORTCUT_SWITCH_FOCUS, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_BROWSER_BACK, |
| ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, |
| ui::VKEY_BROWSER_BACK}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_OPEN_RIGHT_CLICK_MENU_FOR_HIGHLIGHTED_ITEM, |
| {}, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, ui::VKEY_COMMAND, ui::VKEY_UNKNOWN, |
| ui::VKEY_VOLUME_UP}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_TOGGLE_MIRROR_MODE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_ZOOM, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_SWAP_PRIMARY_DISPLAY, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_ZOOM, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_BRIGHTNESS_DOWN, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_BRIGHTNESS_UP, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_MAGNIFY_SCREEN_ZOOM_OUT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_MAGNIFY_SCREEN_ZOOM_IN, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_VOLUME_MUTE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_VOLUME_MUTE, ui::EF_NONE}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_VOLUME_DOWN, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_VOLUME_DOWN, ui::EF_NONE}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_VOLUME_UP, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_VOLUME_UP, ui::EF_NONE}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_SHOW_TASK_MANAGER, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_ESCAPE, ui::EF_COMMAND_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_TOGGLE_FULLSCREEN, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_ZOOM, ui::EF_NONE}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_WINDOW_MINIMIZE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_MINUS, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_FOCUS_NEXT_PANE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BROWSER_BACK, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_FOCUS_PREVIOUS_PANE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_FOCUS_WEB_CONTENTS_PANE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_F6, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_MOVE_ACTIVE_WINDOW_BETWEEN_DISPLAYS, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_M, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_TOGGLE_APP_LIST, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_LWIN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_TOGGLE_APP_LIST_FULLSCREEN, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_LWIN, ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_TAKE_WINDOW_SCREENSHOT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_SUSPEND, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_L, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_OPEN_GET_HELP, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_2, ui::EF_CONTROL_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_OPEN_FEEDBACK_PAGE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_I, ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_ROTATE_WINDOW, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BROWSER_REFRESH, |
| ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_SHOW_STYLUS_TOOLS, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_P, ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_TOGGLE_MAXIMIZED, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_PLUS, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_OPEN_CROSH, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_T, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_EXIT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_Q, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_UNPIN, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_ESCAPE, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_SHOW_IME_MENU_BUBBLE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_K, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_DESKS_NEW_DESK, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_PLUS, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN}}}, |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_DESKS_REMOVE_CURRENT_DESK, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_MINUS, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_DESKS_ACTIVATE_LEFT_DESK, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_4, ui::EF_COMMAND_DOWN}}}, |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_DESKS_ACTIVATE_RIGHT_DESK, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_6, ui::EF_COMMAND_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_DESKS_MOVE_ACTIVE_ITEM_LEFT_DESK, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_4, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN}}}, |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_DESKS_MOVE_ACTIVE_ITEM_RIGHT_DESK, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_OEM_6, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_FLOAT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_F, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_SHOW_IDC_FOCUS_MENU_BAR, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_F10}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_SHOW_IDC_HOME, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_HOME, ui::EF_ALT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_SHOW_IDC_CLEAR_BROWSING_DATA, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_BACK, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_SHOW_IDC_SHOW_BOOKMARK_MANAGER, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_O, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_DEV_TOOLS_INSPECT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_C, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_IDC_FOCUS_INACTIVE_POPUP_FOR_ACCESSIBILITY, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPageAndBrowser}, |
| IDS_KSV_DESCRIPTION_IDC_SHOW_APP_MENU, |
| IDS_KSV_SHORTCUT_IDC_SHOW_APP_MENU, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_LMENU, ui::VKEY_UNKNOWN, ui::VKEY_E, ui::VKEY_F}}, |
| |
| {// |categories| |
| {ShortcutCategory::kPopular}, |
| IDS_KSV_DESCRIPTION_OPEN_GOOGLE_ASSISTANT, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_A, ui::EF_COMMAND_DOWN}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_MOVE_APPS_IN_GRID, |
| IDS_KSV_SHORTCUT_MOVE_APPS_IN_GRID, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_LEFT, ui::VKEY_RIGHT, ui::VKEY_UP, |
| ui::VKEY_DOWN}}, |
| |
| {// |categories| |
| {ShortcutCategory::kAccessibility}, |
| IDS_KSV_DESCRIPTION_MOVE_APPS_IN_OUT_FOLDER, |
| IDS_KSV_SHORTCUT_MOVE_APPS_IN_OUT_FOLDER, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {ui::VKEY_CONTROL, ui::VKEY_UNKNOWN, ui::VKEY_SHIFT, ui::VKEY_LEFT, |
| ui::VKEY_RIGHT, ui::VKEY_UP, ui::VKEY_DOWN}}, |
| |
| {// |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_PRIVACY_SCREEN_TOGGLE, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_PRIVACY_SCREEN_TOGGLE, ui::EF_NONE}}}, |
| |
| {// |categories| |
| {ShortcutCategory::kTextEditing}, |
| IDS_KSV_DESCRIPTION_SHOW_EMOJI_PICKER, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_SPACE, ui::EF_SHIFT_DOWN | ui::EF_COMMAND_DOWN}}}, |
| }); |
| |
| static bool is_initialized = false; |
| // If the item's |shortcut_key_codes| is empty, we need to dynamically |
| // populate the keycodes with |accelerator_ids| to construct the shortcut |
| // string. |
| if (!is_initialized) { |
| is_initialized = true; |
| |
| // Include diagnostics shortcuts only when experiment flag is enabled. |
| if (base::FeatureList::IsEnabled(chromeos::features::kDiagnosticsApp)) { |
| const ash::KeyboardShortcutItem diagnostics_shortcut = { |
| // |categories| |
| {ShortcutCategory::kSystemAndDisplay}, |
| IDS_KSV_DESCRIPTION_OPEN_DIAGNOSTICS, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_ESCAPE, ui::EF_CONTROL_DOWN | ui::EF_COMMAND_DOWN}}}; |
| item_list->emplace_back(diagnostics_shortcut); |
| } |
| |
| // The improved desks keyboard shortcuts should only be enabled if the |
| // improved keyboard shortcuts flag is also enabled. |
| if (::features::IsImprovedKeyboardShortcutsEnabled() && |
| ash::features::IsImprovedDesksKeyboardShortcutsEnabled()) { |
| const ash::KeyboardShortcutItem indexed_activation_shortcut = { |
| // |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_DESKS_ACTIVATE_INDEXED_DESK, |
| IDS_KSV_SHORTCUT_DESKS_ACTIVATE_INDEXED_DESK, |
| // |accelerator_ids| |
| {}, |
| // |shortcut_key_codes| |
| {{ui::VKEY_SHIFT, ui::VKEY_UNKNOWN, ui::VKEY_COMMAND, |
| ui::VKEY_UNKNOWN}}}; |
| |
| const ash::KeyboardShortcutItem toggle_all_desks_shortcut = { |
| // |categories| |
| {ShortcutCategory::kTabAndWindow}, |
| IDS_KSV_DESCRIPTION_DESKS_TOGGLE_WINDOW_ASSIGNED_TO_ALL_DESKS, |
| {}, |
| // |accelerator_ids| |
| {{ui::VKEY_A, ui::EF_COMMAND_DOWN | ui::EF_SHIFT_DOWN}}}; |
| |
| item_list->emplace_back(indexed_activation_shortcut); |
| item_list->emplace_back(toggle_all_desks_shortcut); |
| } |
| |
| for (auto& item : *item_list) { |
| if (item.shortcut_key_codes.empty() && !item.accelerator_ids.empty()) { |
| // Only use the first |accelerator_id| because the modifiers are the |
| // same even if it is a grouped accelerators. |
| const ash::AcceleratorId& accelerator_id = item.accelerator_ids[0]; |
| // Insert |shortcut_key_codes| by the order of CTRL, ALT, SHIFT, SEARCH, |
| // and then key, to be consistent with how we describe it in the |
| // |shortcut_message_id| associated string template. |
| for (auto modifier : {ui::EF_CONTROL_DOWN, ui::EF_ALT_DOWN, |
| ui::EF_SHIFT_DOWN, ui::EF_COMMAND_DOWN}) { |
| if (accelerator_id.modifiers & modifier) { |
| // ui::VKEY_UNKNOWN is used as a separator and will be shown as a |
| // highlighted "+" sign between the bubble views and the rest of the |
| // text. |
| if (!item.shortcut_key_codes.empty()) |
| item.shortcut_key_codes.push_back(ui::VKEY_UNKNOWN); |
| item.shortcut_key_codes.push_back(GetKeyCodeForModifier(modifier)); |
| } |
| } |
| // For non grouped accelerators, we need to populate the key as well. |
| if (item.accelerator_ids.size() == 1) { |
| if (!item.shortcut_key_codes.empty()) |
| item.shortcut_key_codes.push_back(ui::VKEY_UNKNOWN); |
| item.shortcut_key_codes.push_back(accelerator_id.keycode); |
| } |
| } |
| } |
| } |
| |
| return *item_list; |
| } |
| |
| } // namespace keyboard_shortcut_viewer |