From fe0bbe19d79b5d602529103092fcbfdc15440fad Mon Sep 17 00:00:00 2001 From: Wayne Chen Date: Thu, 8 Nov 2018 14:32:11 -0800 Subject: [PATCH] creating login overlay upon startup in HMD/feedback changes --- interface/src/Application.cpp | 19 ++++++------------- interface/src/Application.h | 1 - interface/src/ui/LoginDialog.cpp | 13 ++++++++++++- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 5aeed611d0..c889c4439a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1214,7 +1214,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(&domainHandler, SIGNAL(domainURLChanged(QUrl)), SLOT(domainURLChanged(QUrl))); connect(&domainHandler, SIGNAL(redirectToErrorDomainURL(QUrl)), SLOT(goToErrorDomainURL(QUrl))); - connect(this, SIGNAL(loginScreenStateChanged(bool)), &domainHandler, SLOT((loginScreenStateChanged(bool)))); connect(&domainHandler, &DomainHandler::domainURLChanged, [](QUrl domainURL){ setCrashAnnotation("domain", domainURL.toString().toStdString()); }); @@ -1770,7 +1769,10 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo }); connect(offscreenUi.data(), &OffscreenUi::keyboardFocusActive, [this]() { - initializeQml(); +#if !defined(Q_OS_ANDROID) + // only for non-android. QML is ready to be shown at this time. + showLoginScreen(); +#endif }); // Make sure we don't time out during slow operations at startup @@ -2889,16 +2891,6 @@ void Application::showLoginScreen() { loginDialogPoppedUp.set(_loginDialogPoppedUp); } -void Application::initializeQml() { - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "initializeQml"); - return; - } -#if !defined(Q_OS_ANDROID) - showLoginScreen(); -#endif -} - void Application::initializeUi() { AddressBarDialog::registerType(); ErrorDialog::registerType(); @@ -8498,7 +8490,8 @@ void Application::setShowBulletConstraintLimits(bool value) { } void Application::checkReadyToCreateLoginDialogOverlay() { - if (qApp->isHMDMode() && qApp->getLoginDialogPoppedUp() && _loginDialogOverlayID.isNull()) { + if (qApp->isHMDMode() && qApp->getActiveDisplayPlugin()->isDisplayVisible() && + qApp->getLoginDialogPoppedUp() && _loginDialogOverlayID.isNull()) { createLoginDialogOverlay(); _loginPointerManager.setUp(); } else if (qApp->getLoginDialogPoppedUp()) { diff --git a/interface/src/Application.h b/interface/src/Application.h index c33511e25c..39352608f3 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -148,7 +148,6 @@ public: void initializeGL(); void initializeDisplayPlugins(); void initializeRenderEngine(); - void initializeQml(); void initializeUi(); void updateSecondaryCameraViewFrustum(); diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index d4c198067e..22efcb4efd 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -53,8 +53,13 @@ void LoginDialog::showWithSelection() { auto tablet = dynamic_cast(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); auto hmd = DependencyManager::get(); + if (qApp->getLoginDialogPoppedUp()) { + // user is not logged in but the login screen was displayed. + QAction* loginAction = Menu::getInstance()->getActionForOption(MenuOption::Login); + Q_CHECK_PTR(loginAction); + loginAction->setEnabled(false); + } if (!qApp->isHMDMode()) { - if (qApp->getLoginDialogPoppedUp()) { LoginDialog::show(); return; @@ -68,6 +73,7 @@ void LoginDialog::showWithSelection() { tablet->initialScreen(TABLET_LOGIN_DIALOG_URL); } else { // let Application handle creating login dialog overlay. + qApp->checkReadyToCreateLoginDialogOverlay(); } } @@ -104,6 +110,11 @@ bool LoginDialog::isSteamRunning() const { void LoginDialog::dismissLoginDialog() { // it'll only pop up once. qDebug() << "LoginDialog::dismissLoginDialog"; + + QAction* loginAction = Menu::getInstance()->getActionForOption(MenuOption::Login); + Q_CHECK_PTR(loginAction); + loginAction->setEnabled(true); + emit dismissedLoginDialog(); }