Avoid polling if the Qt window is minimized

This commit is contained in:
Cameron Gutman
2018-08-13 19:47:42 -07:00
parent 860d317330
commit f3309087ab
4 changed files with 23 additions and 29 deletions
-6
View File
@@ -36,15 +36,9 @@ GridView {
onVisibleChanged: { onVisibleChanged: {
if (visible) { if (visible) {
// Start polling when this view is shown
ComputerManager.startPolling()
appModel.computerLost.connect(computerLost) appModel.computerLost.connect(computerLost)
} }
else { else {
// Stop polling when this view is not on top
ComputerManager.stopPollingAsync()
appModel.computerLost.disconnect(computerLost) appModel.computerLost.disconnect(computerLost)
} }
} }
+1 -17
View File
@@ -2,6 +2,7 @@ import QtQuick 2.9
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import QtQuick.Dialogs 1.3 import QtQuick.Dialogs 1.3
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import QtQuick.Window 2.2
import ComputerModel 1.0 import ComputerModel 1.0
@@ -42,25 +43,11 @@ GridView {
} }
} }
onVisibleChanged: {
if (visible) {
// Start polling when this view is shown
ComputerManager.startPolling()
}
else {
// Stop polling when this view is not top-most
ComputerManager.stopPollingAsync()
}
}
function pairingComplete(error) function pairingComplete(error)
{ {
// Close the PIN dialog // Close the PIN dialog
pairDialog.close() pairDialog.close()
// Start polling again
ComputerManager.startPolling()
// Display a failed dialog if we got an error // Display a failed dialog if we got an error
if (error !== null) { if (error !== null) {
errorDialog.text = error errorDialog.text = error
@@ -176,9 +163,6 @@ GridView {
if (!model.busy) { if (!model.busy) {
var pin = ("0000" + Math.floor(Math.random() * 10000)).slice(-4) var pin = ("0000" + Math.floor(Math.random() * 10000)).slice(-4)
// Stop polling, since pairing may make GFE unresponsive
ComputerManager.stopPollingAsync()
// Kick off pairing in the background // Kick off pairing in the background
computerModel.pairComputer(index, pin) computerModel.pairComputer(index, pin)
-6
View File
@@ -44,16 +44,10 @@ Item {
if (visible) { if (visible) {
// Connect the quit completion signal // Connect the quit completion signal
ComputerManager.quitAppCompleted.connect(quitAppCompleted) ComputerManager.quitAppCompleted.connect(quitAppCompleted)
// We must be polling or we won't get the quitAppCompleted() callback
ComputerManager.startPolling()
} }
else { else {
// Disconnect the signal // Disconnect the signal
ComputerManager.quitAppCompleted.disconnect(quitAppCompleted) ComputerManager.quitAppCompleted.disconnect(quitAppCompleted)
// Stop polling when this view is not on top
ComputerManager.stopPollingAsync()
} }
} }
+22
View File
@@ -1,12 +1,16 @@
import QtQuick 2.9 import QtQuick 2.9
import QtQuick.Controls 2.2 import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import QtQuick.Window 2.2
import QtQuick.Controls.Material 2.1 import QtQuick.Controls.Material 2.1
import ComputerManager 1.0
import AutoUpdateChecker 1.0 import AutoUpdateChecker 1.0
ApplicationWindow { ApplicationWindow {
property bool pollingActive: false
id: window id: window
visible: true visible: true
width: 1280 width: 1280
@@ -21,6 +25,24 @@ ApplicationWindow {
anchors.fill: parent anchors.fill: parent
} }
onVisibilityChanged: {
// We don't want to just use 'active' here because that will stop polling if
// we lose focus, which might be overzealous for users with multiple screens
// where we may be clearly visible on the other display. Ideally we'll poll
// only if the window is visible to the user (not if obscured by other windows),
// but it seems difficult to do this portably.
var shouldPoll = visibility !== Window.Minimized && visibility !== Window.Hidden
if (shouldPoll && !pollingActive) {
ComputerManager.startPolling()
pollingActive = true
}
else if (!shouldPoll && pollingActive) {
ComputerManager.stopPollingAsync()
pollingActive = false
}
}
function navigateTo(url, objectName) function navigateTo(url, objectName)
{ {
var existingItem = stackView.find(function(item, index) { var existingItem = stackView.find(function(item, index) {