diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 7763c3fb0b..4fb370b756 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1436,6 +1436,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo entityPacketSender->setMyAvatar(myAvatar.get()); connect(this, &Application::applicationStateChanged, this, &Application::activeChanged); + connect(_window, SIGNAL(windowMinimizedChanged(bool)), this, SLOT(windowMinimizedChanged(bool))); qCDebug(interfaceapp, "Startup time: %4.2f seconds.", (double)startupTimer.elapsed() / 1000.0); auto textureCache = DependencyManager::get(); @@ -2084,7 +2085,7 @@ void Application::initializeUi() { void Application::paintGL() { // Some plugins process message events, allowing paintGL to be called reentrantly. - if (_inPaint || _aboutToQuit) { + if (_inPaint || _aboutToQuit || _window->isMinimized()) { return; } @@ -6486,6 +6487,14 @@ void Application::activeChanged(Qt::ApplicationState state) { } } +void Application::windowMinimizedChanged(bool minimized) { + if (!minimized && !getActiveDisplayPlugin()->isActive()) { + getActiveDisplayPlugin()->activate(); + } else if (minimized && getActiveDisplayPlugin()->isActive()) { + getActiveDisplayPlugin()->deactivate(); + } +} + void Application::postLambdaEvent(std::function f) { if (this->thread() == QThread::currentThread()) { f(); diff --git a/interface/src/Application.h b/interface/src/Application.h index 9f429b0433..55c8303905 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -415,6 +415,7 @@ private slots: void faceTrackerMuteToggled(); void activeChanged(Qt::ApplicationState state); + void windowMinimizedChanged(bool minimized); void notifyPacketVersionMismatch(); diff --git a/libraries/ui/src/MainWindow.cpp b/libraries/ui/src/MainWindow.cpp index c3ad59bf48..20f994e63d 100644 --- a/libraries/ui/src/MainWindow.cpp +++ b/libraries/ui/src/MainWindow.cpp @@ -109,8 +109,12 @@ void MainWindow::changeEvent(QEvent* event) { stateChangeEvent->oldState() == Qt::WindowMaximized) && windowState() == Qt::WindowMinimized) { emit windowShown(false); + emit windowMinimizedChanged(true); } else { emit windowShown(true); + if (stateChangeEvent->oldState() == Qt::WindowMinimized) { + emit windowMinimizedChanged(false); + } } } else if (event->type() == QEvent::ActivationChange) { if (isActiveWindow()) { diff --git a/libraries/ui/src/MainWindow.h b/libraries/ui/src/MainWindow.h index db02bfa1b6..75421340a2 100644 --- a/libraries/ui/src/MainWindow.h +++ b/libraries/ui/src/MainWindow.h @@ -29,6 +29,7 @@ public slots: signals: void windowGeometryChanged(QRect geometry); void windowShown(bool shown); + void windowMinimizedChanged(bool minimized); protected: virtual void closeEvent(QCloseEvent* event) override;