Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-004 warning
extension files should not contain excessive ungated console logging
File contains 9 ungated console.log/warn/error calls (threshold: 5).
tiling.js:579
console.warn("invalid preferredWidth value")
tiling.js:589
console.warn("invalid preferredWidth unit:", `'${prop.unit}'`, "(should be 'px' or '%')")
tiling.js:760
console.warn("Bail at fixpoint, max tries reached")
tiling.js:950
console.warn(`clone/window position-changed recursive call: ${w.title}`)
tiling.js:2394
console.warn(`MONITORS_CHANGED: no primary monitor - 'layout' on spaces call ${called}`)
tiling.js:3560
console.warn("window already registered", metaWindow.title)
tiling.js:4233
console.warn("#winprops", `overwriteSpace with index ${overwriteSpace} does not exist. \
Opening "${metaWindow?.title}" on current space.`)
tiling.js:155
console.error(e)
tiling.js:4172
console.error("#winprops", `${overwriteSpace} is not a valid index. Ignoring.`)
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()`.
tiling.js:3617
unmaximize(metaWindow, Meta.MaximizeFlags.BOTH)
tiling.js:4281
unmaximize(metaWindow, Meta.MaximizeFlags.BOTH)
tiling.js:4920
unmaximize(metaWindow, Meta.MaximizeFlags.BOTH)
tiling.js:4966
unmaximize(metaWindow, Meta.MaximizeFlags.BOTH)
tiling.js:4987
unmaximize(metaWindow, Meta.MaximizeFlags.BOTH)
tiling.js:5007
unmaximize(metaWindow, Meta.MaximizeFlags.BOTH)
tiling.js:5028
unmaximize(metaWindow, Meta.MaximizeFlags.BOTH)
tiling.js:5082
unmaximize(metaWindow, 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()`.
tiling.js:3521
metaWindow.get_maximized()
tiling.js:3530
metaWindow.get_maximized()
EGO-P-006 warning
unnecessary build and translation artifacts should not be shipped
Compiled GSettings schemas should not be shipped for 45+ packages.
Don't include unnecessary files
schemas/gschemas.compiled
schemas/gschemas.compiled
EGO-P-004 error
GSettings schema XML filename must match schema id
GSettings schema filename must match `<schema-id>.gschema.xml`.
schemas/org.gnome.shell.extensions.paperwm.gschema.xml
id='org.gnome.shell.extensions.paperwm.keybindings' path='/org/gnome/shell/extensions/paperwm/keybindings/'
schemas/org.gnome.shell.extensions.paperwm.gschema.xml
id='org.gnome.shell.extensions.paperwm.workspace' path=''
schemas/org.gnome.shell.extensions.paperwm.gschema.xml
id='org.gnome.shell.extensions.paperwm.workspacelist' path='/org/gnome/shell/extensions/paperwm/workspaces/'
EGO-P-002 error
GSettings schema path must use /org/gnome/shell/extensions base
GSettings schema path must start with `/org/gnome/shell/extensions`.
schemas/org.gnome.shell.extensions.paperwm.gschema.xml
id='org.gnome.shell.extensions.paperwm.workspace' path=''
EGO-P-007 warning
JavaScript files should be reachable from extension.js or prefs.js
Some JavaScript files are not reachable from `extension.js` or `prefs.js` imports.
Don't include unnecessary files
config/user.js
virtTiling.js
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.
navigator.js:300
this.takeHint = new St.Label({ style_class: 'take-window-hint' })
EGO-L-001 warning
extension must not create GObject instances or modify shell before enable()
Resource creation or signal/source setup was found outside `enable()`.
Only use initialization for static resources
app.js:20
Tracker = Shell.WindowTracker.get_default()
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`.
background.js:672
this._interfaceSettings = new Gio.Settings({ schema_id: INTERFACE_SCHEMA })
background.js:664
this._settings = new Gio.Settings({ schema_id: settingsSchema })
navigator.js:300
this.takeHint = new St.Label({ style_class: 'take-window-hint' })
EGO-L-003 warning
signals connected by extension should be disconnected in disable()
Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.
navigator.js:91
this.signals.connect(this.actor, 'key-press-event', this._keyPressEvent.bind(this))
navigator.js:92
this.signals.connect(this.actor, 'key-release-event', this._keyReleaseEvent.bind(this))
topbar.js:379
this.signals.connect(this.tooltip_parent, 'enter-event', _icon => {
this._updateTooltipPosition(this.tooltip_x_point);
this.updateTooltipText();
tt.show();
// alignment needs to be set after actor is shown
t
topbar.js:387
this.signals.connect(this.tooltip_parent, 'leave-event', (_icon, _event) => {
if (!this.has_pointer) {
tt.hide();
}
})
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 |
|---|---|
| 51.0.0 (151) | Rejected |
| 51.0.0 (150) | Inactive |
| 50.0.1 (149) | Inactive |
| 50.0.1 (148) | Active |
| 50.0.0 (147) | Rejected |
| 49.0.2 (146) | Active |
| 49.0.1 (145) | Active |
| 49.0.0 (144) | Rejected |
| 49.0.0 (143) | Active |
| 48.0.3 (142) | Active |
| 48.0.2 (141) | Active |
| 44.18.1 (140) | Active |
| 44.18.0 (139) | Rejected |
| 48.0.1 (138) | Active |
| 48.0.0 (137) | Active |
| 47.1.1 (136) | Active |
| 47.1.0 (135) | Active |
| 47.1.0 (134) | Active |
| 47.0.0 (133) | Active |
| 46.17.1 (132) | Active |
| 46.17.0 (131) | Active |
| 46.16.1 (130) | Active |
| 46.16.0 (129) | Rejected |
| 46.15.1 (128) | Active |
| 46.15.0 (127) | Active |
| 46.14.0 (126) | Active |
| 46.13.8 (125) | Active |
| 46.13.7 (124) | Active |
| 46.13.6 (123) | Active |
| 46.13.5 (122) | Active |
| 46.13.4 (121) | Active |
| 46.13.3 (120) | Inactive |
| 46.13.2 (119) | Active |
| 46.13.1 (118) | Active |
| 46.13.0 (117) | Active |
| 46.12.1 (116) | Active |
| 46.12.0 (115) | Active |
| 46.11.2 (114) | Active |
| 46.11.1 (113) | Active |
| 46.10.2 (112) | Active |
| 46.10.1 (111) | Active |
| 46.10.0 (110) | Rejected |
| 46.9.1 (109) | Active |
| 46.9.0 (108) | Active |
| 46.8.1 (107) | Active |
| 46.8.0 (106) | Rejected |
| 46.7.0 (105) | Active |
| 46.6.7 (104) | Active |
| 46.6.6 (103) | Active |
| 46.6.5 (102) | Active |
| 44.18.0 (101) | Active |
| 46.6.4 (100) | Active |
| 46.6.3 (99) | Inactive |
| 46.6.2 (98) | Rejected |
| 46.6.1 (97) | Rejected |
| 46.6.0 (96) | Inactive |
| 46.5.1 (95) | Inactive |
| 46.5.0 (94) | Rejected |
| 46.4.1 (93) | Inactive |
| 46.4.0 (92) | Inactive |
| 46.3.2 (91) | Inactive |
| 46.3.1 (90) | Inactive |
| 46.3.0 (89) | Inactive |
| 46.2.0 (88) | Inactive |
| 46.1.0 (87) | Inactive |
| 46.0.0 (86) | Inactive |
| 46.0.0 (85) | Inactive |
| 45.14.0 (84) | Active |
| 45.13.0 (83) | Inactive |
| 45.12.2 (82) | Inactive |
| 45.12.1 (81) | Inactive |
| 45.12.0 (80) | Inactive |
| 45.11.0 (79) | Inactive |
| 45.10.1 (78) | Inactive |
| 45.10.0 (77) | Inactive |
| 45.9.2 (76) | Inactive |
| 45.9.1 (75) | Inactive |
| 45.9.0 (74) | Inactive |
| 45.8.1 (73) | Inactive |
| 45.8.0 (72) | Inactive |
| 44.17.0 (71) | Active |
| 45.7.0 (70) | Inactive |
| 44.16.0 (69) | Inactive |
| 45.6.0 (68) | Inactive |
| 44.15.2 (67) | Inactive |
| 45.5.0 (66) | Inactive |
| 45.4.2 (65) | Inactive |
| 44.15.1 (64) | Inactive |
| 44.15.0 (63) | Inactive |
| 45.4.1 (62) | Inactive |
| 44.14.0 (61) | Inactive |
| 45.4.0 (60) | Inactive |
| 59 | Inactive |
| 58 | Rejected |
| 57 | Inactive |
| 56 | Inactive |
| 55 | Inactive |
| 54 | Inactive |
| 53 | Inactive |
| 52 | Inactive |
| 51 | Inactive |
| 50 | Inactive |
| 49 | Inactive |
| 48 | Inactive |
| 47 | Inactive |
| 46 | Inactive |
| 45 | Inactive |
| 44 | Inactive |
| 43 | Rejected |
| 42 | Rejected |
| 41 | Inactive |
| 40 | Inactive |
| 39 | Inactive |
| 38 | Inactive |
| 37 | Inactive |
| 36 | Inactive |
| 35 | Inactive |
| 34 | Inactive |
| 33 | Inactive |
| 32 | Inactive |
| 31 | Inactive |
| 30 | Inactive |
| 29 | Inactive |
| 28 | Inactive |
| 27 | Inactive |
| 26 | Inactive |
| 25 | Inactive |
| 24 | Inactive |
| 23 | Inactive |
| 22 | Inactive |
| 21 | Inactive |
| 20 | Inactive |
| 19 | Inactive |
| 18 | Rejected |
| 17 | Inactive |
| 16 | Inactive |
| 15 | Inactive |
| 14 | Inactive |
| 13 | Inactive |
| 12 | Inactive |
| 11 | Inactive |
| 10 | Inactive |
| 9 | Inactive |
| 8 | Inactive |
| 7 | Inactive |
| 6 | Rejected |
| 5 | Inactive |
| 4 | Rejected |
| 3 | Rejected |
| 2 | Rejected |
| 1 | Rejected |
1. Where do you call `_removeSource()` on destroy/disable (line 89 `pointerwatcher.js`)? 2. Remove unnecessary try catch wrappers. disconnect doesn't need that: [Extension Best Practices Guidelines: Unnecessary try-catch](https://gjs.guide/extensions/review-guidelines/best-practices.html#avoid-unnecessary-try-catch-wrappers) 3. Avoid using unnecessary checks: [Extension Best Practices Guidelines: Unnecessary checks](https://gjs.guide/extensions/review-guidelines/best-practices.html#avoid-unnecessary-checks)
`_removeSource()` is called at the start of `_updateSource()` in the same file (line 61). As for checks and try/catch wrappers, in the overwhelming majority of cases these are fall-throughs to accommodate for API differences across supported versions, as well as race conditions in the native boundary of Clutter and other components causing crashes. Most try-catch blocks and null checks have been introduced after instabilities have been observed from upstream behavior. Please refer to the explanatory comments.
To further clarify, the destroy invoke is a reference count -- once all watches are gone the next update cycle will stop at the source removal as seen in line 62.
We shouldn't really trace back many levels for cleanup. and line 78 `pointerwatcher.js` is creating timeouts in cleanup which is not allowed. And why `_removeWatch` is getting called outside of class if it is private? For #2 and #3, the code still needs to be fixed.