From d8ba940b949d60f43fe3b2a4e2973b7a2fdc4b2a Mon Sep 17 00:00:00 2001 From: Bernd Weimer Date: Thu, 25 Jul 2013 09:36:10 +0200 Subject: QNX: Prevent rendering when app is minimized Windows will only be exposed and hence rendered when they are not minimized. This will save useless computations and hence battery. Change-Id: I83166cc6c3d89e878106c998a35890dd7788ed8a Reviewed-by: Fabian Bumberger Reviewed-by: Rafael Roquetto --- src/plugins/platforms/qnx/qqnxscreen.cpp | 6 ++++++ src/plugins/platforms/qnx/qqnxwindow.cpp | 13 ++++++++++++- src/plugins/platforms/qnx/qqnxwindow.h | 2 ++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/qnx/qqnxscreen.cpp b/src/plugins/platforms/qnx/qqnxscreen.cpp index 7959617443..d940b35861 100644 --- a/src/plugins/platforms/qnx/qqnxscreen.cpp +++ b/src/plugins/platforms/qnx/qqnxscreen.cpp @@ -646,6 +646,9 @@ void QQnxScreen::activateWindowGroup(const QByteArray &id) if (!window) return; + Q_FOREACH (QQnxWindow *childWindow, m_childWindows) + childWindow->setExposed(true); + QWindowSystemInterface::handleWindowActivated(window); } @@ -656,6 +659,9 @@ void QQnxScreen::deactivateWindowGroup(const QByteArray &id) if (!rootWindow() || id != rootWindow()->groupName()) return; + Q_FOREACH (QQnxWindow *childWindow, m_childWindows) + childWindow->setExposed(false); + QWindowSystemInterface::handleWindowActivated(0); } diff --git a/src/plugins/platforms/qnx/qqnxwindow.cpp b/src/plugins/platforms/qnx/qqnxwindow.cpp index 9b9576c88b..61b13099fd 100644 --- a/src/plugins/platforms/qnx/qqnxwindow.cpp +++ b/src/plugins/platforms/qnx/qqnxwindow.cpp @@ -75,6 +75,7 @@ QQnxWindow::QQnxWindow(QWindow *window, screen_context_t context) m_screen(0), m_parentWindow(0), m_visible(false), + m_exposed(true), m_windowState(Qt::WindowNoState), #if !defined(QT_NO_OPENGL) m_platformOpenGLContext(0), @@ -334,9 +335,19 @@ void QQnxWindow::setOpacity(qreal level) // the transparency will look wrong... } +void QQnxWindow::setExposed(bool exposed) +{ + qWindowDebug() << Q_FUNC_INFO << "window =" << window() << "expose =" << exposed; + + if (m_exposed != exposed) { + m_exposed = exposed; + QWindowSystemInterface::handleExposeEvent(window(), window()->geometry()); + } +} + bool QQnxWindow::isExposed() const { - return m_visible; + return m_visible && m_exposed; } QSize QQnxWindow::requestedBufferSize() const diff --git a/src/plugins/platforms/qnx/qqnxwindow.h b/src/plugins/platforms/qnx/qqnxwindow.h index 4fabccf4cb..cd1980d994 100644 --- a/src/plugins/platforms/qnx/qqnxwindow.h +++ b/src/plugins/platforms/qnx/qqnxwindow.h @@ -102,6 +102,7 @@ public: void lower(); void requestActivateWindow(); void setWindowState(Qt::WindowState state); + void setExposed(bool exposed); void propagateSizeHints(); @@ -158,6 +159,7 @@ private: QList m_childWindows; QQnxWindow *m_parentWindow; bool m_visible; + bool m_exposed; QRect m_unmaximizedGeometry; Qt::WindowState m_windowState; -- cgit v1.2.3