Skip to content

Releases: Domoel/Simple-Tiling

Simple Tiling

Choose a tag to compare

@Domoel Domoel released this 03 Jun 22:42

GNOME Extensions Store Compliance Release

This release addresses all findings raised by the automated store review tool (shexli) during submission, ensuring full compliance with GNOME Extensions quality standards across all four extension variants.

🐛 Bug Fixes & Compliance

  • Fixed GNOME 49 API Compatibility in Modern Version: The Meta.Window.get_maximized() and unmaximize(Meta.MaximizeFlags) APIs were removed in GNOME Shell 49. The maximize/unmaximize logic now uses duck-typing via optional chaining (is_maximized?.()) and bracket notation for the GNOME ≤ 48 fallback path, making the code version-agnostic without relying on a hard-coded version number check.
  • Released Owned GObject References in disable(): InteractionHandler now sets _wmSettings and _settings to null at the end of disable(). Tiler does the same for its settings reference. This satisfies the owned-reference cleanup requirement and prevents stale D-Bus connections from persisting after the extension is disabled.
  • Removed Untracked GLib.idle_add Source in _centerWindow(): The nested GLib.idle_add call used to invoke win.make_above() was not registered for cleanup in disable(). It has been removed; make_above() is now called directly within the existing tracked timeout_add callback.

🛠️ Build System

  • gschemas.compiled Excluded from Modern AppStore ZIP: The compiled GSettings schema is no longer packaged in build-appstore-modern output. GNOME Shell 45+ handles schema compilation automatically and the store rejects packages that ship the compiled artifact.

Simple Tiling

Choose a tag to compare

@Domoel Domoel released this 03 Jun 22:13

Changelog: Exceptions Window Picker

This release adds an interactive window picker to the exceptions preferences, making it effortless to exclude any application from tiling without ever opening a terminal.

✨ New Feature

  • Interactive Window Picker in Exceptions Settings: The exceptions section in the preferences window now features a 🔍 button. Clicking it activates pick mode — the entry field changes to "Click on a window…" and the button is temporarily disabled. Clicking on any open window automatically detects its App ID (Wayland) or WM_CLASS (X11) and pre-fills the entry field. Confirm with + to add it to the list. Works on both X11 and Wayland without any terminal interaction.
  • added make-build-appstore to makefile to be able to build all .zip files in a way that they can be uploaded directly to the gnome extension store.

🛠️ Implementation Notes

  • The picker uses GSettings as a communication channel between the preferences process and the running GNOME Shell extension, making it fully compatible with the process isolation model introduced in GNOME Shell 45+.
  • The preferences window itself is filtered from the picker to prevent accidental self-detection.
  • Duplicate detection is enforced on add — an identifier already present in the list is silently ignored.

Simple Tiling

Choose a tag to compare

@Domoel Domoel released this 03 Jun 20:38

Changelog: Multi-Monitor, Monocle Mode, Float Windows & Comprehensive Overhaul

This is the largest update to Simple Tiling to date, introducing long-requested features alongside a thorough code review that resolves every known stability and correctness bug across all four extension variants (Legacy, Enterprise, Interim, Modern).

✨ New Features

  • Multi-Monitor Support (Issues #23, #18): Each connected monitor now maintains its own independent master/stack layout. Windows stay on their respective monitors; the first window on each monitor becomes its master. Fully functional on both X11 and Wayland.
  • Exceptions Management in Preferences UI (Issue #10): The exceptions list can now be managed directly inside the extension's preferences window. Add entries by typing the WM_CLASS (X11) or App ID (Wayland) and pressing the add button; remove any entry with the delete button next to it. No more manual file editing.
  • Persistent Exception Storage — Survives Extension Updates: Exceptions are now stored in GSettings (dconf) instead of exceptions.txt inside the extension directory. Settings will no longer be lost when updating the extension through the GNOME Extensions store. Default exceptions are pre-loaded from the schema.
  • Configurable Master Window Ratio: The master window width is no longer fixed at 50%. It can be set to any value between 20% and 80% of the work area directly from the preferences window.
  • Toggle Tiling Shortcut: A new assignable keyboard shortcut toggles the entire tiling system on and off without disabling the extension. Re-enabling rescans all open windows and restores the layout.
  • Float Window Shortcut: A new assignable keyboard shortcut temporarily floats or un-floats the focused window. Floated windows are removed from the tile layout and can be freely positioned. They return to the layout upon pressing the shortcut again. Floated state is not persisted — it resets on workspace switch or extension restart.
  • Monocle Mode: A new layout mode activated by an assignable shortcut where all tiled windows on a monitor are stacked at full work-area size. Two additional shortcuts (monocle-next, monocle-prev) cycle focus through windows in the stack. Works per-monitor in multi-monitor setups.

🐛 Critical Bug Fixes

  • Fixed Drag-to-Swap Completely Broken in All Versions: The grab-op-begin signal handler was mapping its parameters incorrectly — the grabbed window was never identified, making all drag-and-drop window swaps silently fail since the extension's initial release. Corrected signal argument order for GNOME 40+.
  • Fixed GNOME 49 Crash in Modern Version: Removed a broken SHELL_MAJOR < 49 branch that called the non-existent win.is_maximized() and win.unmaximize() APIs. All versions now consistently use win.get_maximized() and win.unmaximize(Meta.MaximizeFlags.BOTH).
  • Fixed Dead Shell.get_session Code Causing Load Issues: Removed the version detection block that referenced Shell.get_session(), a function that does not exist in any GNOME Shell version, eliminating a source of subtle startup failures.
  • Fixed Shortcut Rebind Triggering on Every Settings Change: InteractionHandler was re-registering all keyboard shortcuts whenever any setting changed (including gaps and exceptions). It now only rebinds when an actual keybinding key is modified.
  • Fixed Excessive queueTile() Calls on Workspace Switch: _disconnectFromWorkspace was calling _onWindowRemoved for every window, each triggering a redundant tile attempt. The disconnect now performs inline cleanup without firing any retile events.
  • Fixed Unsafe win.get_id() After Window Unmanage: Window IDs are now captured at signal-connection time and passed directly into the unmanaged callback, preventing potential crashes when accessing a partially-destroyed window object.
  • Fixed Exception Changes Not Applying Retroactively: Adding or removing an application from the exceptions list while it was already open had no effect. Changes now immediately re-evaluate all open windows — newly excepted apps are removed from the tile layout and centered, and newly un-excepted apps are brought back into the layout.
  • Fixed Overlay Apps Disrupting Tiling Layout (Issues #22, #5): Added a skip_taskbar check to _isTileable, preventing apps like GPU Screen Recorder and other overlay tools from being captured into the tiling layout even when they declare a NORMAL window type.
  • Fixed Missing Null Guard in _prepareWmShortcuts (Legacy): The legacy version could crash if settings_schema returned null. Matches the existing guard present in all other versions.
  • Fixed Makefile Double-Nesting Installation Path (Issue #20): make install-* was unzipping into $(EXTDIR)/$(UUID) while the archive already contained $(UUID)/ as its root folder, resulting in …/simple-tiling@domoel/simple-tiling@domoel/. The unzip target is now $(EXTDIR).
  • Fixed set_keep_above Dead Code in Exception Window Centering: Meta.Window has no set_keep_above() method — the branch was always skipped silently. Replaced with a direct call to win.make_above().

🛠️ Architecture & Improvements

  • Enterprise Version Fully Updated to Feature Parity: enterprise.js (GNOME Shell 40, non-ESM) has been comprehensively rewritten, bringing it to the same level as all other versions — all bug fixes, multi-monitor support, GSettings-based exceptions, and all new features (toggle tiling, float, monocle, master ratio) are fully included.
  • Updated gschemas.compiled: The compiled GSettings schema has been regenerated to include all new keys (master-ratio, toggle-tiling, float-window, toggle-monocle, monocle-next, monocle-prev, exceptions). Fixes an issue (Issue #16) where shortcuts would not appear in GNOME keyboard settings for users installing directly from the repository.
  • Removed ByteArray Dependency (Legacy): The legacy version no longer imports imports.byteArray, which was only needed for reading the now-removed exceptions.txt.

Simple Tiling v7.6

Choose a tag to compare

@Domoel Domoel released this 11 Oct 20:24
8db89fc

Critical Bugfix Release

This is a stability release that fixes several critical bugs for users on modern GNOME Shell versions, particularly affecting keyboard shortcuts on Wayland and the manual installation process.

🐛 Critical Fixes

  • Fixed Keyboard Shortcuts on Wayland: Resolves a major issue where keyboard shortcuts would not register on modern Wayland systems (especially on distributions like Fedora, Arch, and their derivatives). The extension now uses a more robust API for keybinding registration to ensure reliability across different environments. Thank to @cory2005 who found a solution to this issue and tested it.

  • Corrected Manual Installation Path: Fixed a bug in the Makefile that caused the extension to be installed in a nested directory (.../uuid/uuid/) when using the make install-* commands.

  • Resolved ImportError on Some Systems: Corrected the module import order in all modern versions to prevent a GJS loader bug that could stop the extension from starting on certain distributions.

Thanks to the community for the quick and detailed bug reports that made these fixes possible!

Simple Tiling v7.5

Choose a tag to compare

@Domoel Domoel released this 01 Oct 14:45
5f09053

GNOME 40 Enterprise Compatibility & Build System Update

This is a significant compatibility release that introduces a new version of the extension to support enterprise environments like RHEL 9. It also refines the versioning scheme to ensure maximum stability for all users on modern GNOME.

✨ New Features & Compatibility

  • Introduced "Enterprise" Version for GNOME 40: A new, dedicated version has been created to provide support for GNOME 40 systems (like on RHEL 9) that do not use the modern JavaScript import syntax. This differentiation was necessary because GNOME 40 was a transitional release, and some long-term support distributions opted for the older, more established module system for stability. The new "Enterprise" version combines the modern GNOME 40-era logic and UI with the older, universally compatible const... = imports... syntax, ensuring the extension and its settings panel work flawlessly on these systems. Thanks @bbenne10 for bringing this issue up!!
  • Refined "Interim" Version Target: To accommodate the new Enterprise version, the Interim version now exclusively targets GNOME 41 through 44, where modern import syntax is standard.

🛠️ Build System Improvements

  • Updated Makefile: The Makefile has been updated to include new targets (build-enterprise, install-enterprise) for the new version. This keeps the build and manual installation process simple and consistent across all four supported versions of the extension.

Simple Tiling v7.4

Choose a tag to compare

@Domoel Domoel released this 29 Sep 07:40
ef098d8

Critical Hotfixes for Modern & Interim Versions

This is a stability release that fixes several critical bugs reported by users on modern GNOME Shell versions (40 and newer).

🐛 Fixes & Improvements

  • Fixed Startup Crash on GNOME < 49: Resolved a TypeError: get_session not a function that prevented the extension from starting on versions 45-48. The version detection is now fully backward-compatible. Thanks to @kapouer to report this issue.

  • Fixed ImportError on Multiple Systems: Corrected the module import order in both the modern (45+) and interim (40-44) codebases. This resolves a subtle GJS loader bug that could prevent the extension from starting on certain distributions.

  • Restored Keybinding Functionality on interim (40-44): Fixed a bug where keyboard shortcuts were not working in the "Interim" version. A required parameter has been restored to the add_keybinding API call for this specific GNOME era.

Simple Tiling v7.3

Choose a tag to compare

@Domoel Domoel released this 28 Sep 21:51
5020250

GNOME 49 Compatibility & Simplified Maintenance

This release introduces support for GNOME Shell 49 and refactors the modern codebase to simplify future maintenance and updates.

✨ Features & Improvements

  • Added GNOME 49 Support & Maintained Backward Compatibility: The extension is now fully compatible with GNOME 49. This was achieved by using a conditional (if/else) check to handle the new is_maximized() and unmaximize() APIs, while ensuring that users on older versions (GNOME 45-48) can continue to use the extension without issues.

A huge thank you to @ValerioCataldo who provided the initial pull request for this! And a huge thanks to @Neo-29 who tested the new version.

Simple Tiling v7.2

Choose a tag to compare

@Domoel Domoel released this 22 Aug 10:38
bbe09af

This is a bugfix release that finalizes the extension's architecture to provide robust and stable support across all modern GNOME Shell versions, resolving all known ImportError issues reported by users.

🐛 Fixes & Compatibility

Simple Tiling v7.1

Choose a tag to compare

@Domoel Domoel released this 11 Aug 20:56
55dd6ca

This is a critical bugfix release that addresses startup and settings errors reported by users on modern GNOME Shell versions (40 and newer).

🐛 Bug Fixes

Simple Tiling v7

Choose a tag to compare

@Domoel Domoel released this 11 Aug 00:08
c3c47dc

This is a critical bugfix release that addresses startup and settings errors reported by users on modern GNOME Shell versions. The extension's architecture has been significantly improved to ensure stability and compatibility across a wide range of GNOME releases, based on excellent feedback from users.

🐛 Bug Fixes & Compatibility

  • Fixed Startup Crash on GNOME 45+: Resolved an Error: Expected function... got number by correcting the API call for creating keybindings in the modern codebase.

  • Fixed Startup Crash on GNOME 40-44: Resolved a critical ImportError by using the correct import path for the extension's base class on these transitional GNOME versions.

  • Fixed Settings Window Crash: The preferences window no longer crashes on GNOME 40-41. A very new settings API (SettingsBindMapping) was replaced with a more broadly compatible method.

  • Improved Wayland Support: The window exception feature now works reliably on Wayland by checking for both WM_CLASS and App ID, ensuring consistent behavior across display servers.

🛠️ Build & Architecture

  • To provide a stable experience for all users, the extension is now built from a single codebase into three distinct packages for different GNOME eras:

     Legacy: For GNOME 3.38
     Interim: For GNOME 40-44
     Modern: For GNOME 45+
    
  • The Makefile automates the entire release process. Running make build generates all three correctly configured ZIP packages. make install-* commands have been added to streamline local testing / installations.