WADA-DEV(7) $ /ja/blog/waybar-atspi-click-noop/

NAME

waybar-atspi-click-noop — Waybar の修正確認を Claude Code に任せたら、AT-SPI でボタンは見えたが押せなかった

SYNOPSIS

Waybar の不具合を git 版で直し、直ったかの確認まで Claude Code にやらせようとした。デスクトップにも見た目と分かれたアクセシビリティツリーがあると知ったが、Waybar のボタンはそこからは押せなかった。

DESCRIPTION

Waybar の修正がちゃんと効いたか、確認まで Claude Code にやらせようとした。そこで初めて、デスクトップにも画面とは別に UI を読める仕組み(アクセシビリティツリー)があると知った。ただ、Waybar のワークスペースのボタンはそこからは押せなかった。結局、最後は自分で押した。

放置していた Waybar

Waybar には前から不満があった。ワークスペースのボタンをクリックしても切り替わらないし、つながっている Wi-Fi のアクセスポイントも正しく出ない。分かってはいたが、ずっと放置していた。

ちょっとやる気が出たので、手を付けた。Claude Code に upstream を調べさせると、Hyprland の Lua 設定に合わせてワークスペースの操作を直す PR(#5013)がマージ済みだった。そこで AUR の waybar-git をビルドさせ、git 版に入れ替えさせた。

直ったかを Claude Code に確かめさせたい

入れ替えたら、次は直ったかの確認だ。ここも Claude Code に任せられないかと思った。ボタンを押して、ワークスペースが切り替わるかを見ればいい。

Claude Code は、スクリーンショットを撮らなくても、at-spi2-core のアクセシビリティツリーを D-Bus 越しにたどって、Waybar のボタンとラベルを一覧にしてみせた。

私はこういう仕組みがあることを知らなかった。API とビューを分けるという考え方からすれば当然かもしれないが、デスクトップもそうなっているとは思っていなかった。勉強になった。

見えているのに押せない

見えているなら押せるだろうと、ワークスペースのボタンに AT-SPI の Click を実行させた。切り替わらなかった。エラーも出ない。

Claude Code に Waybar の src/modules/hyprland/workspace.cpp を読ませると、ボタンはこう作られていた。

m_button.add_events(Gdk::BUTTON_PRESS_MASK);
...
m_button.signal_button_press_event().connect(sigc::mem_fun(*this, &Workspace::handleClicked),
false);

切り替えの本体 handleClicked は、マウスのボタンを押したイベントからしか呼ばれない。AT-SPI の Click はこのイベントを起こさないので空振りする、というのが Claude Code の説明だった。私はこの説明を自分では確かめていない。読ませたのは今の upstream のコードで、手元でビルドしたリビジョンとは違うかもしれない。

結局、自分で押した

確認は、自分の手でボタンを押してやった。ワークスペースは切り替わったし、Wi-Fi のアクセスポイントも正しく出るようになっていた。

確認の自動化はできなかった。でも、画面の裏に UI を読める API があると分かったのは収穫だった。

bookmark: B! はてなブックマークに追加

COMMENTS