Review of "Yuzu" version 6.0 (1)

Details Page Preview

Floating side panel made of cards you choose: media player (MPRIS), time tracker, to-do list, system monitor, weather, calendar, favourite apps, markets, Pomodoro, network speed, quick note, clock. Enable only the modules you want in the preferences. Network: Weather uses open-meteo.com, Markets uses Yahoo Finance and Google News, only while their card is shown. Everything else is local. The optional "stay awake with the lid closed" button inhibits suspend through logind and gnome-session; this is why the extension also runs in the unlock-dialog session mode (the panel itself is removed while the screen is locked).

Extension Homepage
https://github.com/starman-tech/yuzu

No comments.

FAQ

Files

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

Shexli (experimental) warning 5

Shexli found 5 issues that may need reviewer attention.

EGO-X-004 warning

extensions should avoid synchronous file IO in shell code

Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.

File Operations

  • lib/panel.js:819
    GLib.file_get_contents(path)
  • modules/sysmon.js:17
    GLib.file_get_contents(path)
  • modules/todo.js:578
    GLib.file_get_contents(this._file)
  • modules/tracker.js:645
    GLib.file_get_contents(this._file)
  • modules/weather.js:180
    GLib.file_get_contents(this._cacheFile)

EGO-A-004 warning

extension files should not contain excessive ungated console logging

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

No excessive logging

  • modules/player.js:766
    console.error(`[yuzu] changement de sortie : ${e}`)
  • modules/player.js:796
    console.error(`[yuzu] ListNames: ${e}`)
  • modules/player.js:902
    console.error(`[yuzu] ${method}: ${e}`)
  • modules/player.js:1086
    console.error(`[yuzu] Shuffle : ${e}`)
  • modules/player.js:1303
    console.error(`[yuzu] seek: ${e}`)
  • modules/player.js:1316
    console.error(`[yuzu] LoopStatus : ${e}`)
  • modules/player.js:998
    console.warn(`[yuzu] Gvc indisponible : ${e}`)
  • modules/player.js:1056
    console.warn(`[yuzu] volume : ${e}`)
  • modules/player.js:1075
    console.warn(`[yuzu] activation de ${desktop} : ${e}`)

EGO-L-002 warning

objects created by extension should be destroyed in disable()

Objects assigned in `enable()` are missing matching `.destroy()` calls in `disable()` or its helper methods.

Destroy all objects

  • modules/calendar.js:57
            this._dateLabel = new St.Label({
                text: '',
                style: `font-size: ${px(12)}px; color: ${MODULE.textDim};`,
            })
  • modules/calendar.js:53
            this._dayLabel = new St.Label({
                text: '',
                style: `font-size: ${px(13)}px; font-weight: bold; color: ${MODULE.accent}; letter-spacing: 1px;`,
            })
  • modules/calendar.js:86
    this._grid = new St.BoxLayout({vertical: true, x_expand: true, style: `spacing: ${px(3)}px;`})
  • modules/calendar.js:70
            this._monthBtn = new St.Button({
                x_expand: true,
                can_focus: true,
                style: `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft}; `
                    + `border-radius: ${px(3)}px; padding: ${px(4)}px; `
                    + `font-size: ${px(1
  • modules/calendar.js:47
            this._timeLabel = new St.Label({
                text: '--:--',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(40)}px; font-weight: bold; letter-spacing: -1px; color: ${MODULE.text};`,
            })
  • modules/calendar.js:37
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `background-color: ${MODULE.surface}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
                    + `padding: ${px(20)}px; spacing: ${px(12)}px; color: ${MODULE.text};
  • modules/launcher.js:52
            this._countLabel = new St.Label({
                text: '0',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(11)}px; font-weight: bold; color: ${MODULE.textMuted}; `
                    + `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft}; 
  • modules/launcher.js:65
            this._emptyLabel = new St.Label({
                text: 'Aucun favori : épingle des applications dans le dock GNOME.',
                style: `font-size: ${px(12)}px; color: ${MODULE.textMuted};`,
            })
  • modules/launcher.js:62
    this._grid = new St.BoxLayout({vertical: true, x_expand: true, style: `spacing: ${px(8)}px;`})
  • modules/launcher.js:36
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `background-color: ${MODULE.surface}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
                    + `padding: ${px(20)}px; spacing: ${px(12)}px; color: ${MODULE.text};
  • modules/market.js:256
            this._arrow = new St.Label({
                text: '▾',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(10)}px; color: ${MODULE.textMuted};`,
            })
  • modules/market.js:235
            this._assetLabel = new St.Label({
                text: ASSETS[this._token].name,
                x_expand: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(14)}px; color: ${MODULE.textMuted};`,
            })
  • modules/market.js:310
    this._chart = new MarketChart(jsx(70))
  • modules/market.js:242
            this._dropdownBtn = new St.Button({
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `background-color: ${MODULE.inset}; `
                    + `border: 2px solid ${MODULE.stroke}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
         
  • modules/market.js:378
            this._expandBtn = new St.Button({
                label: 'Tout afficher',
                can_focus: true,
                style: `background: none; border: none; `
                    + `color: ${MODULE.accent}; font-size: ${px(11)}px; font-weight: bold;`,
            })
  • modules/market.js:443
            this._menu = new St.BoxLayout({
                vertical: true,
                style: `width: ${px(150)}px; `
                    + `background-color: ${MODULE.surfaceStrong}; `
                    + `border: 2px solid ${MODULE.stroke}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
            
  • modules/market.js:432
            this._menuWrap = new St.BoxLayout({
                vertical: true,
                visible: false,
                x_expand: true, y_expand: false,
                x_align: Clutter.ActorAlign.FILL, y_align: Clutter.ActorAlign.START,
            })
  • modules/market.js:401
            this._newsList = new St.BoxLayout({
                vertical: true, x_expand: true, style: `spacing: ${px(2)}px;`,
            })
  • modules/market.js:404
            this._newsScroll = new St.ScrollView({
                x_expand: true,
                height: jsx(140),
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
            })
  • modules/market.js:295
            this._priceLabel = new St.Label({
                text: '—',
                style: `font-size: ${px(34)}px; font-weight: bold; `
                    + `letter-spacing: -1px; color: ${MODULE.text};`,
            })
  • modules/market.js:267
            this._refreshBtn = new St.Button({
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft}; `
                    + `border-radius: ${px(3)}px; padding: ${px(4)}px; margin-right: ${
  • modules/market.js:334
            this._strip = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `spacing: ${px(4)}px;`,
            })
  • modules/market.js:394
            this._tickerTrack = new St.BoxLayout({
                vertical: true, x_expand: true,
                y_align: Clutter.ActorAlign.START,
            })
  • modules/market.js:388
            this._tickerViewport = new St.Widget({
                clip_to_allocation: true,
                x_expand: true,
                height: jsx(24),
                layout_manager: new Clutter.BinLayout(),
            })
  • modules/market.js:251
            this._tokenLabel = new St.Label({
                text: this._token,
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(13)}px; font-weight: bold; color: ${MODULE.text};`,
            })
  • modules/market.js:213
            this.actor = new St.Widget({
                layout_manager: new Clutter.BinLayout(),
                x_expand: true,
                y_expand: false,
                x_align: Clutter.ActorAlign.FILL,
                y_align: Clutter.ActorAlign.START,
            })
  • modules/player.js:358
            this._appButton = new St.Button({
                child: this._appIcon,
                can_focus: true,
                y_align: Clutter.ActorAlign.START,
                style: 'background: none; border: none; padding: 0;',
            })
  • modules/player.js:353
            this._appIcon = new St.Icon({
                icon_name: 'audio-x-generic-symbolic',
                icon_size: px(30),
            })
  • modules/player.js:329
            this._art = new St.Widget({
                x_expand: true, y_expand: true,
                x_align: Clutter.ActorAlign.FILL, y_align: Clutter.ActorAlign.FILL,
            })
  • modules/player.js:434
            this._artistLabel = new St.Label({
                text: 'Lance Spotify ou un autre lecteur',
                style: `font-size: ${px(15)}px; color: ${MODULE.textDim}; `
                    + `padding-top: ${px(4)}px;`,
            })
  • modules/player.js:676
            this._deviceList = new St.BoxLayout({
                vertical: true, x_expand: true,
                style: `spacing: ${px(6)}px; padding-top: ${px(10)}px;`,
            })
  • modules/player.js:649
            this._deviceOverlay = new St.BoxLayout({
                vertical: true,
                visible: false,
                x_expand: true, y_expand: true,
                x_align: Clutter.ActorAlign.FILL, y_align: Clutter.ActorAlign.FILL,
                style: `background-color: ${MODULE.surfaceStrong}; `
          
  • modules/player.js:367
            this._devicePill = new St.Button({
                can_focus: true,
                x_align: Clutter.ActorAlign.END,
                x_expand: true,
                y_align: Clutter.ActorAlign.START,
            })
  • modules/player.js:502
    this._elapsedLabel = new St.Label({text: '0:00', style: timeStyle})
  • modules/player.js:375
            this._pillLabel = new St.Label({
                text: '—',
                y_align: Clutter.ActorAlign.CENTER,
                style: `max-width: ${px(150)}px; color: ${INK}; `
                    + `font-size: ${px(14)}px; font-weight: bold;`,
            })
  • modules/player.js:442
            this._playButton = new St.Button({
                width: jsx(72),
                height: jsx(72),
                can_focus: true,
                x_align: Clutter.ActorAlign.CENTER,
                y_align: Clutter.ActorAlign.END,
            })
  • modules/player.js:476
    this._progress = new ProgressLine(jsx(16))
  • modules/player.js:503
            this._remainingLabel = new St.Label({
                text: '-0:00', x_expand: true, x_align: Clutter.ActorAlign.END, style: timeStyle,
            })
  • modules/player.js:337
            this._scrim = new St.Widget({
                x_expand: true, y_expand: true,
                x_align: Clutter.ActorAlign.FILL, y_align: Clutter.ActorAlign.FILL,
            })
  • modules/player.js:412
            this._titleClip = new ClipBox({
                clip_to_allocation: true,
                x_expand: true,
                height: jsx(36),
            })
  • modules/player.js:417
            this._titleLabel = new St.Label({
                text: 'Aucune lecture',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(26)}px; font-weight: bold; color: ${MODULE.text}; `
                    + `letter-spacing: -0.5px;`,
            })
  • modules/player.js:546
    this._volume = new VolumeBlocks(jsx, px, frac => this._setVolume(frac))
  • modules/player.js:315
            this.actor = new St.Widget({
                layout_manager: new Clutter.BinLayout(),
                width: logicalWidth * s,
                height: logicalHeight * s,
                x_expand: false,
                y_expand: false,
                x_align: Clutter.ActorAlign.CENTER,
                clip_to_allocati
  • modules/sysmon.js:102
            this._loadLabel = new St.Label({
                text: 'charge —',
                style: `font-size: ${px(11)}px; color: ${MODULE.textMuted};`,
            })
  • modules/sysmon.js:82
            this._uptimeLabel = new St.Label({
                text: '—',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(11)}px; font-weight: bold; color: ${MODULE.textMuted}; `
                    + `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft};
  • modules/sysmon.js:64
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `background-color: ${MODULE.surface}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
                    + `padding: ${px(20)}px; spacing: ${px(14)}px; `
                    + `c
  • modules/todo.js:463
            this._addBtn = new St.Button({
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
                x_align: Clutter.ActorAlign.CENTER,
            })
  • modules/todo.js:470
            this._addIcon = new St.Label({
                text: '+',
                x_align: Clutter.ActorAlign.CENTER,
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(22)}px; color: ${ACCENT_INK};`,
            })
  • modules/todo.js:424
            this._clearBtn = new St.Button({
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft}; `
                    + `border-radius: ${px(3)}px; padding: ${px(3)}px; margin-left: ${px(
  • modules/todo.js:412
            this._counterLabel = new St.Label({
                text: '0 / 0',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(12)}px; color: ${MODULE.textMuted}; `
                    + `background-color: ${MODULE.inset}; `
                    + `border: 1px solid ${MODULE.strok
  • modules/todo.js:675
            this._emptyLabel = new St.Label({
                text: 'Aucune tâche en cours',
                x_align: Clutter.ActorAlign.CENTER,
                style: `color: ${MODULE.textMuted}; font-size: ${this._px(13)}px; `
                    + `padding: ${this._px(24)}px 0;`,
            })
  • modules/todo.js:441
            this._entry = new St.Entry({
                hint_text: 'Ajouter une tâche…',
                x_expand: true,
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
            })
  • modules/todo.js:512
            this._list = new St.BoxLayout({
                vertical: true, x_expand: true, style: `spacing: ${px(10)}px;`,
            })
  • modules/todo.js:507
            this._scroll = new St.ScrollView({
                x_expand: true,
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
            })
  • modules/todo.js:390
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                y_expand: false,
                x_align: Clutter.ActorAlign.FILL,
                y_align: Clutter.ActorAlign.START,
                style: `background-color: ${MODULE.surface}; `
                    + `bord
  • modules/tracker.js:176
            this._emptyLabel = new St.Label({
                text: 'Aucune activité enregistrée pour l\'instant.',
                style: `font-size: ${px(13)}px; color: ${MODULE.textDim}; `
                    + `padding: ${px(16)}px ${px(16)}px;`,
            })
  • modules/tracker.js:169
            this._list = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `spacing: ${px(8)}px; padding-top: ${px(20)}px;`,
            })
  • modules/tracker.js:184
            this._moreButton = new St.Button({
                x_expand: true,
                can_focus: true,
                style: `background-color: transparent; border: none; `
                    + `padding: ${px(12)}px 0 ${px(4)}px 0; `
                    + `color: ${MODULE.textDim}; font-size: ${px(13)}px; `
        
  • modules/tracker.js:137
            this._pauseBtn = new St.Button({
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft}; `
                    + `border-radius: ${px(3)}px; padding: ${px(3)}px;`,
            })
  • modules/tracker.js:151
            this._totalLabel = new St.Label({
                text: '0m',
                y_align: Clutter.ActorAlign.END,
                style: `font-size: ${px(32)}px; font-weight: bold; `
                    + `letter-spacing: -1px; color: ${MODULE.text};`,
            })
  • modules/tracker.js:157
            this._weekLabel = new St.Label({
                text: '7 J · —',
                y_align: Clutter.ActorAlign.END,
                style: `font-size: ${px(11)}px; font-weight: bold; color: ${MODULE.textMuted}; `
                    + `padding-bottom: ${px(6)}px;`,
            })
  • modules/tracker.js:113
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `background-color: ${MODULE.surface}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
                    + `padding: ${px(24)}px ${px(20)}px; `
                    + `color: ${MO
  • modules/weather.js:78
            this._cityLabel = new St.Label({
                text: 'MÉTÉO',
                x_expand: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(13)}px; font-weight: bold; letter-spacing: 1px; `
                    + `color: ${MODULE.textDim};`,
            })
  • modules/weather.js:128
            this._daysRow = new St.BoxLayout({
                x_expand: true,
                style: `spacing: ${px(4)}px; padding-top: ${px(4)}px;`,
            })
  • modules/weather.js:107
            this._descLabel = new St.Label({
                text: 'Chargement…',
                style: `font-size: ${px(13)}px; color: ${MODULE.textDim};`,
            })
  • modules/weather.js:119
    this._detailRow = new St.BoxLayout({x_expand: true, style: `spacing: ${px(6)}px;`})
  • modules/weather.js:97
            this._glyph = new St.Label({
                text: '·',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(40)}px;`,
            })
  • modules/weather.js:86
            this._statusLabel = new St.Label({
                text: '',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(10)}px; color: ${MODULE.textMuted};`,
            })
  • modules/weather.js:103
            this._tempLabel = new St.Label({
                text: '—°',
                style: `font-size: ${px(34)}px; font-weight: bold; letter-spacing: -1px; color: ${MODULE.text};`,
            })
  • modules/weather.js:68
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `background-color: ${MODULE.surface}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
                    + `padding: ${px(20)}px; spacing: ${px(12)}px; color: ${MODULE.text};

EGO-L-005 warning

owned object references should be released in disable()

Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.

Destroy all objects

  • modules/calendar.js:57
            this._dateLabel = new St.Label({
                text: '',
                style: `font-size: ${px(12)}px; color: ${MODULE.textDim};`,
            })
  • modules/calendar.js:53
            this._dayLabel = new St.Label({
                text: '',
                style: `font-size: ${px(13)}px; font-weight: bold; color: ${MODULE.accent}; letter-spacing: 1px;`,
            })
  • modules/calendar.js:86
    this._grid = new St.BoxLayout({vertical: true, x_expand: true, style: `spacing: ${px(3)}px;`})
  • modules/calendar.js:70
            this._monthBtn = new St.Button({
                x_expand: true,
                can_focus: true,
                style: `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft}; `
                    + `border-radius: ${px(3)}px; padding: ${px(4)}px; `
                    + `font-size: ${px(1
  • modules/calendar.js:47
            this._timeLabel = new St.Label({
                text: '--:--',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(40)}px; font-weight: bold; letter-spacing: -1px; color: ${MODULE.text};`,
            })
  • modules/calendar.js:37
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `background-color: ${MODULE.surface}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
                    + `padding: ${px(20)}px; spacing: ${px(12)}px; color: ${MODULE.text};
  • modules/launcher.js:52
            this._countLabel = new St.Label({
                text: '0',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(11)}px; font-weight: bold; color: ${MODULE.textMuted}; `
                    + `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft}; 
  • modules/launcher.js:65
            this._emptyLabel = new St.Label({
                text: 'Aucun favori : épingle des applications dans le dock GNOME.',
                style: `font-size: ${px(12)}px; color: ${MODULE.textMuted};`,
            })
  • modules/launcher.js:62
    this._grid = new St.BoxLayout({vertical: true, x_expand: true, style: `spacing: ${px(8)}px;`})
  • modules/launcher.js:21
    this._shellSettings = new Gio.Settings({schema_id: 'org.gnome.shell'})
  • modules/launcher.js:36
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `background-color: ${MODULE.surface}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
                    + `padding: ${px(20)}px; spacing: ${px(12)}px; color: ${MODULE.text};
  • modules/market.js:256
            this._arrow = new St.Label({
                text: '▾',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(10)}px; color: ${MODULE.textMuted};`,
            })
  • modules/market.js:235
            this._assetLabel = new St.Label({
                text: ASSETS[this._token].name,
                x_expand: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(14)}px; color: ${MODULE.textMuted};`,
            })
  • modules/market.js:310
    this._chart = new MarketChart(jsx(70))
  • modules/market.js:242
            this._dropdownBtn = new St.Button({
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `background-color: ${MODULE.inset}; `
                    + `border: 2px solid ${MODULE.stroke}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
         
  • modules/market.js:378
            this._expandBtn = new St.Button({
                label: 'Tout afficher',
                can_focus: true,
                style: `background: none; border: none; `
                    + `color: ${MODULE.accent}; font-size: ${px(11)}px; font-weight: bold;`,
            })
  • modules/market.js:443
            this._menu = new St.BoxLayout({
                vertical: true,
                style: `width: ${px(150)}px; `
                    + `background-color: ${MODULE.surfaceStrong}; `
                    + `border: 2px solid ${MODULE.stroke}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
            
  • modules/market.js:432
            this._menuWrap = new St.BoxLayout({
                vertical: true,
                visible: false,
                x_expand: true, y_expand: false,
                x_align: Clutter.ActorAlign.FILL, y_align: Clutter.ActorAlign.START,
            })
  • modules/market.js:401
            this._newsList = new St.BoxLayout({
                vertical: true, x_expand: true, style: `spacing: ${px(2)}px;`,
            })
  • modules/market.js:404
            this._newsScroll = new St.ScrollView({
                x_expand: true,
                height: jsx(140),
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
            })
  • modules/market.js:295
            this._priceLabel = new St.Label({
                text: '—',
                style: `font-size: ${px(34)}px; font-weight: bold; `
                    + `letter-spacing: -1px; color: ${MODULE.text};`,
            })
  • modules/market.js:267
            this._refreshBtn = new St.Button({
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft}; `
                    + `border-radius: ${px(3)}px; padding: ${px(4)}px; margin-right: ${
  • modules/market.js:334
            this._strip = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `spacing: ${px(4)}px;`,
            })
  • modules/market.js:394
            this._tickerTrack = new St.BoxLayout({
                vertical: true, x_expand: true,
                y_align: Clutter.ActorAlign.START,
            })
  • modules/market.js:388
            this._tickerViewport = new St.Widget({
                clip_to_allocation: true,
                x_expand: true,
                height: jsx(24),
                layout_manager: new Clutter.BinLayout(),
            })
  • modules/market.js:251
            this._tokenLabel = new St.Label({
                text: this._token,
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(13)}px; font-weight: bold; color: ${MODULE.text};`,
            })
  • modules/market.js:213
            this.actor = new St.Widget({
                layout_manager: new Clutter.BinLayout(),
                x_expand: true,
                y_expand: false,
                x_align: Clutter.ActorAlign.FILL,
                y_align: Clutter.ActorAlign.START,
            })
  • modules/player.js:358
            this._appButton = new St.Button({
                child: this._appIcon,
                can_focus: true,
                y_align: Clutter.ActorAlign.START,
                style: 'background: none; border: none; padding: 0;',
            })
  • modules/player.js:353
            this._appIcon = new St.Icon({
                icon_name: 'audio-x-generic-symbolic',
                icon_size: px(30),
            })
  • modules/player.js:329
            this._art = new St.Widget({
                x_expand: true, y_expand: true,
                x_align: Clutter.ActorAlign.FILL, y_align: Clutter.ActorAlign.FILL,
            })
  • modules/player.js:434
            this._artistLabel = new St.Label({
                text: 'Lance Spotify ou un autre lecteur',
                style: `font-size: ${px(15)}px; color: ${MODULE.textDim}; `
                    + `padding-top: ${px(4)}px;`,
            })
  • modules/player.js:676
            this._deviceList = new St.BoxLayout({
                vertical: true, x_expand: true,
                style: `spacing: ${px(6)}px; padding-top: ${px(10)}px;`,
            })
  • modules/player.js:649
            this._deviceOverlay = new St.BoxLayout({
                vertical: true,
                visible: false,
                x_expand: true, y_expand: true,
                x_align: Clutter.ActorAlign.FILL, y_align: Clutter.ActorAlign.FILL,
                style: `background-color: ${MODULE.surfaceStrong}; `
          
  • modules/player.js:367
            this._devicePill = new St.Button({
                can_focus: true,
                x_align: Clutter.ActorAlign.END,
                x_expand: true,
                y_align: Clutter.ActorAlign.START,
            })
  • modules/player.js:502
    this._elapsedLabel = new St.Label({text: '0:00', style: timeStyle})
  • modules/player.js:375
            this._pillLabel = new St.Label({
                text: '—',
                y_align: Clutter.ActorAlign.CENTER,
                style: `max-width: ${px(150)}px; color: ${INK}; `
                    + `font-size: ${px(14)}px; font-weight: bold;`,
            })
  • modules/player.js:442
            this._playButton = new St.Button({
                width: jsx(72),
                height: jsx(72),
                can_focus: true,
                x_align: Clutter.ActorAlign.CENTER,
                y_align: Clutter.ActorAlign.END,
            })
  • modules/player.js:476
    this._progress = new ProgressLine(jsx(16))
  • modules/player.js:503
            this._remainingLabel = new St.Label({
                text: '-0:00', x_expand: true, x_align: Clutter.ActorAlign.END, style: timeStyle,
            })
  • modules/player.js:337
            this._scrim = new St.Widget({
                x_expand: true, y_expand: true,
                x_align: Clutter.ActorAlign.FILL, y_align: Clutter.ActorAlign.FILL,
            })
  • modules/player.js:412
            this._titleClip = new ClipBox({
                clip_to_allocation: true,
                x_expand: true,
                height: jsx(36),
            })
  • modules/player.js:417
            this._titleLabel = new St.Label({
                text: 'Aucune lecture',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(26)}px; font-weight: bold; color: ${MODULE.text}; `
                    + `letter-spacing: -0.5px;`,
            })
  • modules/player.js:546
    this._volume = new VolumeBlocks(jsx, px, frac => this._setVolume(frac))
  • modules/player.js:315
            this.actor = new St.Widget({
                layout_manager: new Clutter.BinLayout(),
                width: logicalWidth * s,
                height: logicalHeight * s,
                x_expand: false,
                y_expand: false,
                x_align: Clutter.ActorAlign.CENTER,
                clip_to_allocati
  • modules/sysmon.js:102
            this._loadLabel = new St.Label({
                text: 'charge —',
                style: `font-size: ${px(11)}px; color: ${MODULE.textMuted};`,
            })
  • modules/sysmon.js:82
            this._uptimeLabel = new St.Label({
                text: '—',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(11)}px; font-weight: bold; color: ${MODULE.textMuted}; `
                    + `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft};
  • modules/sysmon.js:64
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `background-color: ${MODULE.surface}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
                    + `padding: ${px(20)}px; spacing: ${px(14)}px; `
                    + `c
  • modules/todo.js:463
            this._addBtn = new St.Button({
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
                x_align: Clutter.ActorAlign.CENTER,
            })
  • modules/todo.js:470
            this._addIcon = new St.Label({
                text: '+',
                x_align: Clutter.ActorAlign.CENTER,
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(22)}px; color: ${ACCENT_INK};`,
            })
  • modules/todo.js:424
            this._clearBtn = new St.Button({
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft}; `
                    + `border-radius: ${px(3)}px; padding: ${px(3)}px; margin-left: ${px(
  • modules/todo.js:412
            this._counterLabel = new St.Label({
                text: '0 / 0',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(12)}px; color: ${MODULE.textMuted}; `
                    + `background-color: ${MODULE.inset}; `
                    + `border: 1px solid ${MODULE.strok
  • modules/todo.js:675
            this._emptyLabel = new St.Label({
                text: 'Aucune tâche en cours',
                x_align: Clutter.ActorAlign.CENTER,
                style: `color: ${MODULE.textMuted}; font-size: ${this._px(13)}px; `
                    + `padding: ${this._px(24)}px 0;`,
            })
  • modules/todo.js:441
            this._entry = new St.Entry({
                hint_text: 'Ajouter une tâche…',
                x_expand: true,
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
            })
  • modules/todo.js:512
            this._list = new St.BoxLayout({
                vertical: true, x_expand: true, style: `spacing: ${px(10)}px;`,
            })
  • modules/todo.js:507
            this._scroll = new St.ScrollView({
                x_expand: true,
                hscrollbar_policy: St.PolicyType.NEVER,
                vscrollbar_policy: St.PolicyType.AUTOMATIC,
            })
  • modules/todo.js:390
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                y_expand: false,
                x_align: Clutter.ActorAlign.FILL,
                y_align: Clutter.ActorAlign.START,
                style: `background-color: ${MODULE.surface}; `
                    + `bord
  • modules/tracker.js:176
            this._emptyLabel = new St.Label({
                text: 'Aucune activité enregistrée pour l\'instant.',
                style: `font-size: ${px(13)}px; color: ${MODULE.textDim}; `
                    + `padding: ${px(16)}px ${px(16)}px;`,
            })
  • modules/tracker.js:169
            this._list = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `spacing: ${px(8)}px; padding-top: ${px(20)}px;`,
            })
  • modules/tracker.js:184
            this._moreButton = new St.Button({
                x_expand: true,
                can_focus: true,
                style: `background-color: transparent; border: none; `
                    + `padding: ${px(12)}px 0 ${px(4)}px 0; `
                    + `color: ${MODULE.textDim}; font-size: ${px(13)}px; `
        
  • modules/tracker.js:137
            this._pauseBtn = new St.Button({
                can_focus: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `background-color: ${MODULE.inset}; border: 2px solid ${MODULE.strokeSoft}; `
                    + `border-radius: ${px(3)}px; padding: ${px(3)}px;`,
            })
  • modules/tracker.js:151
            this._totalLabel = new St.Label({
                text: '0m',
                y_align: Clutter.ActorAlign.END,
                style: `font-size: ${px(32)}px; font-weight: bold; `
                    + `letter-spacing: -1px; color: ${MODULE.text};`,
            })
  • modules/tracker.js:157
            this._weekLabel = new St.Label({
                text: '7 J · —',
                y_align: Clutter.ActorAlign.END,
                style: `font-size: ${px(11)}px; font-weight: bold; color: ${MODULE.textMuted}; `
                    + `padding-bottom: ${px(6)}px;`,
            })
  • modules/tracker.js:113
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `background-color: ${MODULE.surface}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
                    + `padding: ${px(24)}px ${px(20)}px; `
                    + `color: ${MO
  • modules/weather.js:78
            this._cityLabel = new St.Label({
                text: 'MÉTÉO',
                x_expand: true,
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(13)}px; font-weight: bold; letter-spacing: 1px; `
                    + `color: ${MODULE.textDim};`,
            })
  • modules/weather.js:128
            this._daysRow = new St.BoxLayout({
                x_expand: true,
                style: `spacing: ${px(4)}px; padding-top: ${px(4)}px;`,
            })
  • modules/weather.js:107
            this._descLabel = new St.Label({
                text: 'Chargement…',
                style: `font-size: ${px(13)}px; color: ${MODULE.textDim};`,
            })
  • modules/weather.js:119
    this._detailRow = new St.BoxLayout({x_expand: true, style: `spacing: ${px(6)}px;`})
  • modules/weather.js:97
            this._glyph = new St.Label({
                text: '·',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(40)}px;`,
            })
  • modules/weather.js:86
            this._statusLabel = new St.Label({
                text: '',
                y_align: Clutter.ActorAlign.CENTER,
                style: `font-size: ${px(10)}px; color: ${MODULE.textMuted};`,
            })
  • modules/weather.js:103
            this._tempLabel = new St.Label({
                text: '—°',
                style: `font-size: ${px(34)}px; font-weight: bold; letter-spacing: -1px; color: ${MODULE.text};`,
            })
  • modules/weather.js:68
            this.actor = new St.BoxLayout({
                vertical: true,
                x_expand: true,
                style: `background-color: ${MODULE.surface}; `
                    + `border-radius: ${px(MODULE.radius)}px; `
                    + `padding: ${px(20)}px; spacing: ${px(12)}px; color: ${MODULE.text};

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

  • modules/calendar.js:78
    this._monthBtn.connect('clicked', () => this._goToday())
  • modules/market.js:265
    this._dropdownBtn.connect('clicked', () => this._toggleDropdown())
  • modules/market.js:384
    this._expandBtn.connect('clicked', () => this._toggleExpanded())
  • modules/market.js:277
            this._refreshBtn.connect('clicked', () => {
                this._refreshIcon.remove_all_transitions();
                this._refreshIcon.rotation_angle_z = 0;
                this._refreshIcon.ease({rotation_angle_z: 360, duration: 600,
                    mode: Clutter.AnimationMode.EASE_OUT_EXPO});
         
  • modules/player.js:365
    this._appButton.connect('clicked', () => this._raiseApp())
  • modules/player.js:392
    this._devicePill.connect('clicked', () => this._toggleDeviceChooser())
  • modules/player.js:387
            this._devicePill.connect('notify::hover', () => this._devicePill.ease({
                scale_x: this._devicePill.hover ? 1.04 : 1,
                scale_y: this._devicePill.hover ? 1.04 : 1,
                duration: 180, mode: Clutter.AnimationMode.EASE_OUT_QUAD,
            }))
  • modules/player.js:457
    this._playButton.connect('clicked', () => this._call('PlayPause'))
  • modules/player.js:452
            this._playButton.connect('notify::hover', () => this._playButton.ease({
                scale_x: this._playButton.hover ? 1.06 : 1,
                scale_y: this._playButton.hover ? 1.06 : 1,
                duration: 180, mode: Clutter.AnimationMode.EASE_OUT_QUAD,
            }))
  • modules/player.js:478
            this._progress.connect('button-press-event', (_a, ev) => {
                this._dragging = true;
                this._seekFromEvent(ev, false);
                return Clutter.EVENT_STOP;
            })
  • modules/player.js:488
            this._progress.connect('button-release-event', (_a, ev) => {
                if (this._dragging) {
                    this._dragging = false;
                    this._seekFromEvent(ev, false);
                }
                return Clutter.EVENT_STOP;
            })
  • modules/player.js:495
            this._progress.connect('leave-event', () => {
                this._dragging = false;
                return Clutter.EVENT_PROPAGATE;
            })
  • modules/player.js:483
            this._progress.connect('motion-event', (_a, ev) => {
                if (this._dragging)
                    this._seekFromEvent(ev, true);
                return Clutter.EVENT_PROPAGATE;
            })
  • modules/player.js:432
    this._titleClip.connect('notify::width', () => this._updateMarquee())
  • modules/player.js:548
            this._volume.connect('scroll-event', (_a, ev) => {
                const dir = ev.get_scroll_direction();
                const step = dir === Clutter.ScrollDirection.UP ? 0.05
                    : dir === Clutter.ScrollDirection.DOWN ? -0.05 : 0;
                if (step !== 0)
                    this._setVo
  • modules/todo.js:298
    this._entry.clutter_text.connect('activate', () => this._commitEdit(true))
  • modules/todo.js:299
    this._entry.clutter_text.connect('key-focus-out', () => this._commitEdit(true))
  • modules/todo.js:300
            this._entry.clutter_text.connect('key-press-event', (_a, event) => {
                if (event.get_key_symbol() === Clutter.KEY_Escape) {
                    this._commitEdit(false);
                    return Clutter.EVENT_STOP;
                }
                return Clutter.EVENT_PROPAGATE;
            })
  • modules/todo.js:484
            this._addBtn.connect('button-press-event', () => {
                this._addBtn.remove_all_transitions();
                this._addBtn.ease({
                    scale_x: 0.95, scale_y: 0.95,
                    duration: 100, mode: Clutter.AnimationMode.EASE_OUT_QUAD,
                });
                return Clu
  • modules/todo.js:492
            this._addBtn.connect('button-release-event', () => {
                this._onAddHover(this._addBtn.hover);
                return Clutter.EVENT_PROPAGATE;
            })
  • modules/todo.js:480
    this._addBtn.connect('clicked', () => this._addTask())
  • modules/todo.js:481
    this._addBtn.connect('notify::hover', () => this._onAddHover(this._addBtn.hover))
  • modules/todo.js:432
    this._clearBtn.connect('clicked', () => this._clearCompleted())
  • modules/todo.js:449
    this._entry.clutter_text.connect('activate', () => this._addTask())
  • modules/todo.js:454
            this._entry.connect('button-press-event', () => {
                this._panel?.enterEditMode?.(this._entry.clutter_text);
                return Clutter.EVENT_PROPAGATE;
            })
  • modules/todo.js:450
    this._entry.clutter_text.connect('key-focus-in', () => this._updateEntryStyle())
  • modules/todo.js:451
    this._entry.clutter_text.connect('key-focus-out', () => this._updateEntryStyle())
  • modules/tracker.js:192
            this._moreButton.connect('clicked', () => {
                this._expanded = !this._expanded;
                this._refresh();
            })
  • modules/tracker.js:146
    this._pauseBtn.connect('clicked', () => this._togglePause())

All Versions

Version Status
6.0 (1) Unreviewed