- Waylandにおいてウィンドウを表現するプロトコルとして XDG shell はデファクトスタンダードである
- なんと、Waylandそれ自体に「ウィンドウの最大化」のようなプロトコルはない(昔はあったらしいが)
- このうち、右クリック時などに出てくる「ポップアップ」を担うのが xdg_popup であり、その座標は xdg_positioner によって定められる
- wlroots はこれをどう使っているのか? v0.20.2 のコードを読みながら調べてみました!
types/xdg_shell/wlr_xdg_positioner.c
void wlr_xdg_positioner_get_geometry(wlr_xdg_positioner_rules*, wlr_box*)
wlr_xdg_positioner_rules をもとに座標を計算して、計算結果を wlr_box* に書き込む
types/xdg_shell/wlr_xdg_popup.c
static void xdg_popup_handle_reposition
名前の通り xdg_popup.reposition を処理するもの(xdg_popup_interface に設定されている)
wlr_box* として wlr_xdg_popup.scheduled.geometry を渡したのち、 wlr_xdg_surface_schedule_configure() を呼んでいる(idle時にxdg_(popup|surface).configure を呼ぶような関数)
void create_xdg_popup(…)
はい
え!これだけ?