Review of "FUHGAWZ Global Menu" version 2

Details Page Preview

FUHGAWZ Global Menu brings application menubars directly into the GNOME Shell top bar. Powered by a 6-tier fallback engine, it extracts and renders menus across Wayland, GTK 4 / Libadwaita apps, GTK 3, Qt, and browser windows. Also includes a system logo menu with recent items, an application force quit tool, and a user switcher.

Extension Homepage
https://github.com/katon26/fuhgawz-global-menu

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 2 manual_review 1

Shexli found 5 issues that may need reviewer attention.

EGO-A-005 manual_review

extensions should not access the clipboard directly

Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.

Review Guidelines

  • extension.js:612
    St.Clipboard.get_default()

EGO-A-004 warning

extension files should not contain excessive ungated console logging

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

No excessive logging

  • extension.js:498
    console.warn(`FUHGlobe: Failed to minimize window: ${e}`)
  • extension.js:702
    console.warn(`FUHGlobe: Failed to navigate browser URL via clipboard: ${e}`)
  • extension.js:845
    console.warn(`FUHGlobe: Could not show modal About dialog: ${e}`)
  • extension.js:1395
    console.warn(`FUHGlobe: Error expanding dynamic items: ${e}`)
  • extension.js:1420
    console.warn(`FUHGlobe: Error expanding dynamic items: ${e}`)
  • extension.js:1441
    console.warn(`FUHGlobe: Error expanding dynamic items: ${e}`)
  • extension.js:1476
    console.warn(`FUHGlobe: Failed to minimize window: ${e}`)
  • extension.js:278
    console.error(`FUHGlobe: Failed to acquire bus name ${name}`)
  • extension.js:439
    console.error(`FUHGlobe: Failed to launch gnome-control-center: ${e}`)
  • extension.js:455
    console.error(`FUHGlobe: Failed to launch settings: ${e}`)

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

  • extension.js:569
    this._window.maximize(Meta.MaximizeFlags.BOTH)
  • extension.js:564
    this._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

  • extension.js:551
    this._window.get_maximized()

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.

Disconnect all signals

  • extension.js:1087
                        subItem.menu.connect('open-state-changed', (_menu, isOpen) => {
                            if (isOpen && !subBuilt) {
                                subBuilt = true;
                                this._buildSubmenu(subItem.menu, item.children, proxy);
                            }
              
  • extension.js:1170
                this.menu.connect('open-state-changed', (_menu, isOpen) => {
                    if (isOpen) {
                        this._ensureItemsBuilt();
                    }
                })
  • extension.js:1323
            this.menu.connect('open-state-changed', (_menu, isOpen) => {
                if (!isOpen) return;
    
                if (!this._itemsBuilt) {
                    this._itemsBuilt = true;
                    this._buildCurrentItems();
                } else {
                    const isDynamic = this._profile && (
      
  • extension.js:1427
                        subMenu.menu.connect('open-state-changed', (_menu, isOpen) => {
                            if (isOpen && !subBuilt) {
                                subBuilt = true;
                                let actualSubItems = subItems;
                                if (isDynamic && typeof expandDyn
  • extension.js:1542
                this.menu.connect('open-state-changed', (_menu, isOpen) => {
                    if (isOpen) {
                        this._ensureItemsBuilt();
                    }
                })
  • extension.js:1605
                        subItem.menu.connect('open-state-changed', (_menu, isOpen) => {
                            if (isOpen && !subBuilt) {
                                subBuilt = true;
                                this._buildSubmenu(subItem.menu, submenu, actionDispatcher);
                            }
         

All Versions

Version Status
2 Unreviewed
1 Rejected