summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@digia.com>2013-05-07 13:56:48 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-05-08 09:48:05 +0200
commit7e7d40eeb77ee3b4029a8f90c14df6373f082692 (patch)
treececb1b496dac5c36eb001905f435878a22aaebcb
parentbdebec4e2ef79f1771d2dcc22f9a919eb4487567 (diff)
Cocoa: Add support for ForeignWindow window type
Necessary to make QWindow::fromWinId() work on Mac. Change-Id: I0dc3a1b0d63cff61d484693aee711dc54fea6b2f Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.mm1
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm11
2 files changed, 10 insertions, 2 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm
index 821e10de52..45038ee578 100644
--- a/src/plugins/platforms/cocoa/qcocoaintegration.mm
+++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm
@@ -352,6 +352,7 @@ bool QCocoaIntegration::hasCapability(QPlatformIntegration::Capability cap) cons
case BufferQueueingOpenGL:
case WindowMasks:
case MultipleWindows:
+ case ForeignWindows:
return true;
default:
return QPlatformIntegration::hasCapability(cap);
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index 8e9fcc443b..62c8d25695 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -192,6 +192,8 @@ const int QCocoaWindow::NoAlertRequest = -1;
QCocoaWindow::QCocoaWindow(QWindow *tlw)
: QPlatformWindow(tlw)
+ , m_contentView(nil)
+ , m_qtView(nil)
, m_nsWindow(0)
, m_contentViewIsEmbedded(false)
, m_contentViewIsToBeEmbedded(false)
@@ -212,8 +214,13 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw)
#endif
QCocoaAutoReleasePool pool;
- m_qtView = [[QNSView alloc] initWithQWindow:tlw platformWindow:this];
- m_contentView = m_qtView;
+ if (tlw->type() == Qt::ForeignWindow) {
+ NSView *foreignView = (NSView *)WId(tlw->property("_q_foreignWinId").value<WId>());
+ setContentView(foreignView);
+ } else {
+ m_qtView = [[QNSView alloc] initWithQWindow:tlw platformWindow:this];
+ m_contentView = m_qtView;
+ }
setGeometry(tlw->geometry());
recreateWindow(parent());
tlw->setGeometry(geometry());