diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2017-08-17 10:32:50 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2017-08-18 12:40:01 +0000 |
commit | dfdb94410a3b77381f20e426a2420065be9631f9 (patch) | |
tree | 71b679d3ca79ca51e6646759b6111248b809c028 /src | |
parent | 3ce555a3de71725e83cd4e6cbd4da9ca1bc7ba20 (diff) |
Revert "macOS: Create NSView as initially hidden, to match QWindow behavior"
It seems to break the ability to grab an offscreen QQuickView.
That in turn breaks the tst_qquickimage::hugeImages autotest.
This reverts commit 096b56f336e5bb994d46f073d55496d36d38e6b1.
Task-number: QTBUG-62548
Change-Id: I11ce452341bfc2cc3cbc832b613c7366049b31d5
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 9 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 17 |
2 files changed, 9 insertions, 17 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index ac2c79b9ab..1d8d6dfc95 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -343,15 +343,8 @@ void QWindowPrivate::setVisible(bool visible) return; // We only need to create the window if it's being shown - 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. + if (visible) q->create(); - } } if (visible) { diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 6cdabf606b..e8550887cb 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -178,11 +178,6 @@ 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 @@ -348,10 +343,8 @@ 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); @@ -402,6 +395,11 @@ 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 @@ -437,7 +435,7 @@ void QCocoaWindow::setVisible(bool visible) [mainWindow makeKeyWindow]; } } else { - m_view.hidden = YES; + [m_view setHidden:YES]; } removeMonitor(); @@ -1246,6 +1244,7 @@ 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; |