• 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(…)

はい


え!これだけ?