Review of "Status Tray" version 1.0 (1)

Details Page Preview

Automatic system tray for applications using the StatusNotifierItem/DBusMenu protocol. Displays tray icons for apps like Discord, Slack, Dropbox, Nextcloud, Steam, and more. Supports symbolic (monochrome) and original icon modes, per-app icon customization, drag-and-drop reordering, and individual icon effect tuning. No external daemon required.

Extension Homepage
https://github.com/keithvassallomt/status-tray

No comments.

FAQ

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

All Versions

Version Status
1.4 (7) Unreviewed
1.3 (6) Active
1.2 (5) Active
1.1 (4) Active
1.1 (3) Rejected
1.0 (2) Active
1.0 (1) Rejected

Previous Reviews on this Version

JustPerfection rejected
1. Please remove `schemas/gschemas.compiled`. Not needed for 45+ packages. 2. Remove `assets/status-tray-dark.png`: [EGO Review Guidelines: unnecessary files](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#don-t-include-unnecessary-files) 3. Avoid using `log()` (line 27 `prefs.js`): [Port Guide 45: Logging](https://gjs.guide/extensions/upgrading/gnome-shell-45.html#logging) 4. Don't create instances of objects in global scope and leave it there after disable (line 125, 135 `extension.js`): [EGO Review Guidelines: Destroy](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#destroy-all-objects) 5. `signal_unsubscribe()` and `unexport()` don't throw. So, don't wrap them with try-catch. 6. Instead of using `connect()` and store the signal id, use `connectObject()` and `disconnectObject()` (line 1707-1740 `extension.js`). That's much easier to cleanup. 7. Avoid holding multiple timeout ids in one property (line 1810, 1873 `extension.js`). Use a helper function, if they are doing the same thing. 8. You need to clean up all properties in window close request (the default class you are exporting in `prefs.js`). You can also add `donations` to the `metadata.json`, so people can donate to you if they want: [Extension Anatomy: donations](https://gjs.guide/extensions/overview/anatomy.html#donations) If you need any help with your extension you can ask us on: - [GNOME Extensions Matrix Channel](https://matrix.to/#/#extensions:gnome.org) - IRC Bridge: irc://irc.gimpnet.org/shell-extensions
Keith Vassallo posted a review
1. Please remove `schemas/gschemas.compiled`. Not needed for 45+ packages. **Fixed:** Removed `src/schemas/gschemas.compiled`. 2. Remove `assets/status-tray-dark.png`: [EGO Review Guidelines: unnecessary files](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#don-t-include-unnecessary-files) **Fixed:** Removed `src/assets/status-tray-dark.png` (351KB) and the empty `assets/` folder. Updated `prefs.js` to use the system icon `preferences-system-symbolic` instead of loading a custom image file. 3. Avoid using `log()` (line 27 `prefs.js`): [Port Guide 45: Logging](https://gjs.guide/extensions/upgrading/gnome-shell-45.html#logging) **Fixed:** Removed deprecated `log()` call from `prefs.js` debug function. Now uses only `console.log()`. 4. Don't create instances of objects in global scope and leave it there after disable (line 125, 135 `extension.js`): [EGO Review Guidelines: Destroy](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#destroy-all-objects) **Fixed:** Added cleanup in `disable()` method to nullify module-level cached objects: - `_sniInterfaceInfo` (D-Bus interface info cache) - `_interfaceSettings` (Gio.Settings for dark mode detection) These are now set to `null` when the extension is disabled, ensuring proper cleanup. Also added `_draggedRow = null` cleanup in `prefs.js` `_cleanup()` method for consistency. 5. `signal_unsubscribe()` and `unexport()` don't throw. So, don't wrap them with try-catch. **Fixed:** Removed unnecessary try-catch wrappers from 4 locations: - `prefs.js:1954-1955` - `signal_unsubscribe` in `_cleanup()` - `extension.js:1322-1323` - `signal_unsubscribe` in `TrayItem.destroy()` - `extension.js:1662-1663` - `signal_unsubscribe` in `StatusNotifierWatcher.destroy()` - `extension.js:1671` - `unexport` in `StatusNotifierWatcher.destroy()` 6. Instead of using `connect()` and store the signal id, use `connectObject()` and `disconnectObject()` (line 1707-1740 `extension.js`). That's much easier to cleanup. **Fixed:** Replaced manual signal ID tracking with `connectObject()`/`disconnectObject()` pattern: - Removed `_settingsConnections` array - Changed 5 individual `connect()` calls to single `connectObject()` call (lines 1693-1715) - Replaced manual disconnect loop with `this._settings.disconnectObject(this)` (line 1735) 7. Avoid holding multiple timeout ids in one property (line 1810, 1873 `extension.js`). Use a helper function, if they are doing the same thing. **Fixed:** Created `_scheduleReorder()` helper function (lines 1867-1878) that: - Cancels any existing reorder timeout - Schedules a new 100ms debounced timeout to call `_reorderItems()` Replaced duplicate inline timeout code at two locations: - `_onItemRegistered()` callback (line 1782) - `_refreshItems()` end (line 1837-1838) 8. You need to clean up all properties in window close request (the default class you are exporting in `prefs.js`). **Fixed:** Updated `_cleanup()` method (lines 1950-1968) to nullify all instance properties: - `_signalIds` - `_appRows` - `_appsGroup` - `_infoRow` - `_bus` - `_settings` - `_window` All references are now released when the preferences window closes. 9. You can also add `donations` to the `metadata.json`, so people can donate to you if they want: [Extension Anatomy: donations](https://gjs.guide/extensions/overview/anatomy.html#donations) **Fixed:** Added `donations` field to `metadata.json` with GitHub Sponsors link: ```json "donations": { "github": "keithvassallomt" } ```