Clipboard history manager with a built-in password vault: encrypted storage, search, copy-all and paste buttons
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:124
St.Clipboard.get_default()
passwordVaultDialog.js:25
St.Clipboard.get_default()
EGO-A-004 warning
extension files should not contain excessive ungated console logging
File contains 7 ungated console.log/warn/error calls (threshold: 5).
extension.js:1092
console.error('Error fetching URL metadata:', e)
extension.js:1860
console.error('Clipboard Indicator: Failed to refresh indicator')
extension.js:1861
console.error(e)
extension.js:2109
console.error(e)
extension.js:2237
console.error('Clipboard Indicator: Failed to update registry')
extension.js:2238
console.error(e)
extension.js:223
console.warn('Clipboard Indicator: password-vault-path fallback used', e)
EGO-X-003 warning
extensions should not call run_dispose in extension code
Extension code should not call `run_dispose()`.
keyboard.js:37
this.#device.run_dispose()
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()`.
registry.js:76
file.load_contents(null)
registry.js:219
file.load_contents(null)
urlMetadataManager.js:176
file.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:656
this.clearMenuItem.connect('activate', this._removeAll.bind(this))
extension.js:1453
menuItem.imagePreviewBtn.connect('clicked', () => {
this.#cancelHoverPreview(menuItem);
this.#showImagePreview(entry);
})
extension.js:1491
menuItem.editBtn.connect('clicked', () => showEditDialog(menuItem, {
onSave: () => this._saveEditedItem(menuItem),
}))
extension.js:1534
menuItem.protectBtn.connect('clicked', () => {
entry.setProtected(!entry.isProtected());
menuItem.protectBtn.visible = entry.isFavorite();
menuItem.protectBtn.child.icon_name = entry.isProtected()
? 'security-high-symbol
extension.js:1564
menuItem.pasteBtn.connect('clicked',
() => this.#pasteItem(menuItem)
)
extension.js:1584
menuItem.tagBtn.connect('clicked', () => showTagDialog(menuItem, {
onSaved: () => this._updateCache(),
}))
extension.js:2254
dialog.connect('closed', () => {
const i = this._vaultDialogs.indexOf(dialog);
if (i !== -1) {
this._vaultDialogs.splice(i, 1);
}
})
extension.js:1457
menuItem.imagePreviewBtn.connect('enter-event', () => {
this.#cancelHoverPreview(menuItem);
if (PREVIEW_ON_HOVER) {
menuItem.imagePreviewBtn._cwpHoverPreviewId = setTimeout(() => {
menuItem.imagePreviewBtn._cwpHo
extension.js:1346
menuItem.actor.connect('key-press-event', (actor, event) => {
switch (event.get_key_symbol()) {
case Clutter.KEY_Delete:
if (menuItem.entry.isFavorite()) {
if (CONFIRM_ON_PINNED_DELETE) {
this
extension.js:1469
menuItem.imagePreviewBtn.connect('leave-event', () => {
this.#cancelHoverPreview(menuItem);
this.imagePreview.close();
})
extension.js:197
this.menu.connect('open-state-changed', (menu, isOpen) => {
if (!isOpen) {
// Never leave a stale image preview behind when the menu
// closes while a hover preview is up.
this.imagePreview.close();
this.menu.sourceA
extension.js:523
this.menu.connect('open-state-changed', (self, open) => {
this._setFocusOnOpenTimeout = setTimeout(() => {
if (!open) return;
// Belt & braces: re-check the theme marker every time the menu
// opens in case the scheme changed while
extension.js:648
this.resetTimerButton.connect('clicked', () => {
this._scheduleNextHistoryClear();
})
extension.js:668
this.settingsMenuItem.connect('activate', this._openSettings.bind(this))
| Version | Status |
|---|---|
| cwp v1 (1) | Unreviewed |