Save and restore window layouts on workspaces (Requires GNOME set to 'Workspaces on primary display only').
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
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()`.
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).
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()`.
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()`.
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.
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.
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`.
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.
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']
| Version | Status |
|---|---|
| 17 | Active |
| 16 | Inactive |
| 15 | Inactive |
| 14 | Rejected |
| 13 | Inactive |
| 12 | Inactive |
| 11 | Rejected |
| 10 | Rejected |
| 9 | Rejected |
| 8 | Rejected |
| 7 | Inactive |
| 6 | Rejected |
| 5 | Rejected |
| 4 | Rejected |
| 3 | Rejected |
| 2 | Rejected |
| 1 | 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.
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 ;)
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.
Hi , I have uploaded a new version, I very much hope everything is OK now.