Skip to content

Reimplementation/target architecture - #45

Merged
KonstantinMerkel merged 11 commits into
developfrom
reimplementation/target-architecture
Oct 21, 2026
Merged

KonstantinMerkel merged 11 commits into
developfrom
reimplementation/target-architecture

Conversation

@KonstantinMerkel

Copy link
Copy Markdown
Owner

No description provided.

Replace the controller-centric implementation with three layers:

- lib/domain: pure tiling state (TilingState, slot lists per workspace
  and monitor, immutable window records), layout model, topology,
  entry-slot capacity rule, override and hotplug policies
- lib/app: Engine as the only writer of the state, Reconciler as the
  only issuer of window commands (frame-synced, compares intended
  state with Mutter's facts), DragSession building a preview state
- lib/shell: thin adapters for Mutter signals, windows, monitors,
  GSettings, keybindings and the drag indicator

Behaviour: windows open directly in their tile, overflow windows float
and are promoted when a slot frees up, external moves and resizes are
reverted, evacuated windows return only to the same physical monitor
(EDID), state survives the lock screen (unlock-dialog session mode),
an invalid layout JSON suspends tiling without losing state.

Supported GNOME Shell versions are 49 and 50. The swap transition
setting and port-monitor shortcuts are removed, prefs-only modules
move to prefs/, the JSON editor validates before saving and the
"Moving to Workspace" shortcut group is dropped from the preferences.

AGENTS.md is no longer tracked.
ESLint enforces layer boundaries (domain and app free of GNOME imports,
inward-only dependencies, prefs limited to domain and utils) and the
extensions.gnome.org review guidelines (no Gtk in the Shell process, no
Shell libraries in prefs, no timeouts, no legacy imports, no feature
sniffing, no console). max-params and a local max-returns rule are
enabled at 4.

Fixes the findings: prefs calls the surface shortcut-inhibit API
directly and logs through Logger, onWindowMoved is split into helpers,
and ScreenEstate takes a rect object.
@KonstantinMerkel
KonstantinMerkel force-pushed the reimplementation/target-architecture branch from bb72d7a to 74b873f Compare October 19, 2026 16:24
The drag keeps no copy of the tiling state. Its preview is the live state
plus the candidate drop, rebuilt when the pointer moves or the state's
version changes, so windows opening or closing during a drag are tiled
right away and the drop is checked against the live state: a target that
filled up mid-drag makes the dropped window floating.
@KonstantinMerkel
KonstantinMerkel force-pushed the reimplementation/target-architecture branch from 74b873f to ac628cd Compare October 19, 2026 16:47
@KonstantinMerkel
KonstantinMerkel merged commit a630a57 into develop Oct 21, 2026
4 checks passed
@KonstantinMerkel
KonstantinMerkel deleted the reimplementation/target-architecture branch October 21, 2026 13:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant