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
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
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()`.
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.
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`.
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.
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.
prefs.js:12
this._configFile = GLib.build_filenamev([this.path, 'config.json'])
| Version | Status |
|---|---|
| 3 | Unreviewed |
| 2 | Rejected |
| 1 | Rejected |
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)