diff options
Diffstat (limited to 'src/gui/kernel/qplatformwindow.cpp')
-rw-r--r-- | src/gui/kernel/qplatformwindow.cpp | 51 |
1 files changed, 41 insertions, 10 deletions
diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp index 754395592c..d8e4e7736e 100644 --- a/src/gui/kernel/qplatformwindow.cpp +++ b/src/gui/kernel/qplatformwindow.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** @@ -10,9 +10,9 @@ ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -23,8 +23,8 @@ ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ @@ -83,7 +83,8 @@ QPlatformWindow *QPlatformWindow::parent() const */ QPlatformScreen *QPlatformWindow::screen() const { - return window()->screen()->handle(); + QScreen *scr = window()->screen(); + return scr ? scr->handle() : Q_NULLPTR; } /*! @@ -453,7 +454,7 @@ bool QPlatformWindow::frameStrutEventsEnabled() const QString QPlatformWindow::formatWindowTitle(const QString &title, const QString &separator) { QString fullTitle = title; - if (QGuiApplicationPrivate::displayName) { + if (QGuiApplicationPrivate::displayName && !title.endsWith(*QGuiApplicationPrivate::displayName)) { // Append display name, if set. if (!fullTitle.isEmpty()) fullTitle += separator; @@ -479,7 +480,7 @@ QString QPlatformWindow::formatWindowTitle(const QString &title, const QString & QPlatformScreen *QPlatformWindow::screenForGeometry(const QRect &newGeometry) const { QPlatformScreen *currentScreen = screen(); - if (!parent() && !currentScreen->geometry().intersects(newGeometry)) { + if (!parent() && currentScreen && !currentScreen->geometry().intersects(newGeometry)) { Q_FOREACH (QPlatformScreen* screen, currentScreen->virtualSiblings()) { if (screen->geometry().intersects(newGeometry)) return screen; @@ -595,6 +596,36 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w, } /*! + Requests an QEvent::UpdateRequest event. The event will be + delivered to the QWindow. + + QPlatformWindow subclasses can re-implement this function to + provide display refresh synchronized updates. The event + should be delivered using QWindowPrivate::deliverUpdateRequest() + to not get out of sync with the the internal state of QWindow. + + The default implementation posts an UpdateRequest event to the + window after 5 ms. The additional time is there to give the event + loop a bit of idle time to gather system events. + +*/ +void QPlatformWindow::requestUpdate() +{ + static int timeout = -1; + if (timeout == -1) { + bool ok = false; + timeout = qEnvironmentVariableIntValue("QT_QPA_UPDATE_IDLE_TIME", &ok); + if (!ok) + timeout = 5; + } + + QWindow *w = window(); + QWindowPrivate *wp = (QWindowPrivate *) QObjectPrivate::get(w); + Q_ASSERT(wp->updateTimer == 0); + wp->updateTimer = w->startTimer(timeout, Qt::PreciseTimer); +} + +/*! \class QPlatformWindow \since 4.8 \internal |