summaryrefslogtreecommitdiff
path: root/gui-libs/wayfire-plugins-extra/tests/force-fullscreen-hotplug/README.md
blob: e371801f9fa18f6339c1f37919f1123f585b5e49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Force-fullscreen output teardown regression

Run only in the private headless session created by this fixture. It never
changes the live desktop's inputs, outputs or plugins. Requires the custom
stitched-output Wayfire build, Alacritty, D-Bus, C++ compiler and Wayfire headers.

As root, prepare the fixture for the desktop user:

```sh
python3 prepare.py --user ecsfwxvr
```

The command prints a stage directory under `/var/tmp`. Run the staged script as
the ordinary user, replacing `<stage>` with that exact path:

```sh
runuser -u ecsfwxvr -- env -u XDG_RUNTIME_DIR dbus-run-session -- \
  python3 <stage>/reproduce.py --plugins <stage>/plugins \
  --mode forced --cycle --clients 3 --cycles 3 --order 213 --return-order 321

runuser -u ecsfwxvr -- env -u XDG_RUNTIME_DIR dbus-run-session -- \
  python3 <stage>/reproduce.py --plugins <stage>/plugins \
  --mode forced --cycle --clients 3 --inhibit --pause 0

runuser -u ecsfwxvr -- env -u XDG_RUNTIME_DIR dbus-run-session -- \
  python3 <stage>/reproduce.py --plugins <stage>/plugins \
  --mode forced --clients 3 --unload --inhibit
```

`--order` and `--return-order` each accept any permutation of `123`. `--pause 0`
removes the inter-event delay to exercise rapid power switching. `--inhibit`
sets the same output inhibition flag used by session locking; it does not
start a real lock screen. `--mode window` and `--mode native` provide controls.
To test a candidate without installation, pass `--plugin /path/to/libforce-fullscreen.so`
to `prepare.py`.

Cycle tests verify that the compositor and clients remain alive with all three
outputs gone, fullscreen transforms are removed, the combined output returns,
and the original windows are mapped onto it. Multiple cycles re-enable forced
fullscreen to exercise newly created per-output plugin instances. Unload tests
verify plugin cleanup, reload and subsequent fullscreen activation.

The fixture prints its private runtime path containing logs, view snapshots
and `result.json`. The original affected plugin crashes on the first removal
with forced fullscreen; the iterator-only fix leaves stale transforms when
output actions are inhibited. The packaged fix covers both cleanup paths.