Review of "Superbar" version 11

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

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:356
    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:571
        this._actionsHint = new St.BoxLayout({
          style_class: "spotlight-actions-hint",
          vertical: false,
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:576
        this._actionsKey = new St.Label({
          text: ">",
          style_class: "spotlight-footer-key spotlight-actions-key",
        })
  • extension.js:435
        this._contentLayer = new St.BoxLayout({
          style_class: "spotlight-content",
          vertical: true,
          x_expand: true,
          y_expand: true,
        })
  • extension.js:456
        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:566
        this._footer = new St.BoxLayout({
          style_class: "spotlight-footer",
          vertical: false,
          x_expand: true,
        })
  • extension.js:560
        this._footerDivider = new St.Widget({
          style_class: "spotlight-divider spotlight-footer-divider",
          x_expand: true,
        })
  • extension.js:591
        this._footerHints = new St.BoxLayout({
          style_class: "spotlight-footer-hints",
          vertical: false,
          x_align: Clutter.ActorAlign.END,
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:588
    this._footerSpacer = new St.Widget({ x_expand: true })
  • extension.js:494
        this._headerDivider = new St.Widget({
          style_class: "spotlight-divider",
          x_expand: true,
        })
  • extension.js:450
        this._icon = new St.Icon({
          icon_name: "system-search-symbolic",
          style_class: "spotlight-icon",
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:445
        this._inputRow = new St.BoxLayout({
          style_class: "spotlight-input-row",
          vertical: false,
        })
  • extension.js:430
        this._materialLayer = new St.Widget({
          style_class: "spotlight-material",
          x_expand: true,
          y_expand: true,
        })
  • extension.js:479
        this._modeDot = new St.Widget({
          style_class: "spotlight-mode-dot",
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:467
        this._modeIndicator = new St.BoxLayout({
          style_class: "spotlight-mode-indicator",
          vertical: false,
          reactive: false,
          can_focus: false,
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:474
        this._modeInner = new St.BoxLayout({
          style_class: "spotlight-mode-inner",
          vertical: false,
          y_align: Clutter.ActorAlign.CENTER,
        })
  • extension.js:500
        this._resultsBox = new St.BoxLayout({
          style_class: "spotlight-results-box",
          vertical: true,
          x_expand: true,
        })
  • extension.js:540
        this._resultsClip = new St.Widget({
          style_class: "spotlight-results-clip",
          layout_manager: new Clutter.BinLayout(),
          x_expand: true,
          clip_to_allocation: true,
        })
  • extension.js:529
        this._resultsScroll = new St.ScrollView({
          style_class: "spotlight-results-scroll",
          x_expand: true,
          overlay_scrollbars: true,
        })
  • extension.js:506
        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:1701
        this._clipboardPollId = GLib.timeout_add(
          GLib.PRIORITY_DEFAULT,
          1200,
          () => {
            this._pollClipboard();
            return GLib.SOURCE_CONTINUE;
          },
        )
  • extension.js:3366
        this._resultsHeightTimeoutId = GLib.timeout_add(
          GLib.PRIORITY_DEFAULT,
          0,
          () => {
            this._resultsHeightTimeoutId = null;
            if (this._enabled) this._updateResultsHeight(false);
            return GLib.SOURCE_REMOVE;
          },
        )
  • extension.js:1507
        this._searchTimeout = GLib.timeout_add(
          GLib.PRIORITY_DEFAULT,
          delay,
          () => {
            this._searchTimeout = null;
            if (this._isCurrentQuery(text, generation)) callback();
            return GLib.SOURCE_REMOVE;
          },
        )
  • extension.js:3310
        this._selectionScrollTimeoutId = GLib.timeout_add(
          GLib.PRIORITY_DEFAULT,
          0,
          () => {
            this._selectionScrollTimeoutId = null;
            this._scrollToSelection();
            return GLib.SOURCE_REMOVE;
          },
        )

All Versions

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