PlasmaZones v3.4.3
Added
- Debian testing and unstable have an apt repository: the only Debian package before now was a loose
.debattached to each release, built against KDE Neon, whose library versions do not match testing or unstable. Packages for both are published through the openSUSE Build Service instead, which rebuilds them whenever KWin moves in Debian. That matters because the KWin effect stops loading on every KWin version bump until it is rebuilt, taking the drag overlay and the other compositor-drawn feedback with it, and KWin moves every few weeks on those releases. The install lines are in the README, and the same repository works on Debian-derived rolling distributions such as PikaOS. Packages are built for x86_64 only (#1000). - Windows moved to another desktop are placed there: dropping a window onto a different desktop from the pager or the Overview left it where it landed. On a tiling or scrolling screen it sat on top of the stack without joining it, and it stayed on the desktop it came from as far as PlasmaZones was concerned, until you left the desktop and came back. A window arriving on the desktop you are looking at now joins the stack the same way a newly opened one does. On a snapping screen it floats, which is what snapping does with any window you have not dropped into a zone yourself, unless the layout fills its zones automatically, in which case the window takes the first empty one (#996).
- Scrolling windows can open at their own height: Default width under Scrolling → New columns has always offered Window decides, which opens a column at the size the application asked for. Default height offered only the even split, a fixed pixel height and a preset. It now offers Window decides too, so a window joining a column keeps the height it asked for. As with the width, a per-window rule and a per-monitor setting still outrank it. Unless a rule pins a height, Retile then leaves a window-decided height alone rather than pulling it back to the even split (#995).
Changed
- Decoration previews open on the focused appearance: a pack's full-strength look is the focused one, and its unfocused look is a wash or an inactive colour derived from it, so the browser opened every card on the quieter of the two. Cards and the detail preview now start focused, and the switch in the detail preview is the comparison (#998).
- Zone shader previews draw borders at the scale of the preview: a zone's border width and corner radius are set in screen pixels, and the preview fits a whole screen into a pane a few hundred pixels wide. The zone rectangles were scaled into that pane but the border was not, so it drew several times too thick for the zones it sat on. It now shrinks with them, which at preview size is close to a hairline. The same applies to any parameter an overlay pack declares as a pixel length (#998).
- Maximizing a window on a scrolling monitor maximizes its column: the maximize button, Meta+PgUp and an application's own maximize request used to hand the window to the compositor's maximize, which fought the strip for control of its width. On a scrolling monitor they now do what the maximize column shortcut does, so the column fills the monitor along the strip and stays tiled. The column that grows is always the one holding the window you maximized, even when that window is not the focused one. Pressing it again gives the column its width back, or the default width when there is no earlier width to return to. The button also lights up whenever a column fills the monitor, however it got there, so the button and the shortcut agree about what a window is doing. A column that only fills the monitor because its windows will not go any narrower is left out, since there is no width for the button to give back. A window rule that matches on "is maximized" now follows the column rather than the single window, so it matches every window in a maximized column. Floating windows keep the ordinary maximize (#994).
- The daemon and the KWin effect must be the same build: this release changes the message they speak, so a mismatched pair refuses to connect rather than misbehaving. Packagers should rebuild and ship both together (#994).
Fixed
- Restoring a maximized scrolling column no longer snaps out to full width first: a restore click reached the check that guards a tiled window against being moved by other programs, and it ran before the strip had answered. The check read the smaller window as outside interference and pushed it back out to full width, so every restore bounced through full width on its way back. A window whose maximize state is in the middle of changing is now left alone, on X11 and XWayland windows as well as Wayland ones (#1001).
- Maximizing a window on a scrolling monitor moves it once: the maximize button put the window back where the strip had it and only then asked the strip what to do, so the window jumped twice before the animation ran, and the animation set off from wherever that second jump had left it. Your click now stands while the strip is asked, and the strip's answer drives a single animated move. A request the strip does nothing with puts the window back, so the button never stays lit for a state the strip did not agree to (#1001).
- A maximize animates from where the window was: the animation set off from the window's current position, which by then was already the size the compositor had maximized it to. Growing showed almost no movement and shrinking showed none at all. It now sets off from the position the window held before the maximize, on monocle tiling as well as scrolling columns (#1001).
- Clicking maximize twice in quick succession does both presses: the second click landed while the strip was still answering the first, and it was discarded, so a fast double-click maximized and stayed maximized. The second press is now remembered and applied once the first has settled (#1001).
- Zone shader previews number their zones again: the settings and editor shader previews draw the zone numbers into a picture and hand it to the renderer, and that picture never arrived, so the previews showed their zones bare. The numbers on the real overlay were never affected (#998).
- Decoration previews show what is behind the window again: every pack that samples the scene behind a window drew as though there were nothing behind it. Blur, Duotone, Frosted Glass, Glass and Oil Slick showed a flat tinted slab instead of a blurred desktop, and Mosaic showed a tint with no cells at all. The wallpaper the preview stands in with never reached the shader. Zone and overlay shaders that sample the wallpaper were left without one in the same way (#998).
- A decoration pack looks the same in the browser as in its detail preview: the browser card and the detail preview drew a pack on surfaces of different sizes, and a pack's blur runs in a buffer sized from the surface it is drawn on, so one pack came out as two different effects. Every decoration preview is drawn at one size now and scaled to fit where it is shown, which makes the card a smaller copy of the detail preview rather than a different picture (#998).
- Tabbing a column keeps every window's height: a column of stacked windows can have a height set on each one. Turning it into tabs used to throw all but one of them away, so turning the tabs back into a stack gave you an even split instead of the layout you had built. Which window's height the tabbed column took was decided by stack order too, so it could size itself to a window you were not looking at. The tab you have in front of you now decides the column's height, and the others keep theirs for when you switch back (#995).
- Clicking the focused window brings it back into view: scrolling the strip by hand takes the view out of the centering policy's hands, which is what lets a scrolled view stay put. Focusing a window hands it back, but a click on the window that already had focus was ignored entirely, and so was the one the compositor sends when you return to a desktop. So was a switch between two windows stacked in the same column. A window you had scrolled away from stayed off to one side no matter how many times you clicked it. All three now hand the view back, and under the two policies that only move the view when they have to, a scroll that left the window fully on screen is still left alone (#992).
- The shortcut cheatsheet lists the mode you are actually using: the sheet picked its shortcuts using the mode assigned to the screen, without checking whether that mode was switched on. A screen still assigned to snapping with snapping turned off listed the snapping keys, which do nothing, and hid the tiling and scrolling ones. With tiling turned off as well, a screen assigned to tiling showed no mode's shortcuts at all. The sheet now picks a mode that is turned on. If you have all three turned off there is nothing to list, so it says so instead of opening. An open sheet also follows the switches now, including the ones changed from System Settings, and closes when you turn the last mode off (#993).
- Closing a window in the middle of the strip no longer sends it sliding off the screen: on a scrolling screen you had panned away from, closing a window in the middle of the strip made the closing window drop downward and off the bottom while its neighbours slid over it. Three things were behind it. The dying window was drawn at the raw position the strip had committed for it, which on a panned strip is the row off screen where parked columns wait, so it snapped there the moment it closed. A stale picture of a column that had scrolled off the same edge earlier was painted behind the arriving window for the whole animation. And the re-anchor that follows a close animated a parked column toward the parking row instead of the screen edge. The closing window now holds the place it was drawn in until its animation finishes, and nothing animates toward the parking row (#1003).
- The strip settles after a close instead of bouncing: closing a window made the compositor focus one neighbour while PlasmaZones focused another, and the two picks re-anchored the strip against each other, so the view swung back and forth several times in a second and re-parked windows that were on screen. The strip now waits for the close animation to finish and then reflows once (#1003).
- Seven translations corrected: 345 strings across German, Georgian, Dutch, Polish, Brazilian Portuguese, Russian and Swedish said the wrong thing. Among them, "User sets" was read as a verb rather than as the name for your saved sets in five of the seven languages, Georgian rendered Opacity with the word for transparency, which is its opposite, Russian described a window's height as how high up it sits, and Dutch rendered Overshoot as a surplus, contradicting its own help text (#1004).
Installation
Arch Linux (AUR):
yay -S plasmazones # or plasmazones-binArch Linux (manual):
sudo pacman -U plasmazones-3.4.3-*-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.3-*_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.3-*.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.3-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.3.tar.gz"}/packaging/nix/package.nix"
{ version = "3.4.3"; })
];Post-Installation
systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones