summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.h1
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm16
2 files changed, 17 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h
index 96df3f4c59..6e1f00eebe 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.h
+++ b/src/plugins/platforms/cocoa/qcocoawindow.h
@@ -142,6 +142,7 @@ public:
~QCocoaWindow();
void setGeometry(const QRect &rect);
+ QRect geometry() const;
void setCocoaGeometry(const QRect &rect);
void clipChildWindows();
void clipWindow(const NSRect &clipRect);
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index bbd5dd7311..c7fba4eef0 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -462,6 +462,22 @@ void QCocoaWindow::setGeometry(const QRect &rectIn)
setCocoaGeometry(rect);
}
+QRect QCocoaWindow::geometry() const
+{
+ // QWindows that are embedded in a NSView hiearchy may be considered
+ // top-level from Qt's point of view but are not from Cocoa's point
+ // of view. Embedded QWindows get global (screen) geometry.
+ if (m_contentViewIsEmbedded) {
+ NSPoint windowPoint = [m_contentView convertPoint:NSMakePoint(0, 0) toView:nil];
+ NSPoint screenPoint = [[m_contentView window] convertBaseToScreen:windowPoint]; // ### use convertRectToScreen after 10.6 removal
+ QPoint position = qt_mac_flipPoint(screenPoint).toPoint();
+ QSize size = qt_mac_toQRect([m_contentView bounds]).size();
+ return QRect(position, size);
+ }
+
+ return QPlatformWindow::geometry();
+}
+
void QCocoaWindow::setCocoaGeometry(const QRect &rect)
{
QCocoaAutoReleasePool pool;