Review of "Kiwi (is not Apple)" version 1.9.0 (49)

Details Page Preview

Kiwi is free open source project that brings macOS-inspired features for GNOME. *Note. This extension is tested with vanilla GNOME Adwaita theme. Be aware that other extensions may cause compatibility issues. Features: - macOS-style window control buttons with GTK theming - Firefox and Thunderbird window control theming - Move fullscreen windows to new workspaces automatically - Make windows transparent while moving - Display battery percentage when below 20% - Move calendar to the right side and customize notifications - Quick settings media and notifications tweaks - Show current window title in the top panel - Simple Window tiling options - Show panel on hover in fullscreen mode - Hide minimized windows in overview - Hide the Activities button - Skip overview on login (go directly to desktop) - Set panel transparency or blur based on window position - Dash-to-dock blur effect - Dash-to-dock minimized windows previews - Dash-to-dock fan style expanding recent Downloads folder - Overview wallpaper blur - Keyboard indicator styling - Focus on newly launched windows (removes window-ready notifications) - Show Caps Lock/Num Lock indicators in the top panel - Add username display to the quick settings menu - Multilingual support and more... This extension uses a modular architecture for stability and customization. Some advanced features require native libraries (available in the advanced/ folder). Disclaimer: This extension is unofficial and not affiliated with Apple in any way.

Extension Homepage
https://github.com/kem-a/kiwi-kemma

No comments.

Diff Against

Files

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

Shexli (experimental) error 2 warning 1

Shexli found 3 issues that may need reviewer attention.

EGO-A-004 warning

extension files should not contain excessive ungated console logging

File contains 7 ungated console.log/warn/error calls (threshold: 5).

No excessive logging

  • apps/gtkThemeManager.js:83
    console.error(`[Kiwi] Error updating GTK CSS files: ${error}`)
  • apps/gtkThemeManager.js:114
    console.error(`[Kiwi] Error creating user GTK config: ${error}`)
  • apps/gtkThemeManager.js:142
    console.error(`[Kiwi] Error processing GTK file ${filePath}: ${error}`)
  • apps/gtkThemeManager.js:177
    console.error(`[Kiwi] Error removing user GTK config: ${error}`)
  • apps/gtkThemeManager.js:187
    console.error(`[Kiwi] Error in settings changed handler: ${error}`)
  • apps/gtkThemeManager.js:194
    console.error(`[Kiwi] Error in initial update: ${error}`)
  • apps/gtkThemeManager.js:208
    console.error(`[Kiwi] Error in disable cleanup: ${error}`)

EGO-C49-003 error

extensions targeting GNOME 49 must not call maximize or unmaximize with Meta.MaximizeFlags

This extension explicitly targets GNOME Shell 49 but still passes `Meta.MaximizeFlags` to `maximize()` or `unmaximize()`.

Meta.Window

  • apps/windowControls.js:145
    window.maximize(Meta.MaximizeFlags.BOTH)
  • apps/windowControls.js:137
    window.unmaximize(Meta.MaximizeFlags.BOTH)

EGO-C49-004 error

extensions targeting GNOME 49 must not call Meta.Window.get_maximized

This extension explicitly targets GNOME Shell 49 but still calls removed `Meta.Window.get_maximized()`.

Meta.Window

  • apps/windowControls.js:304
    win.get_maximized()
  • apps/windowControls.js:365
    focusWindow.get_maximized()

All Versions

Version Status
2.1.0 (55) Active
2.0.1 (54) Active
2.0.0 (53) Active
2.0.0 (52) Rejected
2.0.0 (51) Rejected
1.9.9 (50) Active
1.9.0 (49) Active
1.8.0 (48) Active
1.8.0 (47) Rejected
1.7.1 (46) Active
1.7.0 (45) Active
1.6.3 (44) Active
1.6.2 (43) Active
1.6.1 (42) Rejected
1.5.5 (41) Active
1.5.5 (40) Rejected
1.5.5 (39) Rejected
1.5.4 (38) Inactive
1.5.4 (37) Rejected
1.5.3 (36) Active
1.5.3 (35) Rejected
1.5.2 (34) Active
1.5.1 (33) Active
1.5.0 (32) Inactive
1.4.1 (31) Active
1.4.1 (30) Rejected
1.4.0 (29) Active
1.4.0 (28) Rejected
1.3.1 (27) Active
1.3.0 (26) Active
1.2.1 (25) Active
1.2.1 (24) Rejected
1.2.0 (23) Active
1.1.0 (22) Active
1.0.2 (21) Inactive
1.0.1 (20) Inactive
1.0.0 (19) Inactive
18 Inactive
17 Inactive
16 Rejected
15 Inactive
0.9.6 beta (14) Rejected
13 Inactive
12 Inactive
11 Inactive
10 Inactive
9 Inactive
8 Inactive
7 Rejected
6 Inactive
5 Rejected
4 Inactive
3 Rejected
2 Inactive
1 Rejected

Previous Reviews on this Version

JustPerfection rejected
I cannot trace back the timeout cleanup on disable: - line 108 `apps/downloadsStack.js` - line 79 `apps/dockUtils.js`
Arnis K posted a review
Both are cleaned, just not greppably. downloadsStack.js:108 ID lands in sources.refresh. disable() at downloadsStack.js:893 sweeps every key of the sources table. dockUtils.js:79 watchDocks writes into the sources table the caller passes in. Both callers declare dockSearch and sweep the whole table on disable. If you wish I can have watchDocks return a teardown function instead of mutating a table it doesn't own, makes cleanup traceable.
JustPerfection active
Thanks! No need to change.