diff --git a/app/gui/StreamSegue.qml b/app/gui/StreamSegue.qml index 377b5337..d7c0c5d1 100644 --- a/app/gui/StreamSegue.qml +++ b/app/gui/StreamSegue.qml @@ -126,22 +126,9 @@ Item { SystemProperties.waitForAsyncLoad() // Kick off the stream - spinnerTimer.start() streamLoader.active = true } - Timer { - id: spinnerTimer - - // Display the spinner appearance a bit to allow us to reach - // the code in Session.exec() that pumps the event loop. - // If we display it immediately, it will briefly hang in the - // middle of the animation on Windows, which looks very - // obviously broken. - interval: 100 - onTriggered: stageSpinner.visible = true - } - Timer { id: startSessionTimer onTriggered: { @@ -178,6 +165,11 @@ Item { return; } + // This spinner is shown only after session.initialize() has completed + // to prevent active animations from running during decoder probing, + // which causes re-entrant event loop livelocks with libdecor-gtk. + stageSpinner.visible = true + // Don't wait unless we have toasts to display startSessionTimer.interval = 0