Review of "gSnap" version 27

Details Page Preview

Organize windows in customizable snap zones like FancyZones on Windows.

Extension Homepage
https://github.com/GnomeSnapExtensions/gSnap

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 5

Shexli found 5 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:1460
    GLib.file_get_contents(filePath)

EGO-P-006 warning

unnecessary build and translation artifacts should not be shipped

Compiled GSettings schemas should not be shipped for 45+ packages.

Don't include unnecessary files

  • schemas/gschemas.compiled
    schemas/gschemas.compiled

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

  • extension.js:606
    this.widget = new St.BoxLayout({ style_class: styleClass })
  • extension.js:797
    this.buttonWidget = new St.Button({ style_class: 'tab-button' })
  • extension.js:1032
    this.widget = new St.Button({ style_class: 'size-button' })
  • extension.js:1109
            this.stage = new Clutter.Actor({
                name: 'gsnap-stage',
                visible: false,
                width: 1000,
                height: 1000,
                x: 0,
                y: 0,
            })
  • extension.js:2081
    this.indicator = new PanelMenu.Button(0.0, this.metadata.name, false)

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:606
    this.widget = new St.BoxLayout({ style_class: styleClass })
  • extension.js:797
    this.buttonWidget = new St.Button({ style_class: 'tab-button' })
  • extension.js:1032
    this.widget = new St.Button({ style_class: 'size-button' })
  • extension.js:1109
            this.stage = new Clutter.Actor({
                name: 'gsnap-stage',
                visible: false,
                width: 1000,
                height: 1000,
                x: 0,
                y: 0,
            })

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:799
            this.buttonWidget.connect('button-press-event', () => {
                Main.activateWindow(this.window);
            })
  • extension.js:1036
            this.widget.connect('button-press-event', () => {
                let [x, y] = global.get_pointer();
                this.startX = Math.floor(x);
                this.startY = Math.floor(y);
                this.isMoving = !this.isMoving;
            })
  • extension.js:2219
                item.actor.connect('enter-event', () => {
                    this.showLayoutPreview(monitorIndex, this.layouts.definitions[i]);
                })
  • extension.js:1830
            global.display.connect('grab-op-begin', (_display, win) => {
                // only start isGrabbing if is a valid window to avoid conflict 
                // with dash-to-panel/appIcons.js:1021 where are emitting a grab-op-begin
                // without never emitting a grab-op-end
                if (
  • extension.js:1852
            global.display.connect('grab-op-end', (_display, win) => {
                const useModifier = getBoolSetting(USE_MODIFIER);
                const preventSnapping = getBoolSetting(PREVENT_SNAPPING);
                this.isGrabbing = false;
                if (!validWindow(win)) {
                    return;
       
  • extension.js:1818
            global.display.connect('in-fullscreen-changed', (_display) => {
                activeMonitors().forEach(m => {
                    var _a;
                    if (global.display.get_monitor_in_fullscreen(m.index)) {
                        (_a = this.tabManager[m.index]) === null || _a === void 0 ? void 0 
  • extension.js:2222
                item.actor.connect('leave-event', () => {
                    this.hideLayoutPreview();
                })
  • extension.js:1889
                this.modifiersManager.connect("changed", () => {
                    if (!this.isGrabbing) {
                        return;
                    }
                    const spanMultipleZones = getBoolSetting(SPAN_MULTIPLE_ZONES);
                    if (spanMultipleZones) {
                        const allow_m
  • extension.js:1810
            global.display.connect('window-created', (_display, win) => {
                if (validWindow(win)) {
                    activeMonitors().forEach(m => {
                        var _a;
                        (_a = this.tabManager[m.index]) === null || _a === void 0 ? void 0 : _a.layoutWindows();
             

All Versions

Version Status
27 Active
26 Active
25 Active
24 Active
23 Active
22 Active
21 Rejected
20 Rejected
19 Active
18 Rejected
17 Rejected
16 Active
15 Active
14 Active
13 Active
12 Active
11 Active
10 Rejected
9 Active
8 Rejected
7 Rejected
6 Active
5 Active
4 Rejected
3 Rejected
2 Rejected
1 Rejected

Previous Reviews on this Version

fmuellner active