ARTICLE AD BOX
I am using CEF on Linux (OSR/windowless) with an SDL2 input bridge.
I want to send a native Ctrl+A shortcut to a focused editor using
CefBrowserHost::SendKeyEvent (not a JavaScript selection workaround, which does work).
Current approach
I send 4 events in this order:
Ctrl down
A down
A up
Ctrl up
void App::SendCtrlA() { if (!client_ || !client_->GetBrowser() || !client_->GetBrowser()->GetHost()) return; CefRefPtr<CefBrowserHost> host = client_->GetBrowser()->GetHost(); CefKeyEvent ev; memset(&ev, 0, sizeof(ev)); ev.type = KEYEVENT_RAWKEYDOWN; ev.windows_key_code = 17; ev.native_key_code = 17; ev.modifiers = EVENTFLAG_CONTROL_DOWN; ev.focus_on_editable_field = true; host->SendKeyEvent(ev); memset(&ev, 0, sizeof(ev)); ev.type = KEYEVENT_RAWKEYDOWN; ev.windows_key_code = 65; ev.native_key_code = 65; ev.modifiers = EVENTFLAG_CONTROL_DOWN; ev.character = 1; ev.unmodified_character = 'a'; ev.focus_on_editable_field = true; host->SendKeyEvent(ev); memset(&ev, 0, sizeof(ev)); ev.type = KEYEVENT_KEYUP; ev.windows_key_code = 65; ev.native_key_code = 65; ev.modifiers = EVENTFLAG_CONTROL_DOWN; ev.focus_on_editable_field = true; host->SendKeyEvent(ev); memset(&ev, 0, sizeof(ev)); ev.type = KEYEVENT_KEYUP; ev.windows_key_code = 17; ev.native_key_code = 17; ev.focus_on_editable_field = true; host->SendKeyEvent(ev); }I also log what I send, and the events are definitely passed to SendKeyEvent().
JS logger in the page
document.addEventListener('keydown', function(e){ console.log( '[GSNDBG] kd' + ' key=' + JSON.stringify(e.key) + ' code=' + JSON.stringify(e.code) + ' ctrl=' + e.ctrlKey + ' shift=' + e.shiftKey + ' alt=' + e.altKey + ' meta=' + e.metaKey + ' keyCode=' + e.keyCode + ' which=' + e.which + ' target=' + (e.target && e.target.tagName) ); }, true);Observed result
[GSNDBG] kd key="\u0000" code="" ctrl=false shift=false alt=false meta=false keyCode=0 which=0 target=DIVProblem
The event reaches the page
But the DOM KeyboardEvent is effectively empty
ctrlKey is false
Ctrl+A does not trigger select-all
Questions
On Linux, what is the correct way to populate CefKeyEvent for a shortcut like Ctrl+A?
Specifically, what should native_key_code and event.type be?
Is there a standard or recommended way to translate SDL2 key data into valid CEF / Chromium shortcut events?
