PlasmaZones v3.4.4
Added
- Short scrolling columns can be centered: a window given a height that does not fill the screen sat at the start of its column with the leftover space after it. Center short columns, under Scrolling → Window → Window handling, centers the column's windows instead. On a horizontal strip that centers them vertically, and on a vertical strip horizontally. It is off by default, so nothing moves until you turn it on, and a column that already fills the screen is left alone either way. A window rule can turn it on or off for a particular monitor, desktop or activity (#1010).
- A scrolling column can fill the screen edge to edge: maximizing a column widened it along the strip and left the gaps and the space above and below it alone, so it never looked like a real maximize. Maximize to Screen Edges gives the column the whole work area on both axes with every gap suppressed, while the column stays part of the strip. The maximize button, Meta+PgUp and an application's own maximize request all do this on a scrolling monitor, and the button lights up only for a column in that state. The new optional shortcut is Meta+Alt+M. Meta+Alt+F is a width verb again, so it widens a column without claiming the screen. Any width or height change afterwards, a drag included, gives the column its ordinary size back, and the state survives a minimize round trip and a restart. Dragging a window to the edge of the screen still hands it to the compositor's own maximize (#1007).
- The support archive records which KWin effects are turned on: other effects interact with PlasmaZones, so blur behind an overlay, a wobbly-window effect fighting a placement animation or a second tiling effect grabbing the same windows all change what a report means. The archive now carries the effects listed in your KWin configuration together with the ones KWin has actually loaded and running, since those three can differ (#1008).
Changed
- The daemon and the KWin effect must be the same build: this release changes the message they speak again, so a mismatched pair refuses to connect rather than misbehaving. Packagers should rebuild and ship both together (#1007, #1013).
- The new settings text is translated: the strings added this release for Maximize to Screen Edges and Center short columns are translated in German, Georgian, Dutch, Polish, Brazilian Portuguese, Russian and Swedish, so those languages have no English left showing in the settings (#1015).
Fixed
- Steam's game-launch dialog is kept out of placement: the built-in Steam rule guarded Steam's notification toasts and nothing else, so the small dialog Steam opens while a game starts was placed into a zone or a column as though it were an ordinary window. Nothing about that dialog tells it apart from the main Steam window except that it cannot be resized, so the rule now covers any Steam window with a fixed size. Steam's ordinary windows still place normally and so does every game launched from Steam, including the many that run at a fixed size themselves. A config carrying the previous version of the rule untouched is brought up to date on the next start, and a copy you edited is left as you left it (#1014).
- The first click on a window on another desktop works: with more than one virtual desktop on a scrolling monitor, windows on a desktop you had switched away from and come back to were missing from the strip, and the first click on one from the taskbar did nothing while the second brought it in. Two things caused it. An activation the daemon had asked for itself was remembered for ten seconds waiting for the compositor to confirm it, and a desktop switch in between meant the confirmation never came, so the next real click on that window was swallowed as the echo. And a window that had come back on a desktop whose stored scroll position disagreed with it rendered off the side of the screen, where a click on it was refused for already being focused. The wait is now a second, and a click on a window sitting off the screen brings the strip back to it (#1005).
- Windows that announce themselves a moment late are left alone: an application can map a window and only then say that it is a dialog, that it stays above others or that it should be skipped by the task switcher. PlasmaZones read the window before those arrived, so a window it should never have touched was placed into a column, given focus and resized. Yakuake's dropdown terminal was placed this way, and because it stores its size as a share of the screen, one capture changed its size for good. Placement now waits a turn for a window to finish describing itself, and a window that turns out to be a dialog, a modal, kept above or skipped by the switcher after that is released and put back where it was (#1009, #1011).
- Coming back to a desktop leaves the strip working: returning to a desktop sent the compositor nothing at all, because the check that skips sending unchanged positions was comparing against the desktop you had just left. The compositor kept drawing the previous desktop's strip, so the first scroll after a return looked like it did nothing while the second worked. Each desktop's strip now has an identity the compositor can see, so a return says so plainly and the drawing state for the strip you left is dropped rather than reused (#1013).
- An expanded rule shows the rule you just edited: on the Rules page, expanding a rule and then editing it left the expanded details showing the rule as it was before the edit, and you had to collapse the row and open it again to see the change. It now updates in place (#1016).
- Scrolling past a maximized column moves it once: a maximized column sits flush against the edges of the monitor, and it was given that flush position only while it filled the view. Scrolling away put it back inside the gaps, so the column travelled a gap further than the strip it rides on, and that leftover ran as a second animation on top of the strip's own. On a window the size of the screen it read as two animations playing at once. The column now keeps the same offset whether or not it fills the view, so it travels exactly as far as the strip does (#1012).
Installation
Arch Linux (AUR):
yay -S plasmazones # or plasmazones-binArch Linux (manual):
sudo pacman -U plasmazones-3.4.4-*-x86_64.pkg.tar.zstDebian testing/unstable (apt repository):
Tracks KDE as it lands in Debian and rebuilds when KWin moves.
sudo curl -fsSL https://download.opensuse.org/repositories/home:fuddlesworth/Debian_Unstable/Release.key -o /etc/apt/keyrings/plasmazones.asc
echo 'deb [signed-by=/etc/apt/keyrings/plasmazones.asc] https://download.opensuse.org/repositories/home:/fuddlesworth/Debian_Unstable/ /' | sudo tee /etc/apt/sources.list.d/plasmazones.list
sudo apt update
sudo apt install plasmazonesOn Debian testing, swap Debian_Unstable for Debian_Testing in both lines. Packages are built for x86_64 only.
Debian (manual .deb):
Built on Debian unstable. Prefer the apt repository above, which rebuilds when KWin moves.
sudo dpkg -i plasmazones_3.4.4-*_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (COPR):
sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazonesFedora (manual RPM):
# Fedora 44
sudo dnf install plasmazones-3.4.4-*.fc44.x86_64.rpmopenSUSE Tumbleweed (OBS):
sudo zypper addrepo https://download.opensuse.org/repositories/home:fuddlesworth/openSUSE_Tumbleweed/home:fuddlesworth.repo
sudo zypper refresh
sudo zypper install plasmazonesUniversal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:
tar xzf plasmazones-3.4.4-linux-x86_64.tar.gz
cd plasmazones-linux-x86_64
./install.shNixOS (flake):
# flake.nix inputs
plasmazones.url = "github:fuddlesworth/PlasmaZones";
# configuration.nix
programs.plasmazones.enable = true;NixOS (without flakes):
Build this tag's source against your host's pkgs (no release asset needed):
# configuration.nix
environment.systemPackages = [
(pkgs.callPackage
"${builtins.fetchTarball "https://github.com/fuddlesworth/PlasmaZones/archive/v3.4.4.tar.gz"}/packaging/nix/package.nix"
{ version = "3.4.4"; })
];Post-Installation
systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones