aboutsummaryrefslogtreecommitdiffstats
path: root/desktop/modules/kdeconnect/KdeConnectModule.qml
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/modules/kdeconnect/KdeConnectModule.qml')
-rw-r--r--desktop/modules/kdeconnect/KdeConnectModule.qml23
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);
+ }
}
}