diff options
Diffstat (limited to 'src/gui/kernel/qwindow.cpp')
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index fd89e479b8..639817257e 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -458,7 +458,7 @@ void QWindowPrivate::updateSiblingPosition(SiblingPosition position) siblings.move(currentPosition, targetPosition); } -inline bool QWindowPrivate::windowRecreationRequired(QScreen *newScreen) const +bool QWindowPrivate::windowRecreationRequired(QScreen *newScreen) const { Q_Q(const QWindow); const QScreen *oldScreen = q->screen(); @@ -466,7 +466,7 @@ inline bool QWindowPrivate::windowRecreationRequired(QScreen *newScreen) const && !(oldScreen && oldScreen->virtualSiblings().contains(newScreen)); } -inline void QWindowPrivate::disconnectFromScreen() +void QWindowPrivate::disconnectFromScreen() { if (topLevelScreen) topLevelScreen = nullptr; @@ -614,6 +614,13 @@ QWindow::SurfaceType QWindow::surfaceType() const By default, the window is not visible, you must call setVisible(true), or show() or similar to make it visible. + \note Hiding a window does not remove the window from the windowing system, + it only hides it. On windowing systems that give full screen applications a + dedicated desktop (such as macOS), hiding a full screen window will not remove + that desktop, but leave it blank. Another window from the same application + might be shown full screen, and will fill that desktop. Use QWindow::close to + completely remove a window from the windowing system. + \sa show() */ void QWindow::setVisible(bool visible) @@ -1224,11 +1231,13 @@ bool QWindow::isExposed() const */ /*! - Returns \c true if the window should appear active from a style perspective. + Returns \c true if the window is active. This is the case for the window that has input focus as well as windows that are in the same parent / transient parent chain as the focus window. + Typically active windows should appear active from a style perspective. + To get the window that currently has focus, use QGuiApplication::focusWindow(). */ bool QWindow::isActive() const @@ -1926,7 +1935,12 @@ void QWindow::resize(const QSize &newSize) Q_D(QWindow); d->positionPolicy = QWindowPrivate::WindowFrameExclusive; if (d->platformWindow) { - d->platformWindow->setGeometry(QHighDpi::toNativePixels(QRect(position(), newSize), this)); + if (isTopLevel()) { + d->platformWindow->setGeometry(QHighDpi::toNativePixels(QRect(position(), newSize), this)); + } else { + d->platformWindow->setGeometry(QRect(QHighDpi::toNativeLocalPosition(position(), this), + QHighDpi::toNativePixels(newSize, this))); + } } else { const QSize oldSize = d->geometry.size(); d->geometry.setSize(newSize); @@ -2201,6 +2215,9 @@ void QWindow::showMaximized() Equivalent to calling setWindowStates(Qt::WindowFullScreen) and then setVisible(true). + See the \l{QWidget::showFullScreen()} documentation for platform-specific + considerations and limitations. + \sa setWindowStates(), setVisible() */ void QWindow::showFullScreen() @@ -2705,8 +2722,7 @@ void QWindowPrivate::maybeQuitOnLastWindowClosed() Q_Q(QWindow); if (!q->isTopLevel()) return; - // Attempt to close the application only if this has WA_QuitOnClose set and a non-visible parent - bool quitOnClose = QGuiApplication::quitOnLastWindowClosed() && !q->parent(); + QWindowList list = QGuiApplication::topLevelWindows(); bool lastWindowClosed = true; for (int i = 0; i < list.size(); ++i) { @@ -2718,7 +2734,8 @@ void QWindowPrivate::maybeQuitOnLastWindowClosed() } if (lastWindowClosed) { QGuiApplicationPrivate::emitLastWindowClosed(); - if (quitOnClose) { + + if (QGuiApplication::quitOnLastWindowClosed()) { QCoreApplicationPrivate *applicationPrivate = static_cast<QCoreApplicationPrivate*>(QObjectPrivate::get(QCoreApplication::instance())); applicationPrivate->maybeQuit(); } |