From 1b2887d5b1784a9ebd6af66ece5b3c4b5a315a15 Mon Sep 17 00:00:00 2001 From: Triplelexx Date: Thu, 6 Apr 2017 17:06:06 +0100 Subject: [PATCH 1/3] change paintGL to return if window is minimized --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e19eea0a2e..593136e7b4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2071,7 +2071,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; } From 279997d9051420f3d2c577af9fe188cdf335d2cb Mon Sep 17 00:00:00 2001 From: Triplelexx Date: Fri, 7 Apr 2017 06:49:28 +0100 Subject: [PATCH 2/3] change display plugin to deactivate when window minimized --- interface/src/Application.cpp | 10 ++++++++++ interface/src/Application.h | 1 + libraries/ui/src/MainWindow.cpp | 5 +++++ libraries/ui/src/MainWindow.h | 1 + 4 files changed, 17 insertions(+) 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; From 27a404d0ea3e3eda6a8893d7ba473e8d47c92e2c Mon Sep 17 00:00:00 2001 From: Triplelexx Date: Fri, 7 Apr 2017 07:09:18 +0100 Subject: [PATCH 3/3] remove extra lines --- interface/src/Application.cpp | 1 - libraries/ui/src/MainWindow.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c48c5b11a8..679de39df8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -6485,7 +6485,6 @@ void Application::windowMinimizedChanged(bool minimized) { } } - void Application::postLambdaEvent(std::function f) { if (this->thread() == QThread::currentThread()) { f(); diff --git a/libraries/ui/src/MainWindow.cpp b/libraries/ui/src/MainWindow.cpp index 7da79725aa..20f994e63d 100644 --- a/libraries/ui/src/MainWindow.cpp +++ b/libraries/ui/src/MainWindow.cpp @@ -105,7 +105,6 @@ 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) {