Review of "Window Control" version 17 (5)

Details Page Preview

List, move and tile windows from a script, a rules file or the keyboard. It works on Wayland, where wmctrl and xdotool reach only XWayland windows, and on X11. * Scripts: list every window with its ID, title, WM class, PID, workspace, monitor and geometry. Activate, move, resize, minimize, maximize, fullscreen, keep above, make sticky or close a window, move it to another workspace or monitor, or wait until a window opens. Use the wctl command-line client or any D-Bus client, such as gdbus. * Rules: a rule in ~/.config/gnome-window-control/rules.json places a matching window when it opens. The extension reads that file and never writes it. * Keyboard: Super+Ctrl and a numpad key tile the focused window on a 4x2 grid. You can rebind or unbind every shortcut in GSettings. No preferences window and no panel icon. When you disable the extension, the D-Bus interface, the rules and the shortcuts stop. IMPORTANT: the D-Bus interface has no access control. Any application in your session can read your window titles and control your windows. Do not enable the extension if that is not acceptable to you. wctl is a separate download and is not installed with this extension. Get it and the full documentation from the project page.

Extension Homepage
https://github.com/carlo9890/gnome-window-control

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) error 2 warning 4

Shexli found 6 issues that may need reviewer attention.

EGO-A-004 warning

extension files should not contain excessive ungated console logging

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

No excessive logging

  • extension.js:273
    console.error(`[Window Control] ${label}() error: ${e.message}`)
  • extension.js:347
    console.error(`[Window Control] ${label}() error: ${e.message}`)
  • extension.js:370
    console.error(`[Window Control] ${label} error: ${e.message}`)
  • extension.js:399
    console.error(`[Window Control] List() error: ${e.message}`)
  • extension.js:457
    console.error(`[Window Control] ListDetailed() error: ${e.message}`)
  • extension.js:489
    console.error(`[Window Control] ListMonitors() error: ${e.message}`)
  • extension.js:547
    console.error(`[Window Control] GetFocused() error: ${e.message}`)
  • extension.js:609
    console.error(`[Window Control] GetGeometry() error: ${e.message}`)
  • extension.js:667
    console.error(`[Window Control] GetWorkarea() error: ${e.message}`)
  • extension.js:707
    console.error(`[Window Control] ListWorkspaces() error: ${e.message}`)

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

  • rules.js:163
    console.warn(`[Window Control] ${RULES_FILE}: ${e.message}; window rules off`)
  • rules.js:83
    console.error(`[Window Control] cannot create ${CONFIG_DIR}: ${e.message}`)
  • rules.js:95
    console.error(`[Window Control] ${RULES_FILE} is not watched for changes: ${e.message}`)
  • rules.js:150
    console.error(`[Window Control] ${RULES_FILE}: cannot read: ${e.message}; window rules off`)
  • rules.js:264
    console.error(`[Window Control] rules: initial configuration: ${e.message}`)
  • rules.js:349
    console.error(`[Window Control] rules[${index}] -> ${id}: ${e.message}`)
  • rules.js:365
    console.error(`[Window Control] rules[${index}] -> ${id}: ${e.message}`)

EGO-C49-003 error

extensions targeting GNOME 49 must not call maximize or unmaximize with Meta.MaximizeFlags

This extension explicitly targets GNOME Shell 49 but still passes `Meta.MaximizeFlags` to `maximize()` or `unmaximize()`.

Meta.Window

  • window-helpers.js:33
    win.maximize(Meta.MaximizeFlags.BOTH)
  • window-helpers.js:41
    win.unmaximize(Meta.MaximizeFlags.BOTH)

EGO-C49-004 error

extensions targeting GNOME 49 must not call Meta.Window.get_maximized

This extension explicitly targets GNOME Shell 49 but still calls removed `Meta.Window.get_maximized()`.

Meta.Window

  • window-helpers.js:22
    win.get_maximized()

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:123
            this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(
                DBUS_INTERFACE_INFO,
                this
            )

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:148
            this._windowCreatedId = global.display.connect('window-created',
                (display, win) => this._onWindowCreated(win))

All Versions

Version Status
19 (7) Active
18 (6) Rejected
17 (5) Rejected
16 (4) Active
15 (3) Rejected
14 (2) Rejected
11 (1) Active

Previous Reviews on this Version

JustPerfection rejected
Didn't review since you are using unnecessary try-catch wrappers: https://gjs.guide/extensions/review-guidelines/best-practices.html#avoid-unnecessary-try-catch-wrappers