Review of "XDock" version 1

Details Page Preview

A community-driven dock for the GNOME Shell. Moves the dash out of the overview into a dock for easier app launching and window switching. Features hover previews, icon categories, and more. Community fork of Dash to Dock — focused on timely updates and user-centric development.

Extension Homepage
https://github.com/dmzoneill-forks/xdock

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 6

Shexli found 6 issues that may need reviewer attention.

EGO-P-007 warning

JavaScript files should be reachable from extension.js or prefs.js

Some JavaScript files are not reachable from `extension.js` or `prefs.js` imports.

Don't include unnecessary files

  • dockStruts.js
  • features/locationsWorker.js
  • platform/actors.js
  • platform/animations.js
  • platform/layout.js
  • platform/signals.js
  • platform/theme.js

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

  • docking.js:332
    this._staticBox = new Clutter.ActorBox()
  • features/locations.js:1531
            this._background = new St.Widget({
                style_class: 'dash-background',
                x_expand: true,
                y_expand: true,
            })
  • features/locations.js:1522
            this._boxContainer = new St.BoxLayout({
                name: 'dashtodockBoxContainer',
                x_align: Clutter.ActorAlign.FILL,
                y_align: Clutter.ActorAlign.FILL,
                orientation: Clutter.Orientation.VERTICAL,
            })
  • features/locations.js:1504
            this._dashActor = new St.Widget({
                name: 'dash',
                layout_manager: new Clutter.BinLayout(),
                x_expand: true,
                y_expand: true,
            })
  • features/locations.js:1512
            this._dashContainer = new St.BoxLayout({
                name: 'dashtodockDashContainer',
                x_align: Clutter.ActorAlign.CENTER,
                y_align: Clutter.ActorAlign.CENTER,
                orientation: Clutter.Orientation.VERTICAL,
                x_expand: true,
                y_expand: true,

EGO-L-001 warning

extension must not create GObject instances or modify shell before enable()

Resource creation or signal/source setup was found outside `enable()`.

Only use initialization for static resources

  • appIcons.js:74
    tracker = Shell.WindowTracker.get_default()

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

  • docking.js:332
    this._staticBox = new Clutter.ActorBox()
  • docking.js:2454
    this._mutterSettings = new Gio.Settings({schema_id: MUTTER_SCHEMA})
  • features/locations.js:1531
            this._background = new St.Widget({
                style_class: 'dash-background',
                x_expand: true,
                y_expand: true,
            })
  • features/locations.js:1522
            this._boxContainer = new St.BoxLayout({
                name: 'dashtodockBoxContainer',
                x_align: Clutter.ActorAlign.FILL,
                y_align: Clutter.ActorAlign.FILL,
                orientation: Clutter.Orientation.VERTICAL,
            })
  • features/locations.js:1504
            this._dashActor = new St.Widget({
                name: 'dash',
                layout_manager: new Clutter.BinLayout(),
                x_expand: true,
                y_expand: true,
            })
  • features/locations.js:1512
            this._dashContainer = new St.BoxLayout({
                name: 'dashtodockDashContainer',
                x_align: Clutter.ActorAlign.CENTER,
                y_align: Clutter.ActorAlign.CENTER,
                orientation: Clutter.Orientation.VERTICAL,
                x_expand: true,
                y_expand: true,

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

  • docking.js:1226
                this._magClipViewId = this._box.connect('notify::allocation', () => {
                    if (!this._box.clip_to_view)
                        return;
                    if (this._magClipIdleId)
                        return;
                    this._magClipIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT, (
  • features/locations.js:1590
                            item.child._draggable.connect('drag-begin', () => {
                                // Visually hide panel, but keep isOpen=true so that
                                // requiresVisibility=true remains and the dock stays visible
                                this.actor.hide();
          
  • features/locations.js:1597
                            item.child._draggable.connect('drag-end', () => {
                                // Now actually close (releases requiresVisibility)
                                this.actor.show();
                                this.close();
                            })
  • theming.js:766
    dock.connect('destroy', () => (this._destroyed = true))

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

  • docking.js:1550
                    this._dockDwellTimeoutId = GLib.timeout_add(
                        GLib.PRIORITY_DEFAULT,
                        Settings.get('show-delay') * 1000,
                        this._dockDwellTimeout.bind(this))
  • docking.js:1289
                        this._hoverCheckId = GLib.timeout_add(
                            GLib.PRIORITY_DEFAULT, 500, () => {
                                this._hoverCheckId = 0;
                                if (this._box?.get_stage())
                                    this._box.sync_hover();
                     
  • docking.js:1231
                    this._magClipIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
                        this._magClipIdleId = 0;
                        if (this._box.clip_to_view)
                            this._box.clip_to_view = false;
                        return GLib.SOURCE_REMOVE;
                    })
  • docking.js:2128
                        this._optionalScrollWorkspaceSwitchDeadTimeId = GLib.timeout_add(
                            GLib.PRIORITY_DEFAULT,
                            Settings.get('scroll-workspace-deadtime') ?? 250, () => {
                                this._optionalScrollWorkspaceSwitchDeadTimeId = 0;
          
  • docking.js:1318
            this._pointerLeaveCheckId = GLib.timeout_add(
                GLib.PRIORITY_DEFAULT, POINTER_LEAVE_CHECK_INTERVAL, () => {
                    if (this._isPointerOverDock())
                        return GLib.SOURCE_CONTINUE;
    
                    this._pointerLeaveCheckId = 0;
                    this._hoverCh
  • docking.js:1393
                    this._removeBarrierTimeoutId = GLib.timeout_add(
                        GLib.PRIORITY_DEFAULT, 100, this._removeBarrier.bind(this))
  • docking.js:1639
            this._triggerTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
                Settings.get('pressure-show-timeout') ?? 250, () => {
                // Guard against accessing destroyed state
                    if (!this._staticBox || !this._monitor) {
                        this._triggerTimeoutId = 0;
    
  • docking.js:510
                GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
                    this._regionUpdateScheduled = false;
                    if (!this._staticBox)
                        return GLib.SOURCE_REMOVE;
                    Main.layoutManager._queueUpdateRegions();
                    return GLib.SOURCE_REMOVE;
        

All Versions

Version Status
2 Unreviewed
1 Rejected

Previous Reviews on this Version

bitwiseshift auto- rejected
Auto-rejected because of new version 2 was uploaded