summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/kernel')
-rw-r--r--src/gui/kernel/qplatformwindow.cpp24
-rw-r--r--src/gui/kernel/qplatformwindow.h2
-rw-r--r--src/gui/kernel/qwindow.cpp12
3 files changed, 36 insertions, 2 deletions
diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp
index 748a7825b6..6200ad01bf 100644
--- a/src/gui/kernel/qplatformwindow.cpp
+++ b/src/gui/kernel/qplatformwindow.cpp
@@ -188,6 +188,30 @@ bool QPlatformWindow::isEmbedded(const QPlatformWindow *parentWindow) const
}
/*!
+ Translates the window coordinate \a pos to global screen
+ coordinates using native methods. This is required for embedded windows,
+ where the topmost QWindow coordinates are not global screen coordinates.
+
+ Returns \a pos if there is no platform specific implementation.
+*/
+QPoint QPlatformWindow::mapToGlobal(const QPoint &pos) const
+{
+ return pos;
+}
+
+/*!
+ Translates the global screen coordinate \a pos to window
+ coordinates using native methods. This is required for embedded windows,
+ where the topmost QWindow coordinates are not global screen coordinates.
+
+ Returns \a pos if there is no platform specific implementation.
+*/
+QPoint QPlatformWindow::mapFromGlobal(const QPoint &pos) const
+{
+ return pos;
+}
+
+/*!
Requests setting the window state of this surface
to \a type. Returns the actual state set.
diff --git a/src/gui/kernel/qplatformwindow.h b/src/gui/kernel/qplatformwindow.h
index e27851830e..7d6bb80df1 100644
--- a/src/gui/kernel/qplatformwindow.h
+++ b/src/gui/kernel/qplatformwindow.h
@@ -104,6 +104,8 @@ public:
virtual bool isExposed() const;
virtual bool isActive() const;
virtual bool isEmbedded(const QPlatformWindow *parentWindow) const;
+ virtual QPoint mapToGlobal(const QPoint &pos) const;
+ virtual QPoint mapFromGlobal(const QPoint &pos) const;
virtual void propagateSizeHints();
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp
index 3b12768678..a2447e282a 100644
--- a/src/gui/kernel/qwindow.cpp
+++ b/src/gui/kernel/qwindow.cpp
@@ -1744,7 +1744,11 @@ bool QWindow::nativeEvent(const QByteArray &eventType, void *message, long *resu
*/
QPoint QWindow::mapToGlobal(const QPoint &pos) const
{
- return pos + d_func()->globalPosition();
+ Q_D(const QWindow);
+ if (d->platformWindow && d->platformWindow->isEmbedded(0))
+ return d->platformWindow->mapToGlobal(pos);
+ else
+ return pos + d_func()->globalPosition();
}
@@ -1758,7 +1762,11 @@ QPoint QWindow::mapToGlobal(const QPoint &pos) const
*/
QPoint QWindow::mapFromGlobal(const QPoint &pos) const
{
- return pos - d_func()->globalPosition();
+ Q_D(const QWindow);
+ if (d->platformWindow && d->platformWindow->isEmbedded(0))
+ return d->platformWindow->mapFromGlobal(pos);
+ else
+ return pos - d_func()->globalPosition();
}