Advanced panel/popup transparency, blur effects, and wallpaper color extraction for GNOME Shell 45-47. Non-destructive theme overlays with live updates. Mostly designed for ZorinOS 18 (taskbar and themes integration) but should work with other gnome based systems. Gnome 43-44 (ZOS 17.3) version also available.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
Is this a fork of the ZorinOS extension? or is it official? What has been changed here?
v 1.5.4 should work with gnome 43.9 (zos17.3) v 2.5.3 should work with gnome 45+ (zos18) Tested only on ZorinOS 17.3 and 18, not on other systems. It is not fork, made it from scratch, should be official.. Changes are in gjs syntax, and Zorin has evolved between versions so zos18 has different taskbar and css styles and g43 vs g46 differences (system tray class).. It should work even without zorin (extensions) installed (code is checking existance and activation of zorin taskbar).. Didn't know if I must make different names for "same" functionality extension..
What's the reason for using ZorinOS name then? Basically, ZorinOS is a trademark and you shouldn't use their name here. Also, is the older shell version support tested? Asking that because if you want to send a new extension, it is always a good idea to only support the new one for maintainability.
Because of integration with ZorinOS taskbar (floating mode / border radius / etc..) and styles (zorin dark themes are little specific with colored overlays). I can remove "Zorin" from the name and put it in description.. It is mainly designed to support (for now) Zorin and GTK Fluent themes, and since I use Zorin, I made it for Zorin, but it should work with other gnome based systems.. It is just a "dynamic theme overlay".. Both versions are tested and I use them both (VM and laptop), and lot of people still use Zorin 17.3.. How do people have some of their extensions for mutually incompatible shells?
Ok. Please give me some time. I'll try to finish the 45+ package review tomorrow since it is a very large extension. Once the issues for 45+ is fixed, you can fix the older 43-44 package and send it again. And yes, it's a good idea to remove it from name and put it in the description.
Ok, have updated extension page.. Tnx!
1. Please remove `gschemas.compiled`. Not needed for 45+ packages. 2. Please make the default class you are exporting as small as possible (both `extension.js` and `prefs.js`). Large class is not easy to review for cleanups. 3. Monitoring whether the extension is enabled is a bad practice (line 217-218, 371 `extension.js`). 4. No need to use any parameters for `this.getSettings()` when you specified it in the `metadata.json`. 5. Remove the condition (line 221 `extension.js`). Your extension shouldn't have that after disable. 6. Also null out in disable: ```js this._settings = null; this._logger = null; ``` [EGO Review Guidelines: Destroy](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#destroy-all-objects) 7. Avoid unnecessary try and catch wrapping (for example, line 749, 909, 920, ... `extension.js`). Unnecessary wrapping just makes the code longer and less readable. 8. Extensions cannot use `run_dispose()`: - line 887 `extension.js` - line 1444 `prefs.js` - line 226, 232 `ZorinStyler.js` - line 293, 308, 320, 363, 455, 1256 `colorPalette.js` - line 3272, 3283 `overlayThemeManager.js` - [EGO Review Guidelines: run_dispose](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#extensions-should-not-force-dispose-a-gobject) 9. Use `console.*` instead of `log()`. **Logs should be only available on debug mode**. For debug use `console.debug()` instead of `console.log()`: [Port Guide 45: Logging](https://gjs.guide/extensions/upgrading/gnome-shell-45.html#logging) 10. What's the reason for creating a desktop entry (line 2447 `overlayThemeManager.js`)? 11. Please use aysnc for reading file content since that can freeze the shell process (line 3175, 3302 `overlayThemeManager.js`): [Gio.File.load_contents_async](https://gjs-docs.gnome.org/gio20~2.0/gio.file#method-load_contents_async) 12. You already have logger instance for 45+. You may want to use that: [Port Guide 43: Logger](https://gjs.guide/extensions/upgrading/gnome-shell-48.html#custom-logger) 13. Where do you remove the files you are created on disable? The theme files you are creating should be removed only on user session not on lock / unlock. 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
Huh, a long list.. I will need some time to fix this, so can you just clarify few points please: -> 8. Extensions cannot use `run_dispose()`: run_dispose() for GdkPixbuf - Is this an exception? - Extension loads wallpaper images for color extraction - Each GdkPixbuf = 10-50 MB raster data (not just file handle) - Stress test: 24 images × 20MB = ~480MB accumulated before GC In current code i do: const palette = this._analyzePixbuf(pixbuf, preferLight); pixbuf.run_dispose(); // Free 10-50 MB immediately pixbuf = null; -Is run_dispose() acceptable here for large image buffers, or remove and rely on GC? -> 10. What's the reason for creating a desktop entry (line 2447 `overlayThemeManager.js`)? Enables users to: - Manually select theme in GNOME Tweaks / Zorin Appearance - Mix GTK theme (CSSGnomme) + different Shell theme (e.g., Fluent) - Keep theme after disabling extension - Overlaying is done by creating "custom theme" and simlinking assets of "selected theme" and original css with custom modifications -> 12. You already have logger instance for 45+. You may want to use that This custom logger uses child loggers who provide module identification etc. Can I keep custom Logger with console.debug/log/warn/error? -> 13. Where do you remove the files you are created on disable? The theme files you are creating should be removed only on user session not on lock / unlock. I didn't quite understand, this, but extension creates "theme overlay" and sets it, it is by "theme manager" who do the rest. We have only set the theme and created custom css in extension's theme folders.. I could make an option to remove the theme files on disable if user wants.. This extension is basically a theme generator.. Tnx for your time!
- **8** Simply nulling it out won't do the job? - **12** Sure, you can keep that but make it only available on debug mode since we don't want excessive logs. - **13** As mentioned in [the review guidelines](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#general-guidelines): > Use disable() to cleanup anything done in enable() When a user uninstall your extension, those files that you've generated will be still there. Disabled can happen in *user mode* and *lock/unlock*. User mode means the user is disabled or uninstalled the extension manually. Otherwise it means the extension got disabled automatically by GNOME Shell lock/unlock session. So, in disable: ```js let session = Main.sessionMode; if (session.currentMode === 'user' || session.parentMode === 'user') { // remove files here } ``` You can read about [Session Modes docs](https://gjs.guide/extensions/topics/session-modes.html).