From 9aea35200db0c0288ac5b3c6ae84a303fe609422 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Tue, 24 Mar 2026 12:38:32 +0100 Subject: [PATCH] Wrap kwin helper signals in a safe handler --- tools/gsr-kwin-helper/gsrkwinhelper.js | 34 +++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/tools/gsr-kwin-helper/gsrkwinhelper.js b/tools/gsr-kwin-helper/gsrkwinhelper.js index 76dc300..ab0901e 100644 --- a/tools/gsr-kwin-helper/gsrkwinhelper.js +++ b/tools/gsr-kwin-helper/gsrkwinhelper.js @@ -15,6 +15,28 @@ let prevCaption = null; let prevFullScreen = null; let prevMonitorName = null; +function dbusSafeDisconnect(window, signalName, callback) { + try { + const signal = window?.[signalName]; + if (signal && callback) { + signal.disconnect(callback); + } + } catch (e) { + // ignore stale/missing signal disconnects + } +} + +function dbusSafeConnect(window, signalName, callback) { + try { + const signal = window?.[signalName]; + if (signal && callback) { + signal.connect(callback); + } + } catch (e) { + // ignore missing signals + } +} + function emitActiveWindowUpdate(window) { if (workspace.activeWindow === window) { let caption = window.caption || ""; @@ -33,14 +55,14 @@ function subscribeToWindow(window) { if (!window) return; if (prevWindow !== window) { if (prevWindow !== null) { - prevWindow.captionChanged.disconnect(prevEmitActiveWindowUpdate); - prevWindow.fullScreenChanged.disconnect(prevEmitActiveWindowUpdate); - prevWindow.outputChanged.disconnect(prevEmitActiveWindowUpdate); + dbusSafeDisconnect(prevWindow, "captionChanged", prevEmitActiveWindowUpdate); + dbusSafeDisconnect(prevWindow, "fullScreenChanged", prevEmitActiveWindowUpdate); + dbusSafeDisconnect(prevWindow, "outputChanged", prevEmitActiveWindowUpdate); } let emitActiveWindowUpdateBound = emitActiveWindowUpdate.bind(null, window); - window.captionChanged.connect(emitActiveWindowUpdateBound); - window.fullScreenChanged.connect(emitActiveWindowUpdateBound); - window.outputChanged.connect(emitActiveWindowUpdateBound); + dbusSafeConnect(window, "captionChanged", emitActiveWindowUpdateBound); + dbusSafeConnect(window, "fullScreenChanged", emitActiveWindowUpdateBound); + dbusSafeConnect(window, "outputChanged", emitActiveWindowUpdateBound); prevWindow = window; prevEmitActiveWindowUpdate = emitActiveWindowUpdateBound; }