refactor: unify kick_app/kick_tab_group_member into a single kick_window

Windows now own the scene wiring uniformly; a tab is a pure list head of
identical kick_window structs with no privileged "main" member.  X11 and
xdg paths share one map/focus/claim/destroy tail, the tab-group and
external-to-own-tab behaviours ride on a single origin flag, and tab
membership is just window list order.

Bugs fixed in the port:
- pick_successor took -1 as a truthy prefer_right, returning NULL when the
  rightmost tab died and tearing the session down; the parameter is now a
  bool so the misuse cannot recur.
- reorder_active_tab wrote a tab back into its old slot because
  wl_list_insert() inserts AFTER its anchor; the middle-slot case now
  anchors on the predecessor.
- claim_xdg_window left the freshly created scene tree ENABLED (unlike the
  X11 path's explicit disable), so a still-black window of the active tab
  read as "already drawn" and its first map skipped the seat keyboard
  enter -- the fix that makes forwarded keys (and the client fullscreen
  mirror) reach the client in nested sessions.
- the active tab's first map no longer re-announces a fresh active
  transition: the boot crown already owns the tab, so prefer_one stable
  active_count under load.
- restored the "[x11] member associate app=%d" log for grouped windows so
  the old log contract is preserved.
This commit is contained in:
Andrew Hamilton 2026-08-31 08:18:51 +10:00
parent 469e31115b
commit be45053631

3229
kick.c

File diff suppressed because it is too large Load diff