Review of "Deja Window" version 14

Details Page Preview

Deja Window is a GNOME Shell extension that gives you full control over your window geometry. It automatically restores the workspace, size, position, minimized and maximized state, always on top and always on visible workspace of specific applications when they open. 🤔 Why Deja Window? In "vanilla" GNOME, windows typically open in the current workspace either centered or in a upper-left layout. Deja Window bridges this gap by acting as an external memory for your window layout, forcing the desired position, size and states that the OS or the apps themselves cannot natively restore. Deja Window is also very useful for all those applications (such as Ghostty) that do not adequately manage the layout of their windows in Gnome. 🚀 Features - Remembers the last known position, size (included workspace) and states (minimized and maximized, always on top and always on visible workspace) of your windows. - Configure specific rules per window (via WM_CLASS or Window Title). - Supports standard string matching and regular expressions (Regex) for advanced targeting. - Choose to restore workspace, size, position, minimized and maximized state, always on top and always on visible workspace, independently for each app. - Automatically detects and restores windows to the exact monitor they were previously saved on. - Freeze a window's saved layout to maintain your perfect configuration, preventing accidental updates when temporarily moving or resizing windows. - Automatically centers windows that are configured but haven't been saved yet. - Handles the specific timing constraints of window management on Wayland. - Optional Global Defaults ruleset (experimental) to manage every window that has no rule of its own, with its own restore options and an exclude list matched by class, title or regex. - Right-click a window's title bar for a "Deja Window" submenu: a full rule editor to manage it by class or title, toggle every restore option, lock it, save its current state instantly, exclude it, or jump straight to its rule in Preferences. - Turn a rule off without deleting it, from Preferences or from the window menu — its customization is kept and restored when you turn it back on. - Back up and restore your application rules and Global Defaults configuration. - Optional top bar indicator for quick access to Preferences and to pause/resume window tracking without disabling the extension. Compatibility Note: While this extension works with the majority of standard applications, some apps utilize custom layout mechanisms or non-standard toolkits that may override or ignore the extension's positioning attempts. More troubleshooting info can be found in the README.md file on GitHub.

Extension Homepage
https://github.com/ihpled/deja-window

No comments.

Diff Against

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) error 1 warning 1

Shexli found 2 issues that may need reviewer attention.

EGO-C49-003 error

extensions targeting GNOME 49 must not call maximize or unmaximize with Meta.MaximizeFlags

This extension explicitly targets GNOME Shell 49 but still passes `Meta.MaximizeFlags` to `maximize()` or `unmaximize()`.

Meta.Window

  • extension.js:219
    window.maximize(Meta.MaximizeFlags.BOTH)
  • extension.js:228
    window.unmaximize(Meta.MaximizeFlags.BOTH)

EGO-L-004 warning

main loop sources should be removed in disable()

Main loop sources assigned in `enable()` are missing matching removals in `disable()` or its helper methods.

Remove main loop sources

  • extension.js:110
            GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
                // Meta.TabList.NORMAL includes standard managed windows (filters out O-R windows usually)
                const windows = global.display.get_tab_list(Meta.TabList.NORMAL, null);
                for (const window of windows) {
                    
  • extension.js:722
            GLib.idle_add(GLib.PRIORITY_LOW, () => {
                if (handle.isRestoreApplied) return GLib.SOURCE_REMOVE;
    
                // Check if the window still exists
                if (!window.get_workspace()) return GLib.SOURCE_REMOVE;
    
                // Final Safety Check: Avoid Override Redirect window

All Versions

Version Status
16 Active
15 Active
14 Rejected
13 Inactive
12 Rejected
11 Inactive
10 Inactive
9 Inactive
8 Rejected
7 Inactive
6 Rejected
5 Rejected
4 Inactive
3 Rejected
2 Inactive
1 Rejected

Previous Reviews on this Version

mcastaldo auto- rejected
Auto-rejected because of new version 15 was uploaded
mcastaldo posted a review
Fixed EGO-C49-003 and EGO-L-004