Review of "SimpleDeskNote" version 1

Details Page Preview

Sticky notes on the desktop with live markup, checkboxes and per-monitor positions.

Extension Homepage
https://github.com/lucaszampar/SimpleDeskNote

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

Shexli found 4 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:1245
    this._file.load_contents(null)

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:32
    this._label = new St.Label({style_class: 'sdn-tooltip', visible: false})
  • extension.js:1076
            this._layer = new St.Widget({
                name: 'simpledesknote-layer',
                reactive: false,
                layout_manager: new Clutter.FixedLayout(),
            })

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:362
            this._body.connect('button-press-event', (actor, event) => {
                if (event.get_button() === Clutter.BUTTON_PRIMARY &&
                    global.stage.get_event_actor(event) === this._body)
                    this.focusText();
                return Clutter.EVENT_PROPAGATE;
            })
  • extension.js:347
            this._entry.connect('captured-event', (actor, event) => {
                if (event.type() !== Clutter.EventType.BUTTON_PRESS)
                    return Clutter.EVENT_PROPAGATE;
                return this._onTextPress(actor, event);
            })
  • extension.js:327
            clutterText.connect('cursor-changed', () => {
                const key = `${clutterText.get_cursor_position()}:${clutterText.text.length}`;
                if (key === this._lastCursorKey)
                    return;
                this._lastCursorKey = key;
                this._ensureCursorVisible();
          
  • extension.js:316
            clutterText.connect('key-focus-in', () => {
                this._onKeyFocusIn();
                this._syncToolbar();
                this._applyAttributes();
            })
  • extension.js:321
            clutterText.connect('key-focus-out', () => {
                this._syncToolbar();
                this._applyAttributes();
            })
  • extension.js:334
    clutterText.connect('key-press-event', this._onKeyPress.bind(this))
  • extension.js:337
            clutterText.connect('notify::attributes', () => {
                // The notification may arrive late; ignore our own list
                const attrs = clutterText.get_attributes();
                if (attrs?.to_string() === this._appliedAttributes)
                    return;
                this._styleAttrib
  • extension.js:315
    clutterText.connect('text-changed', () => this._onTextChanged())
  • extension.js:920
    actor.connect('button-release-event', this._onGrabEnd.bind(this))
  • extension.js:919
    actor.connect('motion-event', this._onGrabMotion.bind(this))
  • extension.js:1040
            this.menu.connect('open-state-changed', (menu, open) => {
                if (open)
                    this._rebuildNotesList();
            })

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:696
            this._applyId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
                this._applyId = 0;
                this._applyAttributes();
                return GLib.SOURCE_REMOVE;
            })
  • extension.js:894
            this._confirmTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, CONFIRM_TIMEOUT_MS, () => {
                this._confirmButton.hide();
                this._confirmTimeoutId = 0;
                return GLib.SOURCE_REMOVE;
            })
  • extension.js:583
                this._normalizeId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
                    this._normalizeId = 0;
                    this._normalize();
                    return GLib.SOURCE_REMOVE;
                })
  • extension.js:542
            this._toolbarId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
                this._toolbarId = 0;
                if (this._grab)
                    return GLib.SOURCE_REMOVE;
                this._toolbar.visible = this._entry.clutter_text.has_key_focus() ||
                    this._titleEntry.clutter_text

All Versions

Version Status
1 Unreviewed