A local clipboard history for GNOME Shell. Cliporium reads clipboard text and images to store recent items on this device, never sends them anywhere, and lets you search, pin, and restore them from a keyboard-first popup.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-005 manual_review
extensions should not access the clipboard directly
Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.
extension.js:53
St.Clipboard.get_default()
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()`.
src/image-store.js:150
Gio.File.new_for_path(
this.pathFor(blobPath)
).load_contents(null)
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.
extension.js:528
button.connect('key-press-event', (_actor, event) => {
if (event.get_key_symbol() === Clutter.KEY_Escape)
return this._onKeyPress(event);
return Clutter.EVENT_PROPAGATE;
})
extension.js:226
clutterText.connect('key-focus-in', () => {
this._searchPill.add_style_class_name('cliporium-search-focused');
})
extension.js:229
clutterText.connect('key-focus-out', () => {
this._searchPill.remove_style_class_name('cliporium-search-focused');
})
extension.js:223
clutterText.connect('key-press-event', (_actor, event) =>
this._onKeyPress(event)
)
extension.js:219
clutterText.connect('text-changed', () => {
this._showClearConfirm = false;
this._scheduleSearch();
})
extension.js:182
this.menu.connect('open-state-changed', (_menu, open) => {
if (open)
this._onOpened();
else
this._onClosed();
})
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.
extension.js:770
this._captureTimeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 150, () => {
this._captureTimeout = 0;
this._captureClipboard().catch(() => {});
return GLib.SOURCE_REMOVE;
})
extension.js:623
this._focusTimeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 50, () => {
this._focusTimeout = 0;
if (!this._destroyed)
global.stage.set_key_focus(this._search);
return GLib.SOURCE_REMOVE;
})
extension.js:1650
this._noticeTimeout = GLib.timeout_add(
GLib.PRIORITY_DEFAULT,
timeout,
() => {
this._noticeTimeout = 0;
this._noticeText = '';
this._noticeWarning = false;
thi
extension.js:964
this._searchTimeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 120, () => {
this._searchTimeout = 0;
this._refresh();
return GLib.SOURCE_REMOVE;
})
extension.js:1412
GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
if (!this._destroyed && this._previewId)
this._previewBack.grab_key_focus();
return GLib.SOURCE_REMOVE;
})
| Version | Status |
|---|---|
| 3 | Unreviewed |
| 2 | Rejected |
| 1 | Rejected |