Cocoa integration - do not report invalid coordinates
setStyleMask with NSBorderlessWindow will call (indirectly) windowDidResize (window.delegate's
method) and view's updateGeometry. At this point view.window can be nil (Cocoa
is re-parenting the content view (?). If this is the case, do not set
this updated geometry on a QWindow/platform window
(since window is nil, self.window.frame is returned as {{0, 0} {0, 0}} by Cocoa).
Found by tst_QWidget::setGeometry.
Change-Id: Ic3cc0d944b5a8a5095c7fd0fdf2df7c9ea602b2a
Reviewed-by: Morten Johan Sørvig <morten.sorvig@theqtcompany.com>
bb10
parent
74117b5100
commit
653bdcca8e
|
|
@ -269,6 +269,7 @@ public: // for QNSView
|
|||
bool m_inConstructor;
|
||||
bool m_inSetVisible;
|
||||
bool m_inSetGeometry;
|
||||
bool m_inSetStyleMask;
|
||||
#ifndef QT_NO_OPENGL
|
||||
QCocoaGLContext *m_glContext;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -374,6 +374,7 @@ QCocoaWindow::QCocoaWindow(QWindow *tlw)
|
|||
, m_inConstructor(true)
|
||||
, m_inSetVisible(false)
|
||||
, m_inSetGeometry(false)
|
||||
, m_inSetStyleMask(false)
|
||||
#ifndef QT_NO_OPENGL
|
||||
, m_glContext(0)
|
||||
#endif
|
||||
|
|
@ -869,7 +870,11 @@ void QCocoaWindow::setWindowFlags(Qt::WindowFlags flags)
|
|||
if (m_nsWindow && !m_isNSWindowChild) {
|
||||
NSUInteger styleMask = windowStyleMask(flags);
|
||||
NSInteger level = this->windowLevel(flags);
|
||||
// While setting style mask we can have -updateGeometry calls on a content
|
||||
// view with null geometry, reporting an invalid coordinates as a result.
|
||||
m_inSetStyleMask = true;
|
||||
[m_nsWindow setStyleMask:styleMask];
|
||||
m_inSetStyleMask = false;
|
||||
[m_nsWindow setLevel:level];
|
||||
setWindowShadow(flags);
|
||||
if (!(styleMask & NSBorderlessWindowMask)) {
|
||||
|
|
|
|||
|
|
@ -345,6 +345,12 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
|
|||
if (m_platformWindow->m_nsWindow && geometry == m_platformWindow->geometry())
|
||||
return;
|
||||
|
||||
// It can happen that self.window is nil (if we are changing
|
||||
// styleMask from/to borderless and content view is being re-parented)
|
||||
// - this results in an invalid coordinates.
|
||||
if (m_platformWindow->m_inSetStyleMask && !self.window)
|
||||
return;
|
||||
|
||||
#ifdef QT_COCOA_ENABLE_WINDOW_DEBUG
|
||||
qDebug() << "QNSView::udpateGeometry" << m_platformWindow << geometry;
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue