From 1c2da6975fead84cf3e8e23356d9e364c08ee467 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Mon, 14 Sep 2026 19:42:14 +0200 Subject: fix(desktop): queue KDE Connect actions instead of interrupting A second action while one was in flight killed the first process, whose onExited then fired under the new label and raised a false failure notification. Actions are now queued and launched on exit, so each exit reports under its own label. Also correct two comments that contradicted the code: the pairing banner is only noticed on the on-open poll, and the laptop glyph keys off the daemon's desktop type. --- desktop/modules/kdeconnect/KdeConnectModule.qml | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'desktop/modules/kdeconnect/KdeConnectModule.qml') diff --git a/desktop/modules/kdeconnect/KdeConnectModule.qml b/desktop/modules/kdeconnect/KdeConnectModule.qml index b7392b0..fa4fb52 100644 --- a/desktop/modules/kdeconnect/KdeConnectModule.qml +++ b/desktop/modules/kdeconnect/KdeConnectModule.qml @@ -103,12 +103,24 @@ Module { property Process notifyProc: Process {} - // One reusable action process. Actions are serialized; a second click - // while one runs replaces it rather than racing. A failure notifies. + // One reusable action process. Actions never interrupt one another: a + // second action while one runs is queued until the first exits, so each + // exit is reported under the label it was started with. Killing an + // in-flight process to start a new one would fire onExited with the new + // label and raise a false failure. + property var queuedAction: null + function run(label, cmd) { + if (actProc.running) { + queuedAction = { label: label, cmd: cmd }; + return; + } + launch(label, cmd); + } + + function launch(label, cmd) { actProc.label = label; actProc.command = cmd; - actProc.running = false; actProc.running = true; } @@ -120,6 +132,11 @@ Module { mod.notify(actProc.label + " failed", actErr.text.trim() || ("exited " + code)); mod.refresh(); + if (mod.queuedAction !== null) { + const q = mod.queuedAction; + mod.queuedAction = null; + mod.launch(q.label, q.cmd); + } } } -- cgit v1.2.3