Logo Menu - Menu similar to Apple's macOS menu for the GNOME Desktop This extension gives a simple menu along with the ability to get the icon of your distro on top left part of the panel for a great look. The Icon can be customised through settings, it has both Linux and BSD logos. For more screenshots, visit GitHub. The 'Activities' indicator is hidden by default but can be enabled through settings. The default Terminal and Software centre can also be changed. Force Quit works on Wayland and Xorg
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
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.
selection.js:58
this._areaSelection = new St.Widget({
name: 'area-selection',
style_class: 'area-selection',
visible: 'true',
reactive: 'true',
x: -10,
y: -10,
})
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:31
this._settings = extension.getSettings()
selection.js:58
this._areaSelection = new St.Widget({
name: 'area-selection',
style_class: 'area-selection',
visible: 'true',
reactive: 'true',
x: -10,
y: -10,
})
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.
selection.js:72
this._signalCapturedEvent = this._areaSelection.connect(
'captured-event',
this._onCaptureEvent.bind(this)
)
selection.js:134
this._capture.connect('captured-event', this._onEvent.bind(this))
selection.js:135
this._capture.connect('stop', () => {
this.emit('stop');
})
| Version | Status |
|---|---|
| 24.6 (41) | Active |
| 24.6 (40) | Rejected |
| 24.4 (39) | Active |
| 24.2 (38) | Active |
| 24.0 (37) | Active |
| 23.6 (36) | Active |
| 23.4 (35) | Active |
| 23.2 (34) | Active |
| 23.2 (33) | Rejected |
| 23.0 (32) | Active |
| 22.8 (31) | Active |
| 22.6 (30) | Active |
| 22.4 (29) | Active |
| 22.2 (28) | Active |
| 22 (27) | Active |
| 21.8 (26) | Active |
| 21.6 (25) | Active |
| 20.legacy (24) | Active |
| 21.4 (23) | Active |
| 19.legacy (22) | Active |
| 21 | Active |
| 20 | Active |
| 19 | Active |
| 18 | Active |
| 17 | Rejected |
| 16 | Active |
| 15 | Active |
| 14 | Inactive |
| 13 | Active |
| 12 | Rejected |
| 11 | Active |
| 10 | Active |
| 9 | Active |
| 8 | Active |
| 7 | Active |
| 6 | Active |
| 5 | Active |
| 4 | Active |
| 3 | Active |
| 2 | Active |
| 1 | Rejected |
I'd like to address each warning against selection.js, as I believe the static analyser is flagging patterns that are already correctly handled at runtime. **EGO-L-002 / EGO-L-005 — `_areaSelection` (selection.js:58)** The `_areaSelection` widget is always destroyed via `_stop()`, which calls `this._areaSelection.destroy()` before nulling and removing it from the UI group. `_stop()` is reached through every exit path — Escape key, left click (kill + stop), and right click — and is also the place where the grab and signal are cleaned up. This widget is intentionally scoped to the lifetime of a single `Capture` instance, not to `enable()`/`disable()`. Treating it as an extension-level owned object would be incorrect. **EGO-L-003 — `_signalCapturedEvent` (selection.js:72)** This signal is explicitly disconnected at the top of `_stop()` via `this._areaSelection.disconnect(this._signalCapturedEvent)`, before the widget is destroyed. **EGO-L-003 — `_capture.connect(...)` (selection.js:134–135)** `_capture` is a `Signals.EventEmitter`, not a GObject. Its `_stop()` method calls `this.disconnectAll()` on the emitter itself, which severs all listeners, including the two connected by `SelectionWindow`. Additionally, `SelectionWindow` is a short-lived, fire-and-forget object instantiated on demand — it has no persistent presence across `enable()`/`disable()` cycles and holds no reference in the extension's own state. **EGO-L-005 — `this._settings` (extension.js:31)** This was a valid concern and has already been addressed in the latest submission: `MenuButton` now connects a `destroy` handler that sets `this._settings = null`, and `LogoMenu.disable()` sets `this.settings = null` after destroying the indicator. I'm happy to discuss further if there's a specific scenario the reviewer believes these patterns don't cover.