Lag-free taskbar that respects the GNOME Shell style. Light and reliable extension. Multi-monitor support. Hover task to raise its window. Right click to show app menu. Middle click to open new app window. Display Chromium web apps real icons. Optional window grouping by app. Light style. Workspaces bar. Recent and favorites apps. Power profile indicator (until GNOME 49). User id indicator. Settings UI to turn on/off these features and many more. Unused features are not initialized nor loaded. Select focused window only in prefs to look like the old app menu or Window Title is Back. You can toggle the overview in each monitor using Bottom Overview extension.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
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:59
this._clickGesture.connect('recognize', () => this._toggleAllWindows())
extension.js:419
this._clickGesture.connect('recognize', gesture => this._onClick(gesture))
| Version | Status |
|---|---|
| 72 | Active |
| 71 | Active |
| 70 | Active |
| 69 | Active |
| 68 | Active |
| 67 | Active |
| 66 | Active |
| 65 | Rejected |
| 64 | Active |
| 63 | Active |
| 62 | Active |
| 61 | Active |
| 60 | Active |
| 59 | Active |
| 58 | Rejected |
| 57 | Active |
| 56 | Active |
| 55 | Active |
| 54 | Active |
| 53 | Active |
| 52 | Active |
| 51 | Active |
| 50 | Active |
| 49 | Rejected |
| 48 | Rejected |
| 47 | Active |
| 46 | Rejected |
| 45 | Active |
| 44 | Active |
| 43 | Active |
| 42 | Active |
| 41 | Rejected |
| 40 | Rejected |
| 39 | Rejected |
| 38 | Active |
| 37 | Active |
| 36 | Active |
| 35 | Active |
| 34 | Active |
| 33 | Active |
| 32 | Active |
| 31 | Active |
| 30 | Active |
| 29 | Active |
| 28 | Active |
| 27 | Active |
| 26 | Active |
| 25 | Active |
| 24 | Active |
| 23 | Active |
| 22 | Rejected |
| 21 | Rejected |
| 20 | Active |
| 19 | Active |
| 18 | Active |
| 17 | Active |
| 16 | Active |
| 15 | Active |
| 14 | Active |
| 13 | Rejected |
| 12 | Active |
| 11 | Active |
| 10 | Active |
| 9 | Active |
| 8 | Active |
| 7 | Active |
| 6 | Active |
| 5 | Active |
| 4 | Active |
| 3 | Active |
| 2 | Active |
| 1 | Active |
Hi, About the 1 warning: I think this._clickGesture is destroyed with the ShowDesktop button?
Not *destroyed*, as it's not an actor itself. Now I would need to do some proper testing to confirm, but this is what I expect to happen: - the ShowDesktop button is destroyed - as a result, the actor's reference (from "add_action()") is released - the _showDesktop property is set to null, which marks it for garbage collection - when gc happens, the button's _clickGesture reference is collected as well If that's wrong and the "this._clickGesture" property needs to be set to null for GC, then that's a gnome-shell bug (given that you are effectively overriding the property from the parent). In any case the most important bit is that destroying the actor will remove the gesture, so it won't emit any more events.
Thanks for the review. Ok, that's what I had in mind but these tricks are somewhat complicated (for me!). Is there a problem in the following code? Since I create a new task button when a new window is created, but without a reference (the button self-destroys if its window is closed). So I don't mark this button as null on destroy and I don't know if it's eligible to GC. _makeTaskButton(window) { if (!window || window.skip_taskbar || window.window_type === Meta.WindowType.MODAL_DIALOG) return; new TaskButton(this._settings, this._globalRecentApps, window); // <<<<----------------------------------------------- here if (this._showRecentAppsMenu) { GLib.idle_add_once(GLib.PRIORITY_DEFAULT, () => { this._recentAppsMenuButton?._updateRecentApps(); }); } }
(this task button has the same clickGesture creation as showDesktop button.)