diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 593136e7b4..c48c5b11a8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1429,6 +1429,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(); @@ -6476,6 +6477,15 @@ 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 44c0f127c2..ad468bab25 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -416,6 +416,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..7da79725aa 100644 --- a/libraries/ui/src/MainWindow.cpp +++ b/libraries/ui/src/MainWindow.cpp @@ -105,12 +105,17 @@ void MainWindow::hideEvent(QHideEvent* event) { void MainWindow::changeEvent(QEvent* event) { if (event->type() == QEvent::WindowStateChange) { QWindowStateChangeEvent* stateChangeEvent = static_cast(event); + if ((stateChangeEvent->oldState() == Qt::WindowNoState || 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;