PlasmaZones v2.3.5
Fixed
- KCM assignment save rewrites modes: The KCM decomposed per-screen AssignmentEntry (mode + snappingLayout + tilingAlgorithm) into two flat maps and merged them on save — losing mode information, reverting layouts after Apply, and corrupting autotile/snapping mode when editing the other mode's field. Replaced with per-entry D-Bus writes via new
setAssignmentEntrymethod that preserves all fields independently. - Clearing per-desktop override inherits base autotile mode: Setting a per-desktop layout to "Use default" removed the entire entry, inheriting the base screen's mode (often autotile). Now keeps a mode-only marker entry that preserves the desktop's mode while cascading layout resolution to the parent scope.
- Monitor-level layout changes revert after Apply: The batch
setAllScreenAssignmentsD-Bus method usedfromLayoutId(id, existing)which preserved the old mode instead of setting it from the layout ID type. Combined with the merge logic sending the wrong mode's ID, screens appeared to revert. - KCM combo shows resolved layout instead of "Use default": After clearing a per-desktop assignment, the combo showed the inherited layout name instead of "Use default" because the D-Bus echo signal overwrote the KCM cache with the cascaded base layout. Added
setSaveBatchModeto suppressscreenLayoutChangedsignals during the entire save batch. - Layout cascade stops at mode-only entries:
layoutForScreenreturned nullptr immediately when finding a mode-only entry (empty snapping in Snapping mode) instead of cascading to the parent scope. Now continues cascading through mode-only entries to find the effective layout.
Added
- Resnap/retile on KCM assignment changes: Changing layouts via KCM assignments now triggers window resnap (snapping) or retile (autotile) with per-screen OSD, matching the behavior of the layout picker overlay and keyboard shortcuts. Uses dedicated
applyAssignmentChangesD-Bus method to avoid feedback loops with the settings handler. - Per-screen resnap buffer: New
populateResnapBufferForAllScreensmethod builds resnap data using a global zoneId-to-position map from all loaded layouts, independent of the single global active layout. Supports multi-monitor setups where each screen has a different layout assignment. - Synchronous notifyReload: KCM-to-daemon settings reload is now synchronous with
m_ignoreNextSettingsChangedflag, preventing race conditions where the daemon's queuedsettingsChangedsignal would trigger a spurious reload that reverts just-saved assignments.
Changed
- Assignment edits never change mode: Selecting a snapping layout or tiling algorithm in the KCM only updates that field — mode is controlled exclusively by the daemon through global snapping/autotile toggle, not by individual assignment edits.
- Full AssignmentEntry tracking in KCM: Replaced redundant flat pending maps (
m_pendingDesktopAssignments,m_pendingActivityAssignments) with fullAssignmentEntrypending maps that track mode + snappingLayout + tilingAlgorithm per context. - Field-level clearing: Clearing a snapping layout only clears the
snappingLayoutfield, preserving mode andtilingAlgorithm. Prevents unintended mode inheritance from parent scopes.
Installation
Arch Linux (AUR):
yay -S plasmazones # or plasmazones-binArch Linux (manual):
sudo pacman -U plasmazones-2.3.5-1-x86_64.pkg.tar.zstKDE Neon / Debian-based:
sudo dpkg -i plasmazones_2.3.5-1_amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora (COPR):
sudo dnf copr enable fuddlesworth/PlasmaZones
sudo dnf install plasmazonesFedora (manual RPM):
sudo dnf install plasmazones-2.3.5-1.fc43.x86_64.rpmopenSUSE Tumbleweed (manual RPM):
sudo zypper install plasmazones-2.3.5-1.x86_64.rpmopenSUSE Tumbleweed (OBS):
sudo zypper addrepo https://download.opensuse.org/repositories/home:ilFrance/openSUSE_Tumbleweed/home:ilFrance.repo
sudo zypper refresh
sudo zypper install plasmazonesCommunity-maintained package by ilFrance
Universal Linux (AppDir):
For Fedora Atomic, Steam Deck, or non-root user installation:
tar xzf plasmazones-2.3.5-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 (standalone):
Download plasmazones.nix from the release assets, then:
# configuration.nix
environment.systemPackages = [
(pkgs.callPackage ./plasmazones.nix {})
];Post-Installation
systemctl --user enable --now plasmazones.service
systemsettings kcm_plasmazones