import QtQuick 2.0 import QtQuick.Controls 2.2 import QtQuick.Dialogs 1.3 import ComputerManager 1.0 import Session 1.0 Item { property string appName property Session nextSession : null property string nextAppName : "" property string stageText : "Quitting " + appName + "..." anchors.fill: parent // The StackView will trigger a visibility change when // we're pushed onto it, causing our onVisibleChanged // routine to run, but only if we start as invisible visible: false function quitAppCompleted(error) { // Display a failed dialog if we got an error if (error !== undefined) { errorDialog.text = error errorDialog.open() } // Exit this view stackView.pop() // If we're supposed to launch another game after this, do so now if (error === undefined && nextSession !== null) { var component = Qt.createComponent("StreamSegue.qml") var segue = component.createObject(stackView) segue.appName = nextAppName segue.session = nextSession stackView.push(segue) } } onVisibleChanged: { if (visible) { // Connect the quit completion signal ComputerManager.quitAppCompleted.connect(quitAppCompleted) // We must be polling or we won't get the quitAppCompleted() callback ComputerManager.startPolling() } else { // Disconnect the signal ComputerManager.quitAppCompleted.disconnect(quitAppCompleted) // Stop polling when this view is not on top ComputerManager.stopPollingAsync() } } Row { anchors.centerIn: parent spacing: 5 BusyIndicator { id: stageSpinner } Label { id: stageLabel height: stageSpinner.height text: stageText font.pointSize: 20 verticalAlignment: Text.AlignVCenter wrapMode: Text.Wrap color: "white" } } MessageDialog { id: errorDialog modality:Qt.WindowModal icon: StandardIcon.Critical standardButtons: StandardButton.Ok } }