Review of "Saved Desks" version 1

Details Page Preview

Save and restore window layouts on workspaces (Requires GNOME set to 'Workspaces on primary display only').

Extension Homepage
https://github.com/loginone33/saved-desks

No comments.

FAQ

Files

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

Shexli (experimental) error 4 warning 5

Shexli found 9 issues that may need reviewer attention.

EGO-X-004 warning

extensions should avoid synchronous file IO in shell code

Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.

File Operations

  • extension.js:476
    file.load_contents(null)

EGO-A-004 warning

extension files should not contain excessive ungated console logging

File contains 14 ungated console.log/warn/error calls (threshold: 5).

No excessive logging

  • extension.js:15
    console.log(`[Saved Desks] ${msg}`)
  • extension.js:392
    console.error('Saved Desks: Failed to open Buy me a coffee link:', e)
  • extension.js:424
    console.error('Saved Desks: Failed to export D-Bus interface:', e)
  • extension.js:434
    console.error('Saved Desks: Failed to create desktop files on enable:', e)
  • extension.js:452
    console.error('Saved Desks: Failed to clean desktop files on disable:', e)
  • extension.js:459
    console.error('Saved Desks: Failed to unexport D-Bus interface:', e)
  • extension.js:483
    console.error('Saved Desks: Failed to load desks:', e)
  • extension.js:499
    console.error('Saved Desks: Failed to save desks:', e)
  • extension.js:580
    console.error(`Saved Desks: Failed to create desktop file for "${name}":`, e)
  • extension.js:594
    console.error(`Saved Desks: Failed to delete desktop file for "${nameToDelete}":`, e)

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:785
    window.unmaximize(Meta.MaximizeFlags.BOTH)

EGO-C49-004 error

extensions targeting GNOME 49 must not call Meta.Window.get_maximized

This extension explicitly targets GNOME Shell 49 but still calls removed `Meta.Window.get_maximized()`.

Meta.Window

  • extension.js:777
    window.get_maximized()

EGO-P-003 error

GSettings schema XML must be present in package

Extension appears to use GSettings but no `.gschema.xml` file is included in the package.

GSettings Schemas

EGO-L-002 warning

objects created by extension should be destroyed in disable()

Objects assigned in `enable()` are missing matching `.destroy()` calls in `disable()` or its helper methods.

Destroy all objects

  • extension.js:111
                this._entry = new St.Entry({
                    hint_text: getText(this._extension, 'save_dialog_hint'),
                    can_focus: true,
                    style: 'padding: 6px;',
                })

EGO-L-005 warning

owned object references should be released in disable()

Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.

Destroy all objects

  • extension.js:111
                this._entry = new St.Entry({
                    hint_text: getText(this._extension, 'save_dialog_hint'),
                    can_focus: true,
                    style: 'padding: 6px;',
                })

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:721
                    GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, () => {
                        checkMatch();
                        return GLib.SOURCE_REMOVE;
                    })
  • extension.js:731
            GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
                checkMatch();
                return GLib.SOURCE_REMOVE;
            })
  • extension.js:867
                        GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
                            doApply();
                            return GLib.SOURCE_REMOVE;
                        })
  • extension.js:874
                    GLib.timeout_add(GLib.PRIORITY_DEFAULT, 30, () => {
                        setupActor();
                        return GLib.SOURCE_REMOVE;
                    })
  • extension.js:883
            GLib.timeout_add(GLib.PRIORITY_DEFAULT, 250, () => {
                doApply();
                return GLib.SOURCE_REMOVE;
            })
  • extension.js:901
            GLib.timeout_add(GLib.PRIORITY_DEFAULT, 4000, () => {
                cleanup();
                return GLib.SOURCE_REMOVE;
            })
  • extension.js:914
            GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
                this.loadDesk(name);
                return GLib.SOURCE_REMOVE;
            })

EGO-M-004 error

metadata shell-version must only include plausible stable releases and at most one development release

Field `shell-version` contains invalid values, more than one development release, or implausible future releases.

metadata.json must be well-formed

  • metadata.json
    shell-version=['45', '46', '47', '48', '49', '50', '51']

All Versions

Previous Reviews on this Version

JustPerfection rejected
Where is the git URL? Is this code generated by AI? If so, we have a rule for that: [EGO Review Guidelines: AI](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#extensions-must-not-be-ai-generated) Also, shexli issues need to be addressed.
loginone posted a review
Hi, I started to make this for my own use , since it is doing quite well for me for a longer time, decided to share. Didnt think about using git, because it is as it is and I wanted just to share. But if there will be some interest in this, I will push it to git and expand the project if necceseary. I just like the funcionality like in chromeos which i was using before and wanted to share this. Shexli issues where fixed. It is with a help of AI , so if this is a problem I can remove it. But that would be a loss for everybody ;)
JustPerfection rejected
1. Please add GitHub or GitLab repo url to the `metadata.json`: [EGO Review Guidelines: url](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#metadata-json-must-be-well-formed) 2. Please remove 51 since we don't have 51 stable yet. 3. Use gettext instead of creating custom translation: [Extensions Guide: Translations](https://gjs.guide/extensions/development/translations.html) 4. Avoid using unnecessary try-catch wrappers. There are many of them in this code generated by AI. 5. Timeout should be removed on destroy and before creating a new one (line 721, 874, 883, 901 `extension.js`): [EGO Review Guidelines: Timeout](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#remove-main-loop-sources) The source ids should be stored in an array property and loop to cleanup on disable. 6. Move everything out of the default class you are exporting. Keep the default class clean and small. You are not cleaning up all properties there on disable. 7. I cannot track the final `execArg` easily (line 974 `extension.js`). Maybe it's best to don't use desktop files. Let's keep it a GNOME Shell extension not an app.
loginone posted a review
Hi , I have uploaded a new version, I very much hope everything is OK now.