Following up on the reports regarding single-key shortcuts (1/2 to cycle tabs, Z/X for navigation, etc.) stopping working after updating to Opera 137.0.6036.63 on macOS:
I did a deep dive into the local profile and the macOS binary dispatch pipeline to understand why this happens and why toggling the setting doesn't help. Here is the technical breakdown:
It is not a settings persistence bugChecking ~/Library/Application Support/com.operasoftware.Opera/Default/Preferences shows that turning on "Enable advanced keyboard shortcuts" properly writes:
json
"Keybindings": {
"Settings": {
"AdvancedEnabled": true
}
}
The preference flag is indeed stored as true and loaded into the browser memory, but the action still fails to trigger.
Root Cause: Disconnect in unhandled key event routing on macOSThe issue stems from how macOS handles single-key shortcuts compared to standard modified shortcuts:
Standard shortcuts (e.g., Cmd+T, Ctrl+Tab): Handled directly by the macOS Cocoa menu system (NSMenu / MainMenu.nib / CommandDispatcher). These intercept key combinations at the OS level before they reach the web view, which is why all modifier-based shortcuts continue to work normally.
Single-key shortcuts (e.g., 1, 2, Z, X): macOS menu rules do not permit modifierless single keys as menu equivalents. Therefore, these shortcuts rely entirely on the Chromium web renderer's unhandled keyboard event pipeline (WebContentsDelegate::HandleKeyboardEvent / unhandled_keyboard_event_handler).
When focused on web content, if an input field is not active and the page does not consume the event, the key event is supposed to be bounced back up to the browser process to be evaluated by InputDataStore / OperaBrowserAdvanced.
In Opera 137 for macOS, this unhandled single-key event bridge between the web content renderer and the browser command dispatcher has broken — single-key press events are being dropped or intercepted before InputDataStore::ExecuteCommand can receive them.
Hopefully the Opera dev team can look into the macOS unhandled keyboard event bridge in the 137 release branch and push a quick hotfix!