From c1c99c3bfec512bf50164a6fc72e78fc684fcf5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 18 Oct 2016 16:02:05 +0200 Subject: macOS: Handle NSViewFrameDidChangeNotification via QCocaWindow There's no need to set postsFrameChangedNotifications = YES, it's already the default. Change-Id: I8c50dc119ba3779cdc6b3114d39c64f3cb236172 Reviewed-by: Erik Verbruggen --- src/plugins/platforms/cocoa/qcocoawindow.mm | 31 +++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'src/plugins/platforms/cocoa/qcocoawindow.mm') diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm index 9e5b52d1f7..524d3f0703 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.mm +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -362,15 +362,29 @@ static void qRegisterNotificationCallbacks() [center addObserverForName:notificationName.toNSString() object:nil queue:nil usingBlock:^(NSNotification *notification) { - NSWindow *window = notification.object; - - // Only top level NSWindows should notify their QNSViews - if (window.parentWindow) + NSView *view = nullptr; + if ([notification.object isKindOfClass:[NSWindow class]]) { + NSWindow *window = notification.object; + // Only top level NSWindows should notify their QNSViews + if (window.parentWindow) + return; + + if (!window.contentView) + return; + + view = window.contentView; + } else if ([notification.object isKindOfClass:[NSView class]]) { + view = notification.object; + } else { + qCWarning(lcQpaCocoaWindow) << "Unhandled notifcation" + << notification.name << "for" << notification.object; return; + } + Q_ASSERT(view); QCocoaWindow *cocoaWindow = nullptr; - if (QNSView *view = qnsview_cast(window.contentView)) - cocoaWindow = view.platformWindow; + if (QNSView *qnsView = qnsview_cast(view)) + cocoaWindow = qnsView.platformWindow; // FIXME: Could be a foreign window, look up by iterating top level QWindows @@ -1251,6 +1265,11 @@ void QCocoaWindow::windowDidResize() [qnsview_cast(m_view) updateGeometry]; } +void QCocoaWindow::viewDidChangeFrame() +{ + [qnsview_cast(m_view) updateGeometry]; +} + void QCocoaWindow::windowDidEndLiveResize() { if (m_synchedWindowState == Qt::WindowMaximized && ![m_nsWindow isZoomed]) { -- cgit v1.2.3