summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2016-10-05 15:20:47 +0200
committerTor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>2016-10-05 19:35:06 +0000
commit087b11e881032bbd7bc1cbc06c45480c22ecb714 (patch)
treead7a3bf997521877ea957a980429306fc7e738ca /src/plugins/platforms/cocoa
parent12bc984f653a06fcc87d5d5615c976f6e3d1a080 (diff)
macOS: Rename m_contentView to m_view, to distinguish from [NSWindow contentView]
The contentView is the root view of a NSWindow, but our m_contentView is just the corresponding NSView of a QWindow, and doesn't always match the contentView property of the NSWindow. This is part of a multi part cleanup to the Cocoa platform plugin in preparation for improved foreign-window support. Change-Id: Ifaffb12f35544ec05e4a83964b346b47fa4b0576 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa')
-rw-r--r--src/plugins/platforms/cocoa/qcocoaglcontext.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoanativeinterface.mm4
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.h10
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm123
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm10
6 files changed, 76 insertions, 75 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.mm b/src/plugins/platforms/cocoa/qcocoaglcontext.mm
index ccb11f80f1..31b93be136 100644
--- a/src/plugins/platforms/cocoa/qcocoaglcontext.mm
+++ b/src/plugins/platforms/cocoa/qcocoaglcontext.mm
@@ -255,7 +255,7 @@ void QCocoaGLContext::setActiveWindow(QWindow *window)
QCocoaWindow *cocoaWindow = static_cast<QCocoaWindow *>(window->handle());
cocoaWindow->setCurrentContext(this);
- [(QNSView *) cocoaWindow->contentView() setQCocoaGLContext:this];
+ [(QNSView *) cocoaWindow->view() setQCocoaGLContext:this];
}
void QCocoaGLContext::updateSurfaceFormat()
diff --git a/src/plugins/platforms/cocoa/qcocoamenu.mm b/src/plugins/platforms/cocoa/qcocoamenu.mm
index 4260b17772..601ae6cbfa 100644
--- a/src/plugins/platforms/cocoa/qcocoamenu.mm
+++ b/src/plugins/platforms/cocoa/qcocoamenu.mm
@@ -495,7 +495,7 @@ void QCocoaMenu::showPopup(const QWindow *parentWindow, const QRect &targetRect,
QPoint pos = QPoint(targetRect.left(), targetRect.top() + targetRect.height());
QCocoaWindow *cocoaWindow = parentWindow ? static_cast<QCocoaWindow *>(parentWindow->handle()) : 0;
- NSView *view = cocoaWindow ? cocoaWindow->contentView() : nil;
+ NSView *view = cocoaWindow ? cocoaWindow->view() : nil;
NSMenuItem *nsItem = item ? ((QCocoaMenuItem *)item)->nsItem() : nil;
QScreen *screen = 0;
diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
index 3ff37a8463..71d0cccde1 100644
--- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
+++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
@@ -96,7 +96,7 @@ void *QCocoaNativeInterface::nativeResourceForWindow(const QByteArray &resourceS
return 0;
if (resourceString == "nsview") {
- return static_cast<QCocoaWindow *>(window->handle())->m_contentView;
+ return static_cast<QCocoaWindow *>(window->handle())->m_view;
#ifndef QT_NO_OPENGL
} else if (resourceString == "nsopenglcontext") {
return static_cast<QCocoaWindow *>(window->handle())->currentContext()->nsOpenGLContext();
@@ -281,7 +281,7 @@ QImage QCocoaNativeInterface::cgImageToQImage(CGImageRef image)
void QCocoaNativeInterface::setWindowContentView(QPlatformWindow *window, void *contentView)
{
QCocoaWindow *cocoaPlatformWindow = static_cast<QCocoaWindow *>(window);
- cocoaPlatformWindow->setContentView(reinterpret_cast<NSView *>(contentView));
+ cocoaPlatformWindow->setView(reinterpret_cast<NSView *>(contentView));
}
void QCocoaNativeInterface::setEmbeddedInForeignView(QPlatformWindow *window, bool embedded)
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h
index 7b3fec9534..f2792e2c39 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.h
+++ b/src/plugins/platforms/cocoa/qcocoawindow.h
@@ -182,8 +182,8 @@ public:
WId winId() const Q_DECL_OVERRIDE;
void setParent(const QPlatformWindow *window) Q_DECL_OVERRIDE;
- NSView *contentView() const;
- void setContentView(NSView *contentView);
+ NSView *view() const;
+ void setView(NSView *view);
QNSView *qtView() const;
NSWindow *nativeWindow() const;
@@ -260,14 +260,14 @@ public: // for QNSView
void removeMonitor();
- NSView *m_contentView;
+ NSView *m_view;
QNSView *m_qtView;
QCocoaNSWindow *m_nsWindow;
QPointer<QCocoaWindow> m_forwardWindow;
// TODO merge to one variable if possible
- bool m_contentViewIsEmbedded; // true if the m_contentView is actually embedded in a "foreign" NSView hiearchy
- bool m_contentViewIsToBeEmbedded; // true if the m_contentView is intended to be embedded in a "foreign" NSView hiearchy
+ bool m_viewIsEmbedded; // true if the m_view is actually embedded in a "foreign" NSView hiearchy
+ bool m_viewIsToBeEmbedded; // true if the m_view is intended to be embedded in a "foreign" NSView hiearchy
QCocoaWindow *m_parentCocoaWindow;
bool m_isNSWindowChild; // this window is a non-top level QWindow with a NSWindow.
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm
index 5cbaf74924..f5f6dd7f87 100644
--- a/src/plugins/platforms/cocoa/qcocoawindow.mm
+++ b/src/plugins/platforms/cocoa/qcocoawindow.mm
@@ -351,11 +351,11 @@ const int QCocoaWindow::NoAlertRequest = -1;
QCocoaWindow::QCocoaWindow(QWindow *tlw)
: QPlatformWindow(tlw)
- , m_contentView(nil)
+ , m_view(nil)
, m_qtView(nil)
, m_nsWindow(0)
- , m_contentViewIsEmbedded(false)
- , m_contentViewIsToBeEmbedded(false)
+ , m_viewIsEmbedded(false)
+ , m_viewIsToBeEmbedded(false)
, m_parentCocoaWindow(0)
, m_isNSWindowChild(false)
, m_effectivelyMaximized(false)
@@ -392,10 +392,10 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw)
if (tlw->type() == Qt::ForeignWindow) {
NSView *foreignView = (NSView *)WId(tlw->property("_q_foreignWinId").value<WId>());
- setContentView(foreignView);
+ setView(foreignView);
} else {
m_qtView = [[QNSView alloc] initWithQWindow:tlw platformWindow:this];
- m_contentView = m_qtView;
+ m_view = m_qtView;
// Enable high-dpi OpenGL for retina displays. Enabling has the side
// effect that Cocoa will start calling glViewport(0, 0, width, height),
// overriding any glViewport calls in application code. This is usually not a
@@ -404,11 +404,11 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw)
if (tlw->supportsOpenGL()) {
BOOL enable = qt_mac_resolveOption(YES, tlw, "_q_mac_wantsBestResolutionOpenGLSurface",
"QT_MAC_WANTS_BEST_RESOLUTION_OPENGL_SURFACE");
- [m_contentView setWantsBestResolutionOpenGLSurface:enable];
+ [m_view setWantsBestResolutionOpenGLSurface:enable];
}
BOOL enable = qt_mac_resolveOption(NO, tlw, "_q_mac_wantsLayer",
"QT_MAC_WANTS_LAYER");
- [m_contentView setWantsLayer:enable];
+ [m_view setWantsLayer:enable];
}
setGeometry(tlw->geometry());
recreateWindow(QPlatformWindow::parent());
@@ -429,8 +429,8 @@ QCocoaWindow::~QCocoaWindow()
if (m_isNSWindowChild) {
if (m_parentCocoaWindow)
m_parentCocoaWindow->removeChildWindow(this);
- } else if ([m_contentView superview]) {
- [m_contentView removeFromSuperview];
+ } else if ([m_view superview]) {
+ [m_view removeFromSuperview];
}
removeMonitor();
@@ -460,7 +460,7 @@ QCocoaWindow::~QCocoaWindow()
child->m_parentCocoaWindow = 0;
}
- [m_contentView release];
+ [m_view release];
[m_nsWindow release];
[m_windowCursor release];
}
@@ -501,12 +501,12 @@ 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];
- NSRect screenRect = [[m_contentView window] convertRectToScreen:NSMakeRect(windowPoint.x, windowPoint.y, 1, 1)];
+ if (m_viewIsEmbedded) {
+ NSPoint windowPoint = [m_view convertPoint:NSMakePoint(0, 0) toView:nil];
+ NSRect screenRect = [[m_view window] convertRectToScreen:NSMakeRect(windowPoint.x, windowPoint.y, 1, 1)];
NSPoint screenPoint = screenRect.origin;
QPoint position = qt_mac_flipPoint(screenPoint).toPoint();
- QSize size = QRectF::fromCGRect([m_contentView bounds]).toRect().size();
+ QSize size = QRectF::fromCGRect([m_view bounds]).toRect().size();
return QRect(position, size);
}
@@ -518,7 +518,7 @@ void QCocoaWindow::setCocoaGeometry(const QRect &rect)
qCDebug(lcQpaCocoaWindow) << "QCocoaWindow::setCocoaGeometry" << window() << rect;
QMacAutoReleasePool pool;
- if (m_contentViewIsEmbedded) {
+ if (m_viewIsEmbedded) {
if (m_qtView) {
[m_qtView setFrame:NSMakeRect(0, 0, rect.width(), rect.height())];
} else {
@@ -540,7 +540,7 @@ void QCocoaWindow::setCocoaGeometry(const QRect &rect)
NSRect bounds = qt_mac_flipRect(rect);
[m_nsWindow setFrame:[m_nsWindow frameRectForContentRect:bounds] display:YES animate:NO];
} else {
- [m_contentView setFrame : NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height())];
+ [m_view setFrame:NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height())];
}
if (!m_qtView)
@@ -568,7 +568,7 @@ void QCocoaWindow::clipWindow(const NSRect &clipRect)
// Clipping top/left offsets the content. Move it back.
NSPoint contentViewOffset = NSMakePoint(qMax(CGFloat(0), NSMinX(clippedWindowRect) - NSMinX(windowFrame)),
qMax(CGFloat(0), NSMaxY(windowFrame) - NSMaxY(clippedWindowRect)));
- [m_contentView setBoundsOrigin:contentViewOffset];
+ [m_view setBoundsOrigin:contentViewOffset];
}
if (NSIsEmptyRect(clippedWindowRect)) {
@@ -739,8 +739,8 @@ void QCocoaWindow::setVisible(bool visible)
// In some cases, e.g. QDockWidget, the content view is hidden before moving to its own
// Cocoa window, and then shown again. Therefore, we test for the view being hidden even
// if it's attached to an NSWindow.
- if ([m_contentView isHidden])
- [m_contentView setHidden:NO];
+ if ([m_view isHidden])
+ [m_view setHidden:NO];
} else {
// qDebug() << "close" << this;
#ifndef QT_NO_OPENGL
@@ -773,7 +773,7 @@ void QCocoaWindow::setVisible(bool visible)
[mainWindow makeKeyWindow];
}
} else {
- [m_contentView setHidden:YES];
+ [m_view setHidden:YES];
}
removeMonitor();
@@ -1163,7 +1163,7 @@ bool QCocoaWindow::setMouseGrabEnabled(bool grab)
WId QCocoaWindow::winId() const
{
- return WId(m_contentView);
+ return WId(m_view);
}
void QCocoaWindow::setParent(const QPlatformWindow *parentWindow)
@@ -1171,33 +1171,34 @@ void QCocoaWindow::setParent(const QPlatformWindow *parentWindow)
qCDebug(lcQpaCocoaWindow) << "QCocoaWindow::setParent" << window() << (parentWindow ? parentWindow->window() : 0);
// recreate the window for compatibility
- bool unhideAfterRecreate = parentWindow && !m_contentViewIsToBeEmbedded && ![m_contentView isHidden];
+ bool unhideAfterRecreate = parentWindow && !m_viewIsToBeEmbedded && ![m_view isHidden];
recreateWindow(parentWindow);
if (unhideAfterRecreate)
- [m_contentView setHidden:NO];
+ [m_view setHidden:NO];
setCocoaGeometry(geometry());
}
-NSView *QCocoaWindow::contentView() const
+NSView *QCocoaWindow::view() const
{
- return m_contentView;
+ return m_view;
}
-void QCocoaWindow::setContentView(NSView *contentView)
+// FIXME: Remove and replace with create() and destroy() on a QWindow level
+void QCocoaWindow::setView(NSView *view)
{
- // Remove and release the previous content view
+ // Remove and release the previous view
if (m_nsWindow)
[m_nsWindow setContentView:nil];
else
- [m_contentView removeFromSuperview];
+ [m_view removeFromSuperview];
- [m_contentView release];
+ [m_view release];
- // Insert and retain the new content view
- [contentView retain];
- m_contentView = contentView;
- m_qtView = 0; // The new content view is not a QNSView.
- recreateWindow(QPlatformWindow::parent()); // Adds the content view to parent NSView
+ // Insert and retain the new view
+ [view retain];
+ m_view = view;
+ m_qtView = 0; // The new view is not a QNSView.
+ recreateWindow(QPlatformWindow::parent()); // Adds the view to parent NSView
}
QNSView *QCocoaWindow::qtView() const
@@ -1212,7 +1213,7 @@ NSWindow *QCocoaWindow::nativeWindow() const
void QCocoaWindow::setEmbeddedInForeignView(bool embedded)
{
- m_contentViewIsToBeEmbedded = embedded;
+ m_viewIsToBeEmbedded = embedded;
// Release any previosly created NSWindow.
[m_nsWindow closeAndRelease];
m_nsWindow = 0;
@@ -1358,7 +1359,7 @@ void QCocoaWindow::recreateWindow(const QPlatformWindow *parentWindow)
setNSWindow(m_nsWindow);
}
- if (m_contentViewIsToBeEmbedded) {
+ if (m_viewIsToBeEmbedded) {
// An embedded window doesn't have its own NSWindow.
} else if (!parentWindow) {
// QPlatformWindow subclasses must sync up with QWindow on creation:
@@ -1388,18 +1389,18 @@ void QCocoaWindow::recreateWindow(const QPlatformWindow *parentWindow)
}
} else {
// Child windows have no NSWindow, link the NSViews instead.
- if ([m_contentView superview])
- [m_contentView removeFromSuperview];
+ if ([m_view superview])
+ [m_view removeFromSuperview];
- [m_parentCocoaWindow->m_contentView addSubview : m_contentView];
+ [m_parentCocoaWindow->m_view addSubview:m_view];
QRect rect = windowGeometry();
// Prevent setting a (0,0) window size; causes opengl context
// "Invalid Drawable" warnings.
if (rect.isNull())
rect.setSize(QSize(1, 1));
NSRect frame = NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height());
- [m_contentView setFrame:frame];
- [m_contentView setHidden: YES];
+ [m_view setFrame:frame];
+ [m_view setHidden:YES];
}
m_nsWindow.ignoresMouseEvents =
@@ -1430,9 +1431,9 @@ void QCocoaWindow::reinsertChildWindow(QCocoaWindow *child)
void QCocoaWindow::requestActivateWindow()
{
- NSWindow *window = [m_contentView window];
- [ window makeFirstResponder : m_contentView ];
- [ window makeKeyWindow ];
+ NSWindow *window = [m_view window];
+ [window makeFirstResponder:m_view];
+ [window makeKeyWindow];
}
bool QCocoaWindow::shouldUseNSPanel()
@@ -1517,14 +1518,14 @@ QCocoaNSWindow * QCocoaWindow::createNSWindow()
void QCocoaWindow::setNSWindow(QCocoaNSWindow *window)
{
- if (window.contentView != m_contentView) {
- [m_contentView setPostsFrameChangedNotifications: NO];
- [m_contentView retain];
- if (m_contentView.superview) // m_contentView comes from another NSWindow
- [m_contentView removeFromSuperview];
- [window setContentView:m_contentView];
- [m_contentView release];
- [m_contentView setPostsFrameChangedNotifications: YES];
+ if (window.contentView != m_view) {
+ [m_view setPostsFrameChangedNotifications:NO];
+ [m_view retain];
+ if (m_view.superview) // m_view comes from another NSWindow
+ [m_view removeFromSuperview];
+ [window setContentView:m_view];
+ [m_view release];
+ [m_view setPostsFrameChangedNotifications:YES];
}
}
@@ -1582,7 +1583,7 @@ void QCocoaWindow::syncWindowState(Qt::WindowState newState)
return;
// if content view width or height is 0 then the window animations will crash so
// do nothing except set the new state
- NSRect contentRect = [contentView() frame];
+ NSRect contentRect = m_view.frame;
if (contentRect.size.width <= 0 || contentRect.size.height <= 0) {
qWarning("invalid window content view size, check your window geometry");
m_synchedWindowState = newState;
@@ -1703,9 +1704,9 @@ void QCocoaWindow::registerTouch(bool enable)
{
m_registerTouchCount += enable ? 1 : -1;
if (enable && m_registerTouchCount == 1)
- [m_contentView setAcceptsTouchEvents:YES];
+ [m_view setAcceptsTouchEvents:YES];
else if (m_registerTouchCount == 0)
- [m_contentView setAcceptsTouchEvents:NO];
+ [m_view setAcceptsTouchEvents:NO];
}
void QCocoaWindow::setContentBorderThickness(int topThickness, int bottomThickness)
@@ -1805,7 +1806,7 @@ qreal QCocoaWindow::devicePixelRatio() const
// methods such as [NSWindow backingScaleFacor] might not give the correct
// result, for example if setWantsBestResolutionOpenGLSurface is not set or
// or ignored by the OpenGL driver.
- NSSize backingSize = [m_contentView convertSizeToBacking:NSMakeSize(1.0, 1.0)];
+ NSSize backingSize = [m_view convertSizeToBacking:NSMakeSize(1.0, 1.0)];
return backingSize.height;
}
@@ -1815,8 +1816,8 @@ bool QCocoaWindow::isWindowExposable()
{
QSize size = geometry().size();
bool validGeometry = (size.width() > 0 && size.height() > 0);
- bool validScreen = ([[m_contentView window] screen] != 0);
- bool nonHiddenSuperView = ![[m_contentView superview] isHidden];
+ bool validScreen = ([[m_view window] screen] != 0);
+ bool nonHiddenSuperView = ![[m_view superview] isHidden];
return (validGeometry && validScreen && nonHiddenSuperView);
}
@@ -1928,11 +1929,11 @@ QPoint QCocoaWindow::bottomLeftClippedByNSWindowOffsetStatic(QWindow *window)
QPoint QCocoaWindow::bottomLeftClippedByNSWindowOffset() const
{
- if (!m_contentView)
+ if (!m_view)
return QPoint();
- const NSPoint origin = [m_contentView isFlipped] ? NSMakePoint(0, [m_contentView frame].size.height)
+ const NSPoint origin = [m_view isFlipped] ? NSMakePoint(0, [m_view frame].size.height)
: NSMakePoint(0, 0);
- const NSRect visibleRect = [m_contentView visibleRect];
+ const NSRect visibleRect = [m_view visibleRect];
return QPoint(visibleRect.origin.x, -visibleRect.origin.y + (origin.y - visibleRect.size.height));
}
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index 8d3b970158..27f6cb2dbc 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -267,16 +267,16 @@ static bool _q_dontOverrideCtrlLMB = false;
- (void)viewDidMoveToSuperview
{
- if (!(m_platformWindow->m_contentViewIsToBeEmbedded))
+ if (!(m_platformWindow->m_viewIsToBeEmbedded))
return;
if ([self superview]) {
- m_platformWindow->m_contentViewIsEmbedded = true;
+ m_platformWindow->m_viewIsEmbedded = true;
QWindowSystemInterface::handleGeometryChange(m_window, m_platformWindow->geometry());
m_platformWindow->updateExposedGeometry();
QWindowSystemInterface::flushWindowSystemEvents();
} else {
- m_platformWindow->m_contentViewIsEmbedded = false;
+ m_platformWindow->m_viewIsEmbedded = false;
}
}
@@ -338,7 +338,7 @@ static bool _q_dontOverrideCtrlLMB = false;
NSRect rect = [self frame];
NSRect windowRect = [[self window] frame];
geometry = QRect(windowRect.origin.x, qt_mac_flipYCoordinate(windowRect.origin.y + rect.size.height), rect.size.width, rect.size.height);
- } else if (m_platformWindow->m_contentViewIsToBeEmbedded) {
+ } else if (m_platformWindow->m_viewIsToBeEmbedded) {
// embedded child window, use the frame rect ### merge with case below
geometry = QRectF::fromCGRect([self bounds]).toRect();
} else {
@@ -368,7 +368,7 @@ static bool _q_dontOverrideCtrlLMB = false;
// Don't send the geometry change if the QWindow is designated to be
// embedded in a foreign view hiearchy but has not actually been
// embedded yet - it's too early.
- if (m_platformWindow->m_contentViewIsToBeEmbedded && !m_platformWindow->m_contentViewIsEmbedded)
+ if (m_platformWindow->m_viewIsToBeEmbedded && !m_platformWindow->m_viewIsEmbedded)
return;
// Send a geometry change event to Qt, if it's ready to handle events