Bug: Changing a setting while Forge is disabled (e.g. screen locked) throws errors; old handlers keep running

オープン
#581 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

@mattchristenson がすでに取り組んでいます。

2026年9月30日 から。

  • #582 @mattchristenson による — オープン

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
35/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
停滞
技術スタック
javascript
領域
desktop

調査の方向性

Read lib/extension/window.js at _bindSignals() (line 300) and the disable path that sets this.settings = null. Disconnect the settings handlers on disable and avoid duplicate connections on enable. Confirm with scenarios/29_settings_after_disable.py: no JS errors and each setting change handled once.

索引モデルが issue の本文から書いたものです。

説明

Problem. Forge connects "changed" handlers to its settings, the window manager's (_bindSignals()) and the quick-settings indicator's, and never disconnects them. When Forge is disabled, the extension drops its settings object (this.settings = null), but the handlers stay connected. That happens on the lock screen too (_onSessionModeChanged()). Every later change of a Forge setting runs them, and they throw:

JS ERROR: TypeError: can't access property "get_boolean", this.ext.settings is null
renderTree@.../lib/extension/window.js:1167
_bindSignals/<@.../lib/extension/window.js:300

The same errors show in the journal log attached to #469. After Forge is enabled again, the old handlers keep running next to the new ones.

Desired outcome. Disabling Forge disconnects its settings handlers. Changing a setting while Forge is disabled does nothing, and after it is enabled again each change is handled once.

Acceptance criteria.

  • Disable Forge, then change a Forge setting (for example from the preferences, or with gsettings): no JS errors.
  • Enable it again: Forge works, and changing a setting raises no errors.

Steps to reproduce.

  1. With Forge enabled, run journalctl --user -f -o cat /usr/bin/gnome-shell in a terminal.
  2. Disable Forge (gnome-extensions disable [email protected], or lock the screen).
  3. Change a Forge setting, for example gsettings --schemadir ~/.local/share/gnome-shell/extensions/[email protected]/schemas set org.gnome.shell.extensions.forge focus-border-toggle false (from a second terminal or over ssh when the screen is locked).
  4. The journal shows JS ERROR: TypeError: can't access property "get_boolean", this.ext.settings is null for each change.

Automated reproduction: scenarios/29_settings_after_disable.py (in a nested GNOME Shell sandbox; it never touches your session). On main:

  FAIL  29.1 settings changed while Forge is disabled: new Forge errors 4 (expected 0)
  PASS  29.2 enabled again: a new window tiled: True; new Forge errors 0 (expected 0)
主要言語
JavaScript
スター
1.3k
フォーク
112
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

forge-ext/forge のほかの issue

forge-ext/forge の issue をすべて見る

似ている issue

JavaScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。