Repository navigation
Releases: Alex-Bini/kwin-direktor
Releases · Alex-Bini/kwin-direktor
Release list
Direktor v1.1.1
Release Notes: Direktor v1.1.1
This is a massive hotfix and stability update following the v1.1.0 release. It focuses on core engine stability, a migration to compiled Python binaries, critical bug fixes for window manipulation, and heavy UX improvements to the Settings interfaces.
🚀 Major Architectural Changes
- Standalone PyInstaller Binaries: The Python-based companion services (Tray Applet and OSD Daemon) have been successfully migrated to standalone, pre-compiled PyInstaller binaries. This significantly improves startup performance, reduces Python environment dependency issues, and creates a cleaner installation path.
- Engine Stability Overhaul: Massively overhauled the core logic to prevent zombie listener race conditions and random KWin script unloads. The event loop is now significantly more stable during rapid window spawning and destruction (Resolves crashes reported in Issue #1).
- KWin Startup Crash Resolved: Fixed a fatal crash on login caused by an experimental QML configuration file overriding the compositor's javascript bootstrapping process. The native
config.uilegacy system has been safely restored to ensure complete system stability.
🐛 Layout & Engine Fixes
- Floating Layout Drag & Drop: Fixed critical bugs preventing windows from being manually resized or moved while in Floating Mode (Resolves Issue #3).
- Niri Layout Sizing Engine: Fixed a core bug where the underlying layout algorithm ignored the user's "Window Sizing Mode" preference. The Niri engine now correctly routes sizing calculations based on your selected dropdown mode:
- Fancy: Automatically forces standard pixel-perfect scaling (100% / 50% / 40%).
- Baked: Respects the application's native preferred bounds.
- Manual: Strictly respects the custom slider percentages defined in settings.
🎨 UI & UX Improvements
- Tray Applet Dashboard (
SettingsWindow.qml):- Explicit Apply Button (Crash Fix): Disabled the confusing "live auto-apply" behavior that fired on every slider tick and was crashing the applet on some systems (Resolves Issue #4). Added a persistent, dedicated "Apply Changes" button pinned to the footer of the Applet to give you stable, manual control over when settings are injected into KWin.
- Replaced unreliable Radio Buttons with standard Dropdown ComboBoxes for a more unified experience.
- KWin System Settings (
config.ui):- Replaced buggy Radio Buttons with standard Dropdown ComboBoxes for Active Gap Tier, New Window Placement, and Window Sizing Mode.
- These settings now properly trigger KWin's native "Apply" button and save reliably.
- Restructured the "Columns (Niri)" tab so that Window Placement intuitively sits above Sizing Mode.
Full Changelog: v1.1.0...v1.1.1
v1.1.0
Full Changelog: v1.0.4...v1.1.0
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[1.1.0] - 2026-08-08
Added
- Niri Scrollable Columns Layout: Introduced an infinite-horizontal canvas layout with native vertical stacking, proportional resizing (
heightRatios), and configurable default column widths (1, 2, and 3+ window percentages). - Niri Scroll Modes: Added configuration options for standard Niri strictly-centered scrolling versus Karousel-style pair-centering.
- Niri Edge Clamping: Added a configuration toggle to restrict the viewport from scrolling past the boundaries of the grid.
- Interactive Stack Management: Added
Meta+[andMeta+]shortcuts to intuitively consume (pull in) or expel windows from adjacent columns. - Secondary Monitor Fallbacks: Newly connected monitors automatically default to the
floatinglayout to prevent intrusive auto-tiling during presentations or docking. - Modular Architecture Engine: Completely refactored the legacy layout algorithms into distinct
core/,layouts/, andutils/components for future maintainability. - Liveness Watchdog: Implemented a self-healing crash interceptor for KWin scripting failures.
- Settings Dashboard UI: Fully populated the Qt/QML Tray Applet with every single KWin script setting, slider, and logic toggle.
Changed
- CPU Optimization: Extracted inline Regex evaluation inside the
WindowFilterhotpath to a static class variable, significantly reducing CPU spikes and garbage collection delays during rapid window resizing. - Targeted Retiling: Direktor now explicitly retiles only the surface (monitor + virtual desktop) that received the window event, drastically lowering overhead compared to global retiles.
- Dynamic Spawn Timeouts: Swapped static 160ms wait timers for a dynamic geometry listener with exponential backoff (max 2000ms) to better support slow-loading Flatpak applications.
Fixed
- Community Issue Resolutions: Resolved several user-reported GitHub issues related to window placement, ghost windows, and layout swapping edge cases.
- Maximized State Persistance: Fixed a bug where switching virtual desktops would strip the maximized state from natively maximized windows and force them into the tiling grid.
- Ghost Windows (Zombie Race Condition): Fixed a race condition where closed windows were leaving invisible tiles behind, causing layout gaps.
- Window Spawn Placement: Fixed an issue where new windows did not respect insertion hierarchy; configurable placement (Left, Right, Start, End) is now fully enforced.
- Vertical Sub-split Sorting: Fixed a bug in the layout renderer where directional shortcuts (Up/Down) were failing to properly swap tiles in the active column.
Known Issues
- Dangling KWin Script Installations: There is an open GitHub issue regarding unexpected behavior after installation/uninstallation. This appears to be a user-side Plasma caching issue; when upgrading or completely uninstalling KWin scripts, users must often log out and log back into their Wayland session to fully clear KWin's internal cache.