From 9f85af81d16bbcacab86cd7e76e624de82eb8e09 Mon Sep 17 00:00:00 2001 From: Vasily Date: Mon, 4 Mar 2019 22:14:28 +0100 Subject: [PATCH] Save desktop width setting The 2 seconds is arbitrarily chosen. The problem seems to be that Valve's own overlays are not being initialized before custom overlays, leading to the Desktop overlay sometimes not being present when our overlay initializes. The second if statement inside the first one checking a second time is definitely a little disgusting, but for now it gets the job done. The 4.0 default was arbitrarily chosen by whoever decided to initialize the variable in the class. --- src/tabcontrollers/UtilitiesTabController.cpp | 40 ++++++++++++------- src/tabcontrollers/UtilitiesTabController.h | 2 +- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/tabcontrollers/UtilitiesTabController.cpp b/src/tabcontrollers/UtilitiesTabController.cpp index e8ff748..7f9da8b 100644 --- a/src/tabcontrollers/UtilitiesTabController.cpp +++ b/src/tabcontrollers/UtilitiesTabController.cpp @@ -2,6 +2,7 @@ #include #include #include "../overlaycontroller.h" +#include #include #ifdef _WIN32 # include "keyboardinput/KeyboardInputWindows.h" @@ -27,12 +28,13 @@ void UtilitiesTabController::initStage1() auto qAlarmIsModal = settings->value( "alarmIsModal", m_alarmIsModal ); auto qAlarmHour = settings->value( "alarmHour", 0 ); auto qAlarmMinute = settings->value( "alarmMinute", 0 ); + auto qDesktopWidth = settings->value( "desktopWidth", 4.0 ); settings->endGroup(); m_alarmEnabled = qAlarmEnabled.toBool(); m_alarmIsModal = qAlarmIsModal.toBool(); m_alarmTime = QTime( qAlarmHour.toInt(), qAlarmMinute.toInt() ); - setUpDesktopOverlay(); + setUpDesktopOverlay( qDesktopWidth.toFloat() ); } void UtilitiesTabController::initStage2( OverlayController* var_parent, @@ -544,7 +546,7 @@ void UtilitiesTabController::eventLoopTick() } } -void UtilitiesTabController::setUpDesktopOverlay() +void UtilitiesTabController::setUpDesktopOverlay( float desktopWidthInMeters ) { vr::VROverlayHandle_t pOverlayHandle = 0; auto error = vr::VROverlay()->FindOverlay( steamDesktopOverlaykey, @@ -555,21 +557,25 @@ void UtilitiesTabController::setUpDesktopOverlay() LOG( INFO ) << "Could not find overlay \"" << steamDesktopOverlaykey << "\": " << vr::VROverlay()->GetOverlayErrorNameFromEnum( error ); - return; + + std::this_thread::sleep_for( std::chrono::seconds( 2 ) ); + + error = vr::VROverlay()->FindOverlay( steamDesktopOverlaykey, + &pOverlayHandle ); + if ( error != vr::VROverlayError_None ) + { + LOG( INFO ) << "Could not find overlay \"" << steamDesktopOverlaykey + << "\" after waiting: " + << vr::VROverlay()->GetOverlayErrorNameFromEnum( + error ); + return; + } + LOG( INFO ) << "Found overlay \"" << steamDesktopOverlaykey + << "\" after waiting."; } m_steamDesktopOverlayAvailable = true; - float width; - error = vr::VROverlay()->GetOverlayWidthInMeters( pOverlayHandle, &width ); - if ( error != vr::VROverlayError_None ) - { - LOG( ERROR ) << "Could not read overlay width of \"" - << steamDesktopOverlaykey << "\": " - << vr::VROverlay()->GetOverlayErrorNameFromEnum( error ); - return; - } - - m_steamDesktopOverlayWidth = width; + setSteamDesktopOverlayWidth( desktopWidthInMeters, true, true ); } bool UtilitiesTabController::steamDesktopOverlayAvailable() const @@ -589,6 +595,12 @@ void UtilitiesTabController::setSteamDesktopOverlayWidth( float width, if ( std::abs( m_steamDesktopOverlayWidth - width ) > 0.01f ) { m_steamDesktopOverlayWidth = width; + + auto settings = OverlayController::appSettings(); + settings->beginGroup( "utilitiesSettings" ); + settings->setValue( "desktopWidth", m_steamDesktopOverlayWidth ); + settings->endGroup(); + if ( notifyOpenVr ) { vr::VROverlayHandle_t pOverlayHandle; diff --git a/src/tabcontrollers/UtilitiesTabController.h b/src/tabcontrollers/UtilitiesTabController.h index 1f5d790..7f05e3b 100644 --- a/src/tabcontrollers/UtilitiesTabController.h +++ b/src/tabcontrollers/UtilitiesTabController.h @@ -33,7 +33,7 @@ class UtilitiesTabController : public QObject setSteamDesktopOverlayWidth NOTIFY steamDesktopOverlayWidthChanged ) private: - void setUpDesktopOverlay(); + void setUpDesktopOverlay( float desktopWidthInMeters ); OverlayController* m_parent; QQuickWindow* m_widget;