aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--desktop/modules/kdeconnect/KdeConnectModule.qml23
-rw-r--r--desktop/modules/kdeconnect/KdeConnectPage.qml5
-rw-r--r--desktop/modules/kdeconnect/KdeConnectRow.qml6
3 files changed, 26 insertions, 8 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);
+ }
}
}
diff --git a/desktop/modules/kdeconnect/KdeConnectPage.qml b/desktop/modules/kdeconnect/KdeConnectPage.qml
index 89df597..d570125 100644
--- a/desktop/modules/kdeconnect/KdeConnectPage.qml
+++ b/desktop/modules/kdeconnect/KdeConnectPage.qml
@@ -38,8 +38,9 @@ Column {
color: Theme.red
}
- // Incoming pairing requests. The property persists while the drawer is
- // closed, so a request raised then is still here when it opens.
+ // Incoming pairing requests. The poll runs only while the drawer is open,
+ // so a request raised while it was closed is not noticed until it opens;
+ // the daemon keeps the request, so it is here then.
Repeater {
model: page.kc.requests
diff --git a/desktop/modules/kdeconnect/KdeConnectRow.qml b/desktop/modules/kdeconnect/KdeConnectRow.qml
index 0b45fb7..e4d4d93 100644
--- a/desktop/modules/kdeconnect/KdeConnectRow.qml
+++ b/desktop/modules/kdeconnect/KdeConnectRow.qml
@@ -12,9 +12,9 @@
import QtQuick
import "../.."
-// One KDE Connect device. The type glyph is the phone for anything that is
-// not a laptop or desktop, since the daemon's type strings are not a closed
-// set.
+// One KDE Connect device. The type glyph is a laptop only for a device the
+// daemon reports as "desktop" (which is how it reports laptops too), and a
+// phone for anything else, since the type strings are not a closed set.
Rectangle {
id: row