Review of "Clipboard Popup" version 1.0 (1)

Details Page Preview

Windows-style clipboard history. Press Super+V to open a popup next to the pointer, pick an item and it is pasted into the window you were using. - Text and images, newest first; copying something again moves it to the top - Pin items to keep them; after a reboot only pinned items remain, like on Windows - History survives the screen lock - Keyboard: arrows, Enter to paste, Delete to remove, Esc to close - Pastes with Ctrl+Shift+V in terminals - Passwords copied from password managers (KeePassXC, Bitwarden) are not saved - Frees Super+V from the notification list while enabled and gives it back when disabled

Extension Homepage
https://github.com/nessunohastonick/clipboard-popup

No comments.

FAQ

Files

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

Shexli (experimental) warning 4 manual_review 1

Shexli found 5 issues that may need reviewer attention.

EGO-X-004 warning

extensions should avoid synchronous file IO in shell code

Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.

File Operations

  • extension.js:45
    GLib.file_get_contents(path)
  • extension.js:541
    GLib.file_get_contents(item.file)

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:428
    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:249
            this._list = new St.BoxLayout({style_class: 'cp-list',
                orientation: Clutter.Orientation.VERTICAL})
  • extension.js:237
            this._panel = new St.BoxLayout({style_class: 'cp-panel', reactive: true,
                orientation: Clutter.Orientation.VERTICAL})
  • extension.js:251
            this._scroll = new St.ScrollView({style_class: 'cp-scroll', x_expand: true, y_expand: true,
                hscrollbar_policy: St.PolicyType.NEVER, vscrollbar_policy: St.PolicyType.AUTOMATIC,
                child: this._list})

EGO-L-005 warning

owned object references should be released in disable()

Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.

Destroy all objects

  • extension.js:232
            this._backdrop = new St.Widget({reactive: true, x: 0, y: 0,
                width: global.stage.width, height: global.stage.height})
  • extension.js:249
            this._list = new St.BoxLayout({style_class: 'cp-list',
                orientation: Clutter.Orientation.VERTICAL})
  • extension.js:237
            this._panel = new St.BoxLayout({style_class: 'cp-panel', reactive: true,
                orientation: Clutter.Orientation.VERTICAL})
  • extension.js:251
            this._scroll = new St.ScrollView({style_class: 'cp-scroll', x_expand: true, y_expand: true,
                hscrollbar_policy: St.PolicyType.NEVER, vscrollbar_policy: St.PolicyType.AUTOMATIC,
                child: this._list})

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.

Disconnect all signals

  • extension.js:235
    this._backdrop.connect('button-press-event', (_a, ev) => this._onBackdropPress(ev))
  • extension.js:234
    this._backdrop.connect('key-press-event', (_a, ev) => this._onKey(ev))

All Versions

Version Status
1.0 (1) Unreviewed