Superbar is a keyboard-driven, system-wide launcher and command bar for GNOME Shell. It reads the clipboard to provide clipboard history and sends user-entered weather locations, dictionary terms, and currency conversions to open-meteo.com, dictionaryapi.dev, and frankfurter.app.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-005 manual_review
extensions should not access the clipboard directly
Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.
extension.js:54
St.Clipboard.get_default()
extension.js:1150
St.Clipboard.get_default()
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:76
this._entry = new St.Entry({
hint_text: "Search apps, calculate...",
style_class: "spotlight-entry",
can_focus: true,
x_expand: true,
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:70
this._icon = new St.Icon({
icon_name: "system-search-symbolic",
style_class: "spotlight-icon",
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:65
this._inputRow = new St.BoxLayout({
style_class: "spotlight-input-row",
vertical: false,
})
extension.js:88
this._resultsBox = new St.BoxLayout({
style_class: "spotlight-results-box",
vertical: true,
x_expand: true,
})
extension.js:105
this._resultsClip = new St.Widget({
style_class: "spotlight-results-clip",
layout_manager: new Clutter.BinLayout(),
x_expand: true,
clip_to_allocation: true,
})
extension.js:94
this._resultsScroll = new St.ScrollView({
style_class: "spotlight-results-scroll",
x_expand: true,
overlay_scrollbars: true,
})
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:1116
GLib.timeout_add(GLib.PRIORITY_DEFAULT, 0, () => {
const [, naturalHeight] = this._resultsBox.get_preferred_height(
this._resultsBox.width,
);
this._animateResultsHeight(Math.min(naturalHeight, 450));
return GLib.SOURCE_REMOVE;
})
| Version | Status |
|---|---|
| 10 | Unreviewed |
| 9 | Rejected |
| 8 | Rejected |
| 7 | Rejected |
| 6 | Rejected |
| 5 | Rejected |
| 4 | Rejected |
| 3 | Rejected |
| 2 | Rejected |
| 1 | Rejected |
1. Don't need to use any parameters for `this.getSettings()` since you already have that in `metadata.json`. 2. Please use `connectObject()` and `disconnectObject()` so it is easier to track for cleanup. 3. Timeout should be removed before creating a new one (line 505 `extension.js`). 4. Allowing to do that with spawn (line 765 `extension.js`) since you want to make it consistent with other times. But you should use gjs for d-bus. Also any other thing in `_searchSystemCommands()` can be done with gjs. 5. That can lead to security issues since the `text` is not anesthetized (line 819 `extension.js`). 6. You should add to the description that this extension is using `open-meteo.com`, `dictionaryapi.dev`, `frankfurter.app` services. 7. Timeout should be removed on disable and also before creating a new one (line 1116 `extension.js`): [EGO Review Guidelines: Timeout](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#remove-main-loop-sources) 8. You have `Main.getStyleVariant()` which returns (`light`, `dark` or empty string) that you can use instead (line 1250 `extension.js`). 9. Please add to the description that this extension is using clipboard: [EGO Review Guidelines: Clipboard](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#clipboard-access-must-be-declared) You can also add `donations` to the `metadata.json`, so people can donate to you if they want: [Extension Anatomy: donations](https://gjs.guide/extensions/overview/anatomy.html#donations) If you need any help with your extension you can ask us on: - [GNOME Extensions Matrix Channel](https://matrix.to/#/#extensions:gnome.org) - IRC Bridge: irc://irc.gimpnet.org/shell-extensions
Addressed all feedback from version 3: metadata-based settings lookup, connectObject/disconnectObject cleanup, tracked main-loop sources, GJS system actions, safe argv-based subprocesses, sanitized input handling, service and clipboard disclosures, Main.getStyleVariant(), and donation metadata.