Wrap kwin helper signals in a safe handler

This commit is contained in:
dec05eba
2026-03-24 12:38:32 +01:00
parent 5ef06a2466
commit 9aea35200d

View File

@@ -15,6 +15,28 @@ let prevCaption = null;
let prevFullScreen = null; let prevFullScreen = null;
let prevMonitorName = 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) { function emitActiveWindowUpdate(window) {
if (workspace.activeWindow === window) { if (workspace.activeWindow === window) {
let caption = window.caption || ""; let caption = window.caption || "";
@@ -33,14 +55,14 @@ function subscribeToWindow(window) {
if (!window) return; if (!window) return;
if (prevWindow !== window) { if (prevWindow !== window) {
if (prevWindow !== null) { if (prevWindow !== null) {
prevWindow.captionChanged.disconnect(prevEmitActiveWindowUpdate); dbusSafeDisconnect(prevWindow, "captionChanged", prevEmitActiveWindowUpdate);
prevWindow.fullScreenChanged.disconnect(prevEmitActiveWindowUpdate); dbusSafeDisconnect(prevWindow, "fullScreenChanged", prevEmitActiveWindowUpdate);
prevWindow.outputChanged.disconnect(prevEmitActiveWindowUpdate); dbusSafeDisconnect(prevWindow, "outputChanged", prevEmitActiveWindowUpdate);
} }
let emitActiveWindowUpdateBound = emitActiveWindowUpdate.bind(null, window); let emitActiveWindowUpdateBound = emitActiveWindowUpdate.bind(null, window);
window.captionChanged.connect(emitActiveWindowUpdateBound); dbusSafeConnect(window, "captionChanged", emitActiveWindowUpdateBound);
window.fullScreenChanged.connect(emitActiveWindowUpdateBound); dbusSafeConnect(window, "fullScreenChanged", emitActiveWindowUpdateBound);
window.outputChanged.connect(emitActiveWindowUpdateBound); dbusSafeConnect(window, "outputChanged", emitActiveWindowUpdateBound);
prevWindow = window; prevWindow = window;
prevEmitActiveWindowUpdate = emitActiveWindowUpdateBound; prevEmitActiveWindowUpdate = emitActiveWindowUpdateBound;
} }