diff options
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qplatformwindow.cpp | 24 | ||||
-rw-r--r-- | src/gui/kernel/qplatformwindow.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 12 |
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(); } |