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:397
St.Clipboard.get_default()
EGO-A-004 warning
extension files should not contain excessive ungated console logging
File contains 8 ungated console.log/warn/error calls (threshold: 5).
extension.js:858
console.warn(
`Superbar: mutter refused the keybinding name ` +
`"${TOGGLE_KEYBINDING_NAME}"; another extension has registered it`,
)
extension.js:918
console.warn(
`Superbar: could not check the shortcut for conflicts: ${error}`,
)
extension.js:363
console.error(`Superbar: cleanup after a failed enable also failed: ${cleanupError}`)
extension.js:978
console.error(`Superbar: could not take over the shortcut: ${error}`)
extension.js:1398
console.error(`Superbar: failed to open the search bar: ${error}`)
extension.js:2760
console.error(`[Superbar] Action failed (${result.label}): ${e.message}`)
extension.js:3481
console.error(`[Superbar] Failed to launch app: ${e}`)
extension.js:3493
console.error(
`[Superbar] Search provider activation failed: ${error}`,
)
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:612
this._actionsHint = new St.BoxLayout({
style_class: "spotlight-actions-hint",
vertical: false,
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:617
this._actionsKey = new St.Label({
text: ">",
style_class: "spotlight-footer-key spotlight-actions-key",
})
extension.js:476
this._contentLayer = new St.BoxLayout({
style_class: "spotlight-content",
vertical: true,
x_expand: true,
y_expand: true,
})
extension.js:497
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:607
this._footer = new St.BoxLayout({
style_class: "spotlight-footer",
vertical: false,
x_expand: true,
})
extension.js:601
this._footerDivider = new St.Widget({
style_class: "spotlight-divider spotlight-footer-divider",
x_expand: true,
})
extension.js:632
this._footerHints = new St.BoxLayout({
style_class: "spotlight-footer-hints",
vertical: false,
x_align: Clutter.ActorAlign.END,
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:629
this._footerSpacer = new St.Widget({ x_expand: true })
extension.js:535
this._headerDivider = new St.Widget({
style_class: "spotlight-divider",
x_expand: true,
})
extension.js:491
this._icon = new St.Icon({
icon_name: "system-search-symbolic",
style_class: "spotlight-icon",
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:486
this._inputRow = new St.BoxLayout({
style_class: "spotlight-input-row",
vertical: false,
})
extension.js:471
this._materialLayer = new St.Widget({
style_class: "spotlight-material",
x_expand: true,
y_expand: true,
})
extension.js:520
this._modeDot = new St.Widget({
style_class: "spotlight-mode-dot",
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:508
this._modeIndicator = new St.BoxLayout({
style_class: "spotlight-mode-indicator",
vertical: false,
reactive: false,
can_focus: false,
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:515
this._modeInner = new St.BoxLayout({
style_class: "spotlight-mode-inner",
vertical: false,
y_align: Clutter.ActorAlign.CENTER,
})
extension.js:541
this._resultsBox = new St.BoxLayout({
style_class: "spotlight-results-box",
vertical: true,
x_expand: true,
})
extension.js:581
this._resultsClip = new St.Widget({
style_class: "spotlight-results-clip",
layout_manager: new Clutter.BinLayout(),
x_expand: true,
clip_to_allocation: true,
})
extension.js:570
this._resultsScroll = new St.ScrollView({
style_class: "spotlight-results-scroll",
x_expand: true,
overlay_scrollbars: true,
})
extension.js:547
this._statusBox = new St.BoxLayout({
style_class: "spotlight-status",
vertical: true,
x_expand: true,
y_expand: true,
visible: false,
})
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.
extension.js:989
dialog.connect("closed", () => {
this._conflictDialog = null;
})
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:1974
this._clipboardPollId = GLib.timeout_add(
GLib.PRIORITY_DEFAULT,
1200,
() => {
this._pollClipboard();
return GLib.SOURCE_CONTINUE;
},
)
extension.js:886
this._conflictPromptId = GLib.timeout_add_seconds(
GLib.PRIORITY_DEFAULT,
CONFLICT_PROMPT_RETRY_SECONDS,
() => {
if (!this._enabled) {
this._conflictPromptId = null;
return GLib.SOURCE_REMOVE;
}
if (Main.actionMode === Shell.ActionMo
extension.js:3639
this._resultsHeightTimeoutId = GLib.timeout_add(
GLib.PRIORITY_DEFAULT,
0,
() => {
this._resultsHeightTimeoutId = null;
if (this._enabled) this._updateResultsHeight(false);
return GLib.SOURCE_REMOVE;
},
)
extension.js:1780
this._searchTimeout = GLib.timeout_add(
GLib.PRIORITY_DEFAULT,
delay,
() => {
this._searchTimeout = null;
if (this._isCurrentQuery(text, generation)) callback();
return GLib.SOURCE_REMOVE;
},
)
extension.js:3583
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 |