Review of "Veil" version 0.4.0 (9)

Details Page Preview

Veil - Modern successor to Hide Items. A cleaner, quieter GNOME panel.

Extension Homepage
https://github.com/dagimg-dot/veil

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 6

Shexli found 6 issues that may need reviewer attention.

EGO-A-004 warning

extension files should not contain excessive ungated console logging

File contains 7 ungated console.log/warn/error calls (threshold: 5).

No excessive logging

  • utils/logger.js:57
    console.log(`${prefix}: ${message}`)
  • utils/logger.js:61
    console.log(`${prefix}:   ${key}: ${value}`)
  • utils/logger.js:64
    console.log(`${prefix}: ${data}`)
  • utils/logger.js:67
    console.log(`${prefix}: ${message}`)
  • utils/logger.js:88
    console.error(`${prefix}: ${message}`)
  • utils/logger.js:89
    console.error(`${prefix}: ${String(error2)}`)
  • utils/logger.js:91
    console.error(`${prefix}: ${message}`)

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

  • components/indicator.js:97
          this.iconWidget = new St.Icon({
            gicon: veilIcon,
            style_class: "system-status-icon"
          })

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

  • components/indicator.js:97
          this.iconWidget = new St.Icon({
            gicon: veilIcon,
            style_class: "system-status-icon"
          })
  • components/indicator.js:23
    this.indicator = new PanelMenu.Button(0, "Veil")

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

  • components/indicator.js:36
        this.indicator.connect("button-press-event", (_actor, event) => {
          const button = event.get_button();
    
          if (button === Clutter.BUTTON_PRIMARY) {
            const interactionMode = this.settings.get_string("interaction-mode");
    
            if (interactionMode === "click") {
              logger.de
  • components/indicator.js:154
        this.indicator.connect("enter-event", () => {
          const interactionMode = this.settings.get_string("interaction-mode");
    
          if (interactionMode === "hover") {
            this.isHovering = true;
            this.updateIcon(true);
            this.onHoverEnterCallback?.();
          }
          return Clutter.E
  • components/indicator.js:165
        this.indicator.connect("leave-event", () => {
          const interactionMode = this.settings.get_string("interaction-mode");
    
          if (interactionMode === "hover") {
            this.isHovering = false;
            this.onHoverLeaveCallback?.();
          }
          return Clutter.EVENT_PROPAGATE;
        })
  • components/indicator.js:55
        this.indicator.connect("touch-event", (_actor, event) => {
          const eventType = event.type();
    
          if (eventType === Clutter.EventType.TOUCH_BEGIN) {
            const interactionMode = this.settings.get_string("interaction-mode");
    
            if (interactionMode === "click") {
              logger.de
  • core/panelManager.js:92
        child.connect("button-press-event", () => {
          this.pointerDownOnPanelItem = true;
          return Clutter.EVENT_PROPAGATE;
        })
  • core/panelManager.js:96
        child.connect("button-release-event", () => {
          this.pointerDownOnPanelItem = false;
          return Clutter.EVENT_PROPAGATE;
        })
  • core/panelManager.js:70
        child.connect("enter-event", () => {
          if (this.settings.get_string("interaction-mode") !== "hover") {
            return Clutter.EVENT_PROPAGATE;
          }
          this.setHoverInteractionZone("panel");
          return Clutter.EVENT_PROPAGATE;
        })
  • core/panelManager.js:77
        child.connect("leave-event", () => {
          if (this.settings.get_string("interaction-mode") !== "hover") {
            return Clutter.EVENT_PROPAGATE;
          }
          const shellMenu = child instanceof PanelMenu.Button ? child.menu : null;
          if (shellMenu?.isOpen) {
            return Clutter.EVENT_PR
  • extension.js:78
          veilMenu.connect("open-state-changed", () => {
            if (veilMenu.isOpen) return void 0;
            GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
              if (this.settings?.get_string("interaction-mode") !== "hover") {
                return GLib.SOURCE_REMOVE;
              }
              const inside =
  • lib/icons.js:21
          Icons.#settings.connect("changed::custom-close-icon", () => {
            this.loadIcon("arrow-close");
          })
  • lib/icons.js:17
          Icons.#settings.connect("changed::custom-open-icon", () => {
            this.loadIcon("arrow-open");
          })

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

  • core/panelManager.js:128
          GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
            this.syncHoverAfterPanelMenuClose();
            return GLib.SOURCE_REMOVE;
          })
  • extension.js:196
        GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
          this.panelManager?.scheduleTemporaryHide();
          return GLib.SOURCE_REMOVE;
        })
  • extension.js:80
            GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
              if (this.settings?.get_string("interaction-mode") !== "hover") {
                return GLib.SOURCE_REMOVE;
              }
              const inside = this.panelManager?.pointerInHoverSafeZone() ?? false;
              if (!inside) {
                this.

EGO-M-008 warning

extensions using unlock-dialog must document it in disable() comments

Extensions using `unlock-dialog` should document the reason in `disable()` comments.

Session Modes

  • extension.js
    unlock-dialog declared but disable() was not found

All Versions

Version Status
0.4.1 (10) Active
0.4.0 (9) Rejected
0.3.0 (8) Active
0.2.3 (7) Active
0.2.2 (6) Rejected
0.3.0 (5) Rejected
0.2.1 (4) Rejected
0.2.0 (3) Rejected
0.1.2 (2) Rejected
0.1.1 (1) Rejected

Previous Reviews on this Version

JD auto- rejected
Auto-rejected because of new version 0.4.1 (10) was uploaded