From a6f3aa4bb6686b6c51f447b300535388da243a1e Mon Sep 17 00:00:00 2001 From: Matheus Medeiros Date: Sat, 8 Nov 2025 18:30:54 -0300 Subject: [PATCH 1/2] fix: add guard checks when destroing window. --- src/manager/event_manager.ts | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/manager/event_manager.ts b/src/manager/event_manager.ts index b0be43bd..531e7564 100644 --- a/src/manager/event_manager.ts +++ b/src/manager/event_manager.ts @@ -157,18 +157,24 @@ function applyEffectTo(actor: RoundedWindowActor) { // Get notified about fullscreen explicitly, since a window must not change in // size to go fullscreen - connect(actor.metaWindow, 'notify::fullscreen', () => - handlers.onSizeChanged(actor), - ); + connect(actor.metaWindow, 'notify::fullscreen', () => { + if (actor.metaWindow) { + handlers.onSizeChanged(actor); + } + }); // Window focus changed. - connect(actor.metaWindow, 'notify::appears-focused', () => - handlers.onFocusChanged(actor), - ); + connect(actor.metaWindow, 'notify::appears-focused', () => { + if (actor.metaWindow) { + handlers.onFocusChanged(actor); + } + }); // Workspace or monitor of the window changed. connect(actor.metaWindow, 'workspace-changed', () => { - handlers.onFocusChanged(actor); + if (actor.metaWindow) { + handlers.onFocusChanged(actor); + } }); handlers.onAddEffect(actor); From d5c568a3ba325a4c393781781318cd5a60ef3a67 Mon Sep 17 00:00:00 2001 From: Matheus Medeiros Date: Sat, 8 Nov 2025 18:41:52 -0300 Subject: [PATCH 2/2] fix: added guards to size-changed and size signals. --- src/manager/event_manager.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/manager/event_manager.ts b/src/manager/event_manager.ts index 531e7564..a24eb19c 100644 --- a/src/manager/event_manager.ts +++ b/src/manager/event_manager.ts @@ -150,9 +150,15 @@ function applyEffectTo(actor: RoundedWindowActor) { // that? I have no idea. But without that, weird bugs can happen. For // example, when using Dash to Dock, all opened windows will be invisible // *unless they are pinned in the dock*. So yeah, GNOME is magic. - connect(actor, 'notify::size', () => handlers.onSizeChanged(actor)); + connect(actor, 'notify::size', () => { + if (actor.metaWindow) { + handlers.onSizeChanged(actor); + } + }); connect(texture, 'size-changed', () => { - handlers.onSizeChanged(actor); + if (actor.metaWindow) { + handlers.onSizeChanged(actor); + } }); // Get notified about fullscreen explicitly, since a window must not change in