Add autofocus mode.

This commit is contained in:
Storm Dragon committed 2026-10-28 22:06:04 -04:00
1 parent b232c1eebb
commit 3e2429b8a5
19 files changed
+279 -8

No files matched your search

+23 -1
View File
@@ -32,6 +32,7 @@ type browserModeResult struct {
// The event loop owns policy. One joined worker resolves only the latest focus;
// a generation check rejects results overtaken by another focus or caret event.
type browserModeController struct {
settings func() review.ModeSettings
source any
keys browseKeyOwner
capturer documentContextCapturer
@@ -228,9 +229,30 @@ func (browser *browserModeController) accept(result browserModeResult, speech sp
browser.ready = true
modeInput := runtimeModeInput(result.owner)
modeInput.Origin = result.origin
mode := browser.state.Update(modeInput, review.DefaultModeSettings())
mode := browser.state.Update(modeInput, browser.modeSettings())
browser.set(mode, speech, false)
}
func (browser *browserModeController) modeSettings() review.ModeSettings {
if browser.settings != nil {
return browser.settings()
}
return review.DefaultModeSettings()
}
// The review worker supplies the target's owned ancestry from the same
// document used for navigation. No accessibility calls run on the event loop.
func (browser *browserModeController) navigationMode(result review.Result, speech speechEnqueuer) {
settings := browser.modeSettings()
if result.DocumentPosition.Origin != review.StructuralNavigation || !settings.StructuralTriggersFocus {
return
}
owner := atspi.DocumentContext{Document: result.DocumentPosition.Document, TopLevel: result.DocumentPosition.Document, Ancestors: result.DocumentCaretContext}
modeInput := runtimeModeInput(owner)
modeInput.Origin = review.StructuralNavigation
mode := browser.state.Update(modeInput, settings)
browser.set(mode, speech, false)
}
func (browser *browserModeController) set(mode review.DocumentMode, speech speechEnqueuer, manual bool) {
previous := browser.mode
browser.mode = mode