macOS: Create NSView as initially hidden, to match QWindow behavior
Change-Id: I25af6635ea9b6aa3fcc642fa2da0553341aabda8 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This commit is contained in:
parent
255abc1e5a
commit
096b56f336
@ -343,8 +343,15 @@ void QWindowPrivate::setVisible(bool visible)
|
||||
return;
|
||||
|
||||
// We only need to create the window if it's being shown
|
||||
if (visible)
|
||||
if (visible) {
|
||||
// FIXME: At this point we've already updated the visible state of
|
||||
// the QWindow, so any platform pulling out the visible state during
|
||||
// creation to set on the native window will create a visible window,
|
||||
// which may result in resize and expose events before the show event
|
||||
// sent below. This code assumes that the platform will set the window
|
||||
// to be hidden, until receiving a setVisible call below.
|
||||
q->create();
|
||||
}
|
||||
}
|
||||
|
||||
if (visible) {
|
||||
|
@ -178,6 +178,11 @@ void QCocoaWindow::initialize()
|
||||
|
||||
if (!m_view) {
|
||||
m_view = [[QNSView alloc] initWithCocoaWindow:this];
|
||||
|
||||
// NSViews are visible by default, as opposed to QWindows which are not,
|
||||
// so make the view hidden until we receive an explicit setVisible.
|
||||
m_view.hidden = YES;
|
||||
|
||||
// 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
|
||||
@ -343,9 +348,11 @@ void QCocoaWindow::setVisible(bool visible)
|
||||
&& !(nativeParentWindow.styleMask & NSFullScreenWindowMask))
|
||||
nativeParentWindow.styleMask &= ~NSResizableWindowMask;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Make the NSView visible first, before showing the NSWindow (in case of top level windows)
|
||||
m_view.hidden = NO;
|
||||
|
||||
if (isContentView()) {
|
||||
QWindowSystemInterface::flushWindowSystemEvents(QEventLoop::ExcludeUserInputEvents);
|
||||
|
||||
@ -395,11 +402,6 @@ 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_view isHidden])
|
||||
[m_view setHidden:NO];
|
||||
} else {
|
||||
// qDebug() << "close" << this;
|
||||
#ifndef QT_NO_OPENGL
|
||||
@ -435,7 +437,7 @@ void QCocoaWindow::setVisible(bool visible)
|
||||
[mainWindow makeKeyWindow];
|
||||
}
|
||||
} else {
|
||||
[m_view setHidden:YES];
|
||||
m_view.hidden = YES;
|
||||
}
|
||||
removeMonitor();
|
||||
|
||||
@ -1235,7 +1237,6 @@ void QCocoaWindow::recreateWindowIfNeeded()
|
||||
rect.setSize(QSize(1, 1));
|
||||
NSRect frame = NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height());
|
||||
[m_view setFrame:frame];
|
||||
[m_view setHidden:!window()->isVisible()];
|
||||
}
|
||||
|
||||
const qreal opacity = qt_window_private(window())->opacity;
|
||||
|
Loading…
Reference in New Issue
Block a user