commands.layouts and layouts.run close windows from the end and open them
again with their own titles. The KDE extra layouts_by_count keeps only what
reads the daemon's log: KWin has each window where the daemon last asked.
minimize, unmanage and manage on the focused window now run through the
neutral platform. The check that the unmanaged window is centered is
neutral: inside the work area and not on a tile of the layout.
Platform.spawn takes rename_to and after: the window gives itself another
title after some seconds (a terminal escape on KDE). The scenario ignores a
title, and checks that the window is left alone while it has it, and tiled
once it has another.
Starts the daemon with the layout_flip option of a workspace set to each value
it takes, over columns, rows and BSP with two and three windows. Checks the
mirror from the OS, that flip-layout turns the option off and on, that a command
adds the other axis, and that the option is the named workspace's own.
core-e2e runs it after startup_rules.
Checks from the OS and the daemon's state what send-to-monitor, move-to-monitor,
their cycle, workspace and named forms, focus-monitor, cycle-monitor,
focus-monitor-workspace and cycle-move-workspace-to-monitor do: the window on
the monitor and workspace asked for, tiled in that display, the others where
they were, and the focus where each command leaves it. focus-monitor-at-cursor
is its own function, for a platform with a pointer.
core-e2e starts KWin with two outputs and unplugs the second before the daemon,
so the other scenarios still see one display. The fake desk (two displays of
different sizes) and its tests are new files.
The audit behind the docstrings of Platform: what each member promises
to both ports, what each port answers for another reason, what each
finding of the review turned out to be, and what is left to run on a
KDE VM and on Windows.
spawn raised nowhere on KDE when the window never came, so a check
that a window stays unmanaged passed for a window that was not there.
It does raise now, as do close, minimize, activate and move_window for
a window that does not exist, and a program name Windows rejects. A
title is looked for as it is and not as a pattern. displays() is what
KWin says of each output and not the size the session was given
(Kde.screens, the same script that gives the work area).
The docstrings of Platform say what each member promises and what a
scenario may not lean on.
The quiet period of three seconds was written in nine places, each
a number. It is support.QUIET. The window the lock scenario moves is
a third into the work area, not at 400,300, and the scenario now
checks that it moved, or the check that it is back in its tile after
the unlock proves nothing. The room the padding must change by, the
pointer drag and the tile hotplug checks after an unplug come from
the work area.
The scenario toggled with --implementation windows on both ports, and
its settle time said it was KWin's 200 ms. The default of the command
is each port's own implementation, so the flag goes, and the settle is
a named wait that is longer than what either port needs.
Platform.hidden is false for a window the system does not have, so the
workspace scenarios that counted the windows that are not hidden took
a window that was lost for one that was shown. They count the windows
the system has (support.in_view). The docstring says what each port
answers true for beyond a window the daemon put away, and that a
scenario that asks for one to be put away asks the daemon too.
The decrease was checked against the frame within Platform.tolerance,
which is 24 px for a terminal: a daemon that gave back less than the
increase passed. The daemon's layout, which no client rounds, now has
to show the width asked for, and the frame has to follow within the
tolerance. Platform.tolerance says what it is and is not a bound on.
The headless suites have no panel, so the whole output was right there,
but a session with one got a work area that scenarios could not hold a
window to. KWin's placement area of the first output is asked through a
script, with the whole output as the answer where KWin does not say.
The contract of Platform.work_area is spelled out: the display less what
the system keeps for itself, as the system says. Monocle and maximize
check that the window stays inside it. The fake platform takes a panel,
and a daemon that tiles under it.