diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2016-10-18 16:02:05 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2016-10-27 13:08:35 +0000 |
commit | c1c99c3bfec512bf50164a6fc72e78fc684fcf5b (patch) | |
tree | ffb4981ee714600ad16399a489119d8c5cff620e /src/plugins/platforms/cocoa/qcocoawindow.mm | |
parent | 7f507c16202003e834863b8f26213c5e1c06fd0e (diff) |
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 <erik.verbruggen@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoawindow.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.mm | 31 |
1 files changed, 25 insertions, 6 deletions
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]) { |