diff --git a/live-updates/opt/tuxflotte/scripts/atspi_click.py b/live-updates/opt/tuxflotte/scripts/atspi_click.py index 1a1877b..a0488a7 100755 --- a/live-updates/opt/tuxflotte/scripts/atspi_click.py +++ b/live-updates/opt/tuxflotte/scripts/atspi_click.py @@ -117,8 +117,41 @@ VALIDATION_TEXT_MARKERS = ( ) +def _node_text(node): + """Sammelt allen aus einem Accessible auslesbaren Text: .name, + .description UND (falls unterstuetzt) das separate Text-Interface. + WICHTIG (real beim Testen entdeckt, 29.08.2026): ein einfaches GtkLabel + exponiert seinen sichtbaren Text ueblicherweise NICHT ueber .name/ + .description (die bleiben dort oft leer) sondern ausschliesslich ueber + das AT-SPI-Text-Interface (queryText().getText(0, -1)) - ohne diesen + dritten Zugriffsweg fand find_showing_text() den sichtbar angezeigten + Status-Text nie, obwohl er laut Screenshot die ganze Zeit auf dem Schirm + stand.""" + parts = [] + try: + if node.name: + parts.append(node.name) + except Exception: + pass + try: + if node.description: + parts.append(node.description) + except Exception: + pass + try: + text_iface = node.queryText() + content = text_iface.getText(0, -1) + if content: + parts.append(content) + except NotImplementedError: + pass + except Exception: + pass + return " ".join(parts).strip().lower() + + def find_showing_text(node, needle, depth=0): - """Sucht ein sichtbares Accessible, dessen Name ODER Beschreibung den + """Sucht ein sichtbares Accessible, dessen Text (siehe _node_text()) den Suchtext enthaelt - unabhaengig von seiner Rolle (Label/Expander/...), da Ubiquitys Status-Panel-Text nicht zuverlaessig unter derselben Rolle exponiert sein muss. Bei Unsicherheit ueber den Sichtbarkeitsstatus @@ -126,15 +159,7 @@ def find_showing_text(node, needle, depth=0): Klick mitten in die Pruefung setzen).""" if node is None or depth > MAX_DEPTH: return False - try: - name = (node.name or "").strip().lower() - except Exception: - name = "" - try: - desc = (node.description or "").strip().lower() - except Exception: - desc = "" - if needle in name or needle in desc: + if needle in _node_text(node): try: state = node.getState() return state.contains(pyatspi.STATE_SHOWING)