| | |
| | | require(preferences, "StaticHotkeyInfoRow(", "internal App Grid Space shortcut must remain static") |
| | | require(preferences, "LauncherHotkeySettings.effectiveHotkey(for: .main).displayString", "Settings must display effective App Grid shortcut") |
| | | require(preferences, "LauncherHotkeySettings.effectiveHotkey(for: .quickSearch).displayString", "Settings must display effective Quick Search shortcut") |
| | | require(preferences, "HotkeyPrimaryActionButton", "custom hotkey rows must use the shared action button") |
| | | require(preferences, "ProStatusPill(text: title, style: .locked, compact: true)", "locked custom hotkey action must use the global Pro pill") |
| | | require(preferences, "if canRestore {", "restore-default action must only appear when a custom shortcut exists") |
| | | |
| | | custom_row_start = preferences.find("private struct CustomizableHotkeyInfoRow") |
| | | custom_row_end = preferences.find("private struct HotkeyStatusPill") |
| | | if custom_row_start == -1 or custom_row_end == -1 or custom_row_end <= custom_row_start: |
| | | fail("could not inspect CustomizableHotkeyInfoRow layout") |
| | | custom_row = preferences[custom_row_start:custom_row_end] |
| | | if ".buttonStyle(.borderedProminent)" in custom_row: |
| | | fail("custom hotkey rows must not use the default blue borderedProminent Pro button") |
| | | |
| | | require(pro, "case customHotkeys", "ProFeature.customHotkeys is missing") |
| | | require(pro, "case .premiumThemes, .layoutImport, .layoutExport, .unlimitedNotes, .persistentAppSorting, .customHotkeys:", "customHotkeys must be unlocked only by the Pro access state") |
| | |
| | | if "%status%" not in data["hotkeys.error.registrationFailed"]: |
| | | fail(f"{path.name} hotkeys.error.registrationFailed must keep %status% placeholder") |
| | | |
| | | print("PASS Pro custom hotkeys QA: Pro gating, transactional Carbon registration, duplicate-safe effective shortcuts, local recording, and 29-language copy are wired") |
| | | print("PASS Pro custom hotkeys QA: Pro gating, transactional Carbon registration, duplicate-safe effective shortcuts, local recording, Pro-consistent row UI, and 29-language copy are wired") |
| | | PY |