Review of "Window Control" version 14 (2)

Details Page Preview

Exposes a D-Bus interface for listing and controlling windows, so scripts and applications can do on Wayland what wmctrl does on X11. List open windows with their ID, title, WM class, PID, workspace, monitor and geometry. Activate or focus a window by ID, title, WM class or PID. Move, resize, minimize, maximize, fullscreen, set above, set sticky or close a window. Tile the focused window to a 4x2 grid with Super+Ctrl and a numpad key. Every shortcut is a GSettings key that you can rebind or unbind. Place new windows automatically with rules in ~/.config/gnome-window-control/rules.json. The extension creates that directory, reads the file and never writes it. Without the file no window is placed. The extension has no preferences window and adds nothing to the panel. It registers the D-Bus object /org/gnome/Shell/Extensions/WindowControl on the org.gnome.Shell bus name. When you disable the extension, the D-Bus object, the shortcuts and the automatic placement stop; rules.json stays. IMPORTANT: the interface has no access control. Any application in your session can call it to read window titles and to control your windows. This is necessary for the intended use from shell scripts. Do not enable the extension if that is not acceptable to you. A command-line client, wctl, is available from the project page. It is not part of this extension and is not installed with it.

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 3

Shexli found 5 issues that may need reviewer attention.

EGO-A-004 warning

extension files should not contain excessive ungated console logging

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

No excessive logging

  • extension.js:1179
    console.log(`[${this.metadata.name}] Enabling extension...`)
  • extension.js:1184
    console.log(`[${this.metadata.name}] D-Bus service registered at ${DBUS_OBJECT_PATH}`)
  • extension.js:1194
    console.log(`[${this.metadata.name}] Extension enabled`)
  • extension.js:1198
    console.log(`[${this.metadata.name}] Disabling extension...`)
  • extension.js:1212
    console.log(`[${this.metadata.name}] D-Bus service unregistered`)
  • extension.js:1218
    console.log(`[${this.metadata.name}] Extension disabled`)
  • extension.js:253
    console.error(`[Window Control] ${label}() error: ${e.message}`)
  • extension.js:320
    console.error(`[Window Control] ${label}() error: ${e.message}`)
  • extension.js:343
    console.error(`[Window Control] ${label} error: ${e.message}`)
  • extension.js:372
    console.error(`[Window Control] List() error: ${e.message}`)

EGO-A-004 warning

extension files should not contain excessive ungated console logging

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

No excessive logging

  • rules.js:142
    console.log(`[Window Control] no ${RULES_FILE}; window rules off`)
  • rules.js:155
    console.log(`[Window Control] ${RULES_FILE}: ${this._rules.length} rule(s) loaded`)
  • rules.js:93
    console.error(`[Window Control] window rules disabled: ${e.message}`)
  • rules.js:145
    console.error(`[Window Control] ${RULES_FILE}: cannot read: ${e.message}`)
  • rules.js:259
    console.error(`[Window Control] rules: initial configuration: ${e.message}`)
  • rules.js:340
    console.error(`[Window Control] rules[${index}] -> ${id}: ${e.message}`)
  • rules.js:356
    console.error(`[Window Control] rules[${index}] -> ${id}: ${e.message}`)
  • rules.js:158
    console.warn(`[Window Control] ${RULES_FILE}: ${e.message}; window rules off`)

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

All Versions

Version Status
14 (2) Unreviewed
11 (1) Active