Review of "Superbar" version 10

Details Page Preview

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.

Extension Homepage
https://github.com/Furkan-rgb/superbar

No comments.

Diff Against

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) warning 2 manual_review 1

Shexli found 3 issues that may need reviewer attention.

EGO-A-005 manual_review

extensions should not access the clipboard directly

Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.

Review Guidelines

  • 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.

Destroy all objects

  • extension.js:508
        this._actionsHint = new St.BoxLayout({
          style_class: "spotlight-actions-hint",
          vertical: false,
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:372
        this._contentLayer = new St.BoxLayout({
          style_class: "spotlight-content",
          vertical: true,
          x_expand: true,
          y_expand: true,
        })
  • extension.js:393
        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:503
        this._footer = new St.BoxLayout({
          style_class: "spotlight-footer",
          vertical: false,
          x_expand: true,
        })
  • extension.js:497
        this._footerDivider = new St.Widget({
          style_class: "spotlight-divider spotlight-footer-divider",
          x_expand: true,
        })
  • extension.js:529
        this._footerHints = new St.BoxLayout({
          style_class: "spotlight-footer-hints",
          vertical: false,
          x_align: Clutter.ActorAlign.END,
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:526
    this._footerSpacer = new St.Widget({ x_expand: true })
  • extension.js:431
        this._headerDivider = new St.Widget({
          style_class: "spotlight-divider",
          x_expand: true,
        })
  • extension.js:387
        this._icon = new St.Icon({
          icon_name: "system-search-symbolic",
          style_class: "spotlight-icon",
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:382
        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:416
        this._modeDot = new St.Widget({
          style_class: "spotlight-mode-dot",
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:404
        this._modeIndicator = new St.BoxLayout({
          style_class: "spotlight-mode-indicator",
          vertical: false,
          reactive: false,
          can_focus: false,
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:411
        this._modeInner = new St.BoxLayout({
          style_class: "spotlight-mode-inner",
          vertical: false,
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:437
        this._resultsBox = new St.BoxLayout({
          style_class: "spotlight-results-box",
          vertical: true,
          x_expand: true,
        })
  • extension.js:477
        this._resultsClip = new St.Widget({
          style_class: "spotlight-results-clip",
          layout_manager: new Clutter.BinLayout(),
          x_expand: true,
          clip_to_allocation: true,
        })
  • extension.js:466
        this._resultsScroll = new St.ScrollView({
          style_class: "spotlight-results-scroll",
          x_expand: true,
          overlay_scrollbars: true,
        })
  • extension.js:443
        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.

Remove main loop sources

  • extension.js:1507
        this._clipboardPollId = GLib.timeout_add(
          GLib.PRIORITY_DEFAULT,
          1200,
          () => {
            this._pollClipboard();
            return GLib.SOURCE_CONTINUE;
          },
        )
  • extension.js:3082
        this._resultsHeightTimeoutId = GLib.timeout_add(
          GLib.PRIORITY_DEFAULT,
          0,
          () => {
            this._resultsHeightTimeoutId = null;
            if (this._enabled) this._updateResultsHeight(false);
            return GLib.SOURCE_REMOVE;
          },
        )
  • extension.js:1337
        this._searchTimeout = GLib.timeout_add(
          GLib.PRIORITY_DEFAULT,
          delay,
          () => {
            this._searchTimeout = null;
            if (this._isCurrentQuery(text, generation)) callback();
            return GLib.SOURCE_REMOVE;
          },
        )
  • extension.js:3026
        this._selectionScrollTimeoutId = GLib.timeout_add(
          GLib.PRIORITY_DEFAULT,
          0,
          () => {
            this._selectionScrollTimeoutId = null;
            this._scrollToSelection();
            return GLib.SOURCE_REMOVE;
          },
        )

All Versions

Version Status
10 Unreviewed
9 Rejected
8 Rejected
7 Rejected
6 Rejected
5 Rejected
4 Rejected
3 Rejected
2 Rejected
1 Rejected