Superbar is a keyboard-driven, system-wide launcher and command bar for GNOME Shell. It reads the clipboard to provide clipboard history, forwards generic queries to GNOME application search providers enabled by the user, 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:316
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:514
this._actionsHint = new St.BoxLayout({
style_class: "spotlight-actions-hint",
vertical: false,
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:377
this._contentLayer = new St.BoxLayout({
style_class: "spotlight-content",
vertical: true,
x_expand: true,
y_expand: true,
})
extension.js:399
this._entry = new St.Entry({
hint_text: "Search",
style_class: "spotlight-entry",
can_focus: true,
x_expand: true,
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:509
this._footer = new St.BoxLayout({
style_class: "spotlight-footer",
vertical: false,
x_expand: true,
})
extension.js:503
this._footerDivider = new St.Widget({
style_class: "spotlight-divider spotlight-footer-divider",
x_expand: true,
})
extension.js:535
this._footerHints = new St.BoxLayout({
style_class: "spotlight-footer-hints",
vertical: false,
x_align: Clutter.ActorAlign.END,
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:532
this._footerSpacer = new St.Widget({ x_expand: true })
extension.js:437
this._headerDivider = new St.Widget({
style_class: "spotlight-divider",
x_expand: true,
})
extension.js:372
this._highlightLayer = new St.Widget({
style_class: "spotlight-highlight",
x_expand: true,
y_expand: true,
})
extension.js:393
this._icon = new St.Icon({
icon_name: "system-search-symbolic",
style_class: "spotlight-icon",
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:388
this._inputRow = new St.BoxLayout({
style_class: "spotlight-input-row",
vertical: false,
})
extension.js:367
this._materialLayer = new St.Widget({
style_class: "spotlight-material",
x_expand: true,
y_expand: true,
})
extension.js:422
this._modeDot = new St.Widget({
style_class: "spotlight-mode-dot",
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:410
this._modeIndicator = new St.BoxLayout({
style_class: "spotlight-mode-indicator",
vertical: false,
reactive: false,
can_focus: false,
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:417
this._modeInner = new St.BoxLayout({
style_class: "spotlight-mode-inner",
vertical: false,
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:443
this._resultsBox = new St.BoxLayout({
style_class: "spotlight-results-box",
vertical: true,
x_expand: true,
})
extension.js:483
this._resultsClip = new St.Widget({
style_class: "spotlight-results-clip",
layout_manager: new Clutter.BinLayout(),
x_expand: true,
clip_to_allocation: true,
})
extension.js:472
this._resultsScroll = new St.ScrollView({
style_class: "spotlight-results-scroll",
x_expand: true,
overlay_scrollbars: true,
})
extension.js:449
this._statusBox = new St.BoxLayout({
style_class: "spotlight-status",
vertical: true,
x_expand: true,
y_expand: true,
visible: false,
})
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:1510
this._clipboardPollId = GLib.timeout_add(
GLib.PRIORITY_DEFAULT,
1200,
() => {
this._pollClipboard();
return GLib.SOURCE_CONTINUE;
},
)
extension.js:3085
this._resultsHeightTimeoutId = GLib.timeout_add(
GLib.PRIORITY_DEFAULT,
0,
() => {
this._resultsHeightTimeoutId = null;
if (this._enabled) this._updateResultsHeight(false);
return GLib.SOURCE_REMOVE;
},
)
extension.js:1340
this._searchTimeout = GLib.timeout_add(
GLib.PRIORITY_DEFAULT,
delay,
() => {
this._searchTimeout = null;
if (this._isCurrentQuery(text, generation)) callback();
return GLib.SOURCE_REMOVE;
},
)
extension.js:3029
this._selectionScrollTimeoutId = GLib.timeout_add(
GLib.PRIORITY_DEFAULT,
0,
() => {
this._selectionScrollTimeoutId = null;
this._scrollToSelection();
return GLib.SOURCE_REMOVE;
},
)
| Version | Status |
|---|---|
| 14 | Unreviewed |
| 13 | Rejected |
| 12 | Rejected |
| 11 | Rejected |
| 10 | Rejected |
| 9 | Rejected |
| 8 | Rejected |
| 7 | Rejected |
| 6 | Rejected |
| 5 | Rejected |
| 4 | Rejected |
| 3 | Rejected |
| 2 | Rejected |
| 1 | Rejected |
Object destroy warning: false-positive-ish; child actors are owned by _container, and _container.destroy() handles the tree. Adding duplicate child destroys would make cleanup noisier. Timeout warning: uses _removeSource() helper. I kept that helper-based cleanup rather than duplicating GLib.Source.remove() blocks everywhere.