Review of "Clipboard Deck" version 1

Details Page Preview

A searchable, Windows-style history for clipboard text. Clipboard contents are stored locally and are never transmitted. Choose the optional Super+V shortcut in Preferences.

Extension Homepage
https://github.com/prateekkumaroriginal/gnome-shell-clipboard-deck

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-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:609
    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:269
            this._backdrop = new St.Button({
                style_class: 'wc-backdrop',
                reactive: true,
                can_focus: false,
                x_expand: true,
                y_expand: true,
            })
  • extension.js:336
            this._list = new St.BoxLayout({
                style_class: 'wc-list',
                vertical: true,
                x_expand: true,
            })
  • extension.js:298
            this._pauseButton = new St.Button({
                style_class: 'wc-pause-button',
                can_focus: true,
                toggle_mode: true,
                accessible_name: 'Pause clipboard capture',
                child: new St.Icon({icon_name: 'media-playback-pause-symbolic'}),
            })
  • extension.js:280
            this._popup = new St.BoxLayout({
                style_class: 'wc-popup',
                vertical: true,
                reactive: true,
            })
  • extension.js:330
            this._scroll = new St.ScrollView({
                style_class: 'wc-scroll',
                overlay_scrollbars: true,
                x_expand: true,
                y_expand: true,
            })
  • extension.js:318
            this._search = new St.Entry({
                style_class: 'wc-search',
                hint_text: 'Search copied items',
                can_focus: true,
                x_expand: true,
            })
  • extension.js:468
    row

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:269
            this._backdrop = new St.Button({
                style_class: 'wc-backdrop',
                reactive: true,
                can_focus: false,
                x_expand: true,
                y_expand: true,
            })
  • extension.js:336
            this._list = new St.BoxLayout({
                style_class: 'wc-list',
                vertical: true,
                x_expand: true,
            })
  • extension.js:262
            this._overlay = new St.Widget({
                style_class: 'wc-overlay',
                reactive: true,
                visible: false,
                layout_manager: new Clutter.FixedLayout(),
            })
  • extension.js:298
            this._pauseButton = new St.Button({
                style_class: 'wc-pause-button',
                can_focus: true,
                toggle_mode: true,
                accessible_name: 'Pause clipboard capture',
                child: new St.Icon({icon_name: 'media-playback-pause-symbolic'}),
            })
  • extension.js:280
            this._popup = new St.BoxLayout({
                style_class: 'wc-popup',
                vertical: true,
                reactive: true,
            })
  • extension.js:330
            this._scroll = new St.ScrollView({
                style_class: 'wc-scroll',
                overlay_scrollbars: true,
                x_expand: true,
                y_expand: true,
            })
  • extension.js:318
            this._search = new St.Entry({
                style_class: 'wc-search',
                hint_text: 'Search copied items',
                can_focus: true,
                x_expand: true,
            })

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:276
    this._backdrop.connect('clicked', () => this.close())
  • extension.js:352
            this._overlay.connect('key-press-event', (_actor, event) =>
                this._onKeyPress(event))
  • extension.js:305
            this._pauseButton.connect('clicked', () => {
                this._extension.paused = !this._extension.paused;
                this._pauseButton.checked = this._extension.paused;
                this._pauseButton.accessible_name = this._extension.paused
                    ? 'Resume clipboard capture'
         
  • extension.js:354
            this._search.clutter_text.connect('key-press-event', (_actor, event) =>
                this._onKeyPress(event))
  • extension.js:324
            this._search.clutter_text.connect('text-changed', () => {
                this._selectedIndex = 0;
                this._render();
            })
  • extension.js:479
            actor.connect('destroy', () => {
                if (actor.hover)
                    global.display.set_cursor(Meta.Cursor.DEFAULT);
            })
  • extension.js:474
            actor.connect('notify::hover', () => {
                global.display.set_cursor(
                    actor.hover ? Meta.Cursor.POINTING_HAND : Meta.Cursor.DEFAULT
                );
            })

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:497
            this._caretSource = GLib.timeout_add(
                GLib.PRIORITY_DEFAULT,
                530,
                () => {
                    if (!this._isOpen) {
                        this._caretSource = 0;
                        return GLib.SOURCE_REMOVE;
                    }
    
                    const searchText = t

All Versions

Version Status
1 Unreviewed