Review of "Clipboard History" version 2.1 (2)

Details Page Preview

Keeps a searchable history of what you copy, and pastes an entry back where you were typing when you click it. Screenshots and other images are listed too, with a thumbnail. * Reads the clipboard to record new copies, and to paste the entry you click * Writes to the clipboard only when you click an entry * Clicking an entry sends a Ctrl+V keystroke to the window you were typing in * Stores history and images under ~/.local/share/clipboard-manager/ and never accesses the network Pairs with the optional clipman GTK app, which reads the same history file.

Extension Homepage
https://github.com/Gabrial-8467/clipboard-manager

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 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:188
    St.Clipboard.get_default()

EGO-P-006 warning

unnecessary build and translation artifacts should not be shipped

Compiled GSettings schemas should not be shipped for 45+ packages.

Don't include unnecessary files

  • schemas/gschemas.compiled
    schemas/gschemas.compiled

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:750
    this._clearBtn = clearBtn
  • extension.js:779
    this._historySection = new PopupMenu.PopupMenuSection()
  • extension.js:733
            this._search = new St.Entry({
                hint_text: 'Search history…',
                can_focus: true,
                style_class: 'clipboard-history-search',
            })

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:357
                monitor.connect('changed', (_m, file, _other, event) => {
                    if (!isScreenshotsDir) {
                        if (file.get_basename() === SCREENSHOTS_SUBDIR)
                            this._watchDir(file, true);
                        return;
                    }
                    if (eve

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:764
                    this._focusIdle = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
                        this._focusIdle = null;
                        this._search.grab_key_focus();
                        return GLib.SOURCE_REMOVE;
                    })
  • extension.js:540
            this._pasteTimeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, PASTE_DELAY_MS, () => {
                this._pasteTimeout = null;
                try {
                    this._injectPaste([KEY_CTRL], KEY_V);
                } catch (e) {
                    log(`clipboard-history: paste injection failed: ${e}`)
  • extension.js:712
            this._rebuildTimeout = GLib.timeout_add(
                GLib.PRIORITY_DEFAULT, SEARCH_DEBOUNCE_MS, () => {
                    this._rebuildTimeout = 0;
                    this._rebuildList();
                    return GLib.SOURCE_REMOVE;
                })

All Versions

Version Status
2.1 (2) Unreviewed
1 Rejected