mirror of
https://repo.dec05eba.com/gpu-screen-recorder-ui
synced 2026-03-31 09:17:04 +09:00
Wrap kwin helper signals in a safe handler
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user