Each tab carries a unique TABBED_CASILDA_TAB_ID; tabbed-run echoes it to
the host so the new page is inserted right of the creating tab. New tabs
are selected and focused, and the initial tab is focused on startup.
Host listens on a unix socket; tabbed-run sends a command to open it as
a new maximized casilda tab. Spawned children inherit the full
environment plus TABBED_CASILDA_CTRL so tabbed-run works from any tab.
Install Casilda 1.5.0 (main) from source into ~/.local and point run.sh
at the installed typelib/library instead of the vendored copy. Drop the
compositor-level maximized property, which was removed upstream, and pin
the spike to Python <3.14 where PyGObject wheels are available.
Set compositor.props.maximized=True in each tab so the spawned client
fills the tab and tracks window resizes. Add run.sh wrapper pointing
GI_TYPELIB_PATH/LD_LIBRARY_PATH at the vendored build, and a local
build.sh (no sudo, installs into vendor/casilda/prefix).
Add a readwrite 'maximized' GObject property to CasildaCompositor plus a
casilda_compositor_set_maximized() API. When enabled, all toplevels
(current and future) are forced to be maximized and fill the compositor
widget; size_allocate keeps them pinned on widget resize.