Files
cthulhu/internal/atspi/document_caret_echo.go

38 lines
1.2 KiB
Go

// Copyright (c) 2026 Storm Dragon
// Authors: Storm Dragon, Angus Kola
// SPDX-License-Identifier: GPL-3.0-or-later
package atspi
// Chromium can echo a static text caret on its enclosing label/paragraph.
// Include only a single-child chain sharing the complete text offset domain.
// Composite parents have their own hypertext offsets and cannot be matched.
func documentCaretEchoAncestors(tree *AccessibleTree, reference ObjectReference) []ObjectID {
var ids []ObjectID
child, err := tree.Resolve(reference)
if err != nil || child.CharacterCount <= 0 {
return nil
}
for attempts := 0; attempts < maxTreeNodes; attempts++ {
parent, ok, err := tree.Parent(reference)
if err != nil || !ok {
break
}
snapshot, err := tree.Resolve(parent)
if err != nil || IsWebDocumentRole(snapshot.Role) || snapshot.Editable || snapshot.CharacterCount != child.CharacterCount {
break
}
first, ok, err := tree.FirstChild(parent)
if err != nil || !ok || first != reference {
break
}
last, ok, err := tree.LastChild(parent)
if err != nil || !ok || last != reference {
break
}
ids = append(ids, parent.ID())
reference, child = parent, snapshot
}
return ids
}