diff options
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qplatformwindow_qpa.cpp | 11 | ||||
-rw-r--r-- | src/gui/kernel/qplatformwindow_qpa.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 16 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.h | 1 |
4 files changed, 24 insertions, 6 deletions
diff --git a/src/gui/kernel/qplatformwindow_qpa.cpp b/src/gui/kernel/qplatformwindow_qpa.cpp index afbff2ad5d..f6a1260d9d 100644 --- a/src/gui/kernel/qplatformwindow_qpa.cpp +++ b/src/gui/kernel/qplatformwindow_qpa.cpp @@ -70,7 +70,7 @@ QPlatformWindow::~QPlatformWindow() } /*! - Returnes the window which belongs to the QPlatformWindow + Returns the window which belongs to the QPlatformWindow */ QWindow *QPlatformWindow::window() const { @@ -79,6 +79,15 @@ QWindow *QPlatformWindow::window() const } /*! + Returns the parent platform window (or 0 if orphan). +*/ +QPlatformWindow *QPlatformWindow::parent() const +{ + Q_D(const QPlatformWindow); + return d->window->parent() ? d->window->parent()->handle() : 0; +} + +/*! This function is called by Qt whenever a window is moved or the window is resized. The resize can happen programatically(from ie. user application) or by the window manager. This means that there is no need to call this function specifically from the window manager callback, instead diff --git a/src/gui/kernel/qplatformwindow_qpa.h b/src/gui/kernel/qplatformwindow_qpa.h index de3174bde9..6bfdc5bc75 100644 --- a/src/gui/kernel/qplatformwindow_qpa.h +++ b/src/gui/kernel/qplatformwindow_qpa.h @@ -66,6 +66,8 @@ public: virtual ~QPlatformWindow(); QWindow *window() const; + QPlatformWindow *parent() const; + virtual void setGeometry(const QRect &rect); virtual QRect geometry() const; diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 5d4fd763b8..3b01a0d352 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -97,7 +97,7 @@ void QWindow::create() QObject *object = childObjects.at(i); if(object->isWindowType()) { QWindow *window = static_cast<QWindow *>(object); - if (window->d_func()->platformWindow) + if (window->d_func()->platformWindow && !window->isTopLevel()) window->d_func()->platformWindow->setParent(d->platformWindow); } } @@ -133,9 +133,9 @@ void QWindow::setParent(QWindow *parent) QObject::setParent(parent); if (d->platformWindow) { - if (parent && parent->d_func()->platformWindow) { + if (parent && parent->d_func()->platformWindow && !isTopLevel()) { d->platformWindow->setParent(parent->d_func()->platformWindow); - } else if (!parent) { + } else { d->platformWindow->setParent(0); } } @@ -144,12 +144,12 @@ void QWindow::setParent(QWindow *parent) } /*! - Returns whether the window is top level, i.e. parent-less. + Returns whether the window is top level. */ bool QWindow::isTopLevel() const { Q_D(const QWindow); - return d->parentWindow == 0; + return d->windowFlags & Qt::Window; } void QWindow::setWindowFormat(const QWindowFormat &format) @@ -196,6 +196,12 @@ Qt::WindowFlags QWindow::windowFlags() const return d->windowFlags; } +Qt::WindowType QWindow::windowType() const +{ + Q_D(const QWindow); + return static_cast<Qt::WindowType>(int(d->windowFlags & Qt::WindowType_Mask)); +} + void QWindow::setWindowTitle(const QString &title) { Q_D(QWindow); diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h index e0a1871ea1..22dbf48538 100644 --- a/src/gui/kernel/qwindow.h +++ b/src/gui/kernel/qwindow.h @@ -107,6 +107,7 @@ public: void setWindowFlags(Qt::WindowFlags flags); Qt::WindowFlags windowFlags() const; + Qt::WindowType windowType() const; QString windowTitle() const; |