Review of "Apple Squircle Clock" version 1

Details Page Preview

An elegant, customizable floating digital desktop clock widget for GNOME Shell, modeled meticulously after premium iOS and macOS geometric squircle profiles. ✨ Features: • Desktop Layer Widget: Stays beautifully pinned directly to your wallpaper background, sitting cleanly underneath your active application windows. • Interactive Drag-and-Drop: Turn ON Drag Mode in the preferences panel to slide your clock anywhere on your screen layouts, then turn it OFF to securely lock its coordinates. • Fluid Color Themes: Instantly toggle between a crisp Light Mode profile or a slate Dark Mode background to seamlessly match your active desktop wallpaper style. • Multi-Country Timezones: Select alternative global region timelines right from the dropdown setup row. • Dynamic Sizing: Change your clock layout size smoothly between Small, Medium, and Large profiles. • Native App Launcher: Double-click anywhere on the clock widget to automatically launch your system's default GNOME Clocks application. 📬 Feedback & Support: If you have any feature requests, styling ideas, or encounter display bugs, feel free to reach out directly: • Email Desk: sanjay150724@gmail.com • Project Repository: https://github.com/SANJAY-N0/Squircle-clock

Extension Homepage
https://github.com/SANJAY-N0/Squircle-clock

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 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:161
    GLib.file_get_contents(this._configFile)
  • extension.js:196
    GLib.file_get_contents(this._configFile)

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:81
    this._drawingArea = new St.DrawingArea({ x_expand: true, y_expand: true })
  • extension.js:85
            this._timeLabel = new St.Label({
                x_align: Clutter.ActorAlign.CENTER,
                y_align: Clutter.ActorAlign.CENTER,
                x_expand: true,
                y_expand: true
            })

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:81
    this._drawingArea = new St.DrawingArea({ x_expand: true, y_expand: true })
  • extension.js:85
            this._timeLabel = new St.Label({
                x_align: Clutter.ActorAlign.CENTER,
                y_align: Clutter.ActorAlign.CENTER,
                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

  • extension.js:96
            this._container.connect('button-press-event', (actor, event) => {
                if (event.get_click_count() === 2) {
                    try {
                        let appInfo = Gio.AppInfo.create_from_commandline('gnome-clocks', null, Gio.AppInfoCreateFlags.NONE);
                        if (appInfo) 
  • extension.js:121
            this._container.connect('button-release-event', () => {
                if (!isDragging) return Clutter.EVENT_PROPAGATE;
                isDragging = false;
                let [ax, ay] = this._container.get_position();
                this._writePositionToConfig(ax, ay);
                return Clutter.EVENT_ST
  • extension.js:114
            this._container.connect('motion-event', (actor, event) => {
                if (!isDragging || !this._dragMode) return Clutter.EVENT_PROPAGATE;
                let [x, y] = event.get_coords();
                this._container.set_position(x - offsetOffsetX, y - offsetOffsetY);
                return Clutter.
  • extension.js:82
    this._drawingArea.connect('repaint', (area) => this._onDraw(area.get_context()))

EGO-L-006 warning

preferences classes should not retain window-scoped objects on instance fields without close-request cleanup

Preferences code stores window-scoped objects on the exported prefs class without `close-request` cleanup.

Destroy all objects

  • prefs.js:12
    this._configFile = GLib.build_filenamev([this.path, 'config.json'])

All Versions

Version Status
3 Unreviewed
2 Rejected
1 Rejected

Previous Reviews on this Version

JustPerfection waiting for author
Is this code generated by AI? If so, we have a rule for that: [EGO Review Guidelines: AI](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#extensions-must-not-be-ai-generated)
addams auto- rejected
Auto-rejected because of new version 2 was uploaded