summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/kernel')
-rw-r--r--src/gui/kernel/qplatformwindow_qpa.cpp11
-rw-r--r--src/gui/kernel/qplatformwindow_qpa.h2
-rw-r--r--src/gui/kernel/qwindow.cpp16
-rw-r--r--src/gui/kernel/qwindow.h1
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;