diff --git a/shell/plugins/panels/dropbox/Service.qml b/shell/plugins/panels/dropbox/Service.qml index 13f7e4bd..f4d56f4f 100644 --- a/shell/plugins/panels/dropbox/Service.qml +++ b/shell/plugins/panels/dropbox/Service.qml @@ -166,6 +166,23 @@ Item { onTriggered: root.refresh() } + Timer { + // After a fresh boot the startup poll usually lands before dropboxd has + // finished its respawn dance, which left the icon stale until the next + // periodic refresh. Poll quickly until the daemon shows up, or give up + // after ~30 seconds. + id: startupRamp + property int ticks: 0 + interval: 2000 + repeat: true + running: true + onTriggered: { + ticks += 1 + if (root.running || ticks >= 15) startupRamp.running = false + else root.refresh() + } + } + Timer { id: delayedRefresh interval: 1000 diff --git a/shell/plugins/panels/tailscale/Service.qml b/shell/plugins/panels/tailscale/Service.qml index f1ef912e..ffb5eb17 100644 --- a/shell/plugins/panels/tailscale/Service.qml +++ b/shell/plugins/panels/tailscale/Service.qml @@ -363,6 +363,22 @@ Item { onTriggered: root.refresh() } + Timer { + // After a fresh boot the startup poll usually lands before tailscaled has + // connected, which left the icon stale until the next periodic refresh. + // Poll quickly until the service shows up, or give up after ~30 seconds. + id: startupRamp + property int ticks: 0 + interval: 2000 + repeat: true + running: true + onTriggered: { + ticks += 1 + if (root.running || ticks >= 15) startupRamp.running = false + else root.refresh() + } + } + Timer { id: delayedRefresh interval: 600