diff options
Diffstat (limited to 'desktop/modules/kdeconnect/KdeConnectModule.qml')
| -rw-r--r-- | desktop/modules/kdeconnect/KdeConnectModule.qml | 23 |
1 files changed, 20 insertions, 3 deletions
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); + } } } |
