diff options
author | Richard Moe Gustavsen <richard.gustavsen@nokia.com> | 2010-05-28 10:45:30 (GMT) |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@nokia.com> | 2010-05-31 09:48:47 (GMT) |
commit | 5cdafc956f6f2e18012b31d68851150d89d7e577 (patch) | |
tree | cd4ac42787775b8d30a7e2008d55f95184851b5d /src/gui/kernel | |
parent | af1b64cec8ed74602fafadade936b1768daa9ff2 (diff) | |
download | Qt-5cdafc956f6f2e18012b31d68851150d89d7e577.zip Qt-5cdafc956f6f2e18012b31d68851150d89d7e577.tar.gz Qt-5cdafc956f6f2e18012b31d68851150d89d7e577.tar.bz2 |
Cocoa: remove 'double' content view from window
Up til now, we always used to create a new NSView for a top
level widget, and make it a child of the windows content view.
This is/should be unnecessary, as NSWindow has a method for
setting the content view directly, thereby allowing for reducing
the stacking level with one view. Not the biggest gain if the
year, but it seems effortless to implement. And I do it as
a part of Alien preparation.
Rev-By: msorvig
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qwidget_mac.mm | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index f12c956..40c5dad 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -237,6 +237,8 @@ static NSDrawer *qt_mac_drawer_for(const QWidget *widget) static void qt_mac_destructView(OSViewRef view) { #ifdef QT_MAC_USE_COCOA + if ([[view window] contentView] == view) + [[view window] setContentView:0]; [view removeFromSuperview]; [view release]; #else @@ -2285,28 +2287,23 @@ void QWidgetPrivate::finishCreateWindow_sys_Cocoa(void * /*NSWindow * */ voidWin Q_UNUSED(dialog); data.fstrut_dirty = true; // when we create a toplevel widget, the frame strut should be dirty + OSViewRef nsview = (OSViewRef)data.winid; - OSViewRef window_contentview = qt_mac_get_contentview_for(windowRef); if (!nsview) { - nsview = qt_mac_create_widget(q, this, window_contentview); + nsview = qt_mac_create_widget(q, this, 0); setWinId(WId(nsview)); - } else { - [window_contentview addSubview:nsview]; - } - if (nsview) { - NSRect bounds = [window_contentview bounds]; - [nsview setFrame:bounds]; - [nsview setHidden:NO]; - if (q->testAttribute(Qt::WA_DropSiteRegistered)) - registerDropSite(true); - transferChildren(); - - // Tell Cocoa explicit that we wan't the view to receive key events - // (regardless of focus policy) because this is how it works on other - // platforms (and in the carbon port): - if (!qApp->focusWidget()) - [windowRef makeFirstResponder:nsview]; } + [windowRef setContentView:nsview]; + [nsview setHidden:NO]; + if (q->testAttribute(Qt::WA_DropSiteRegistered)) + registerDropSite(true); + transferChildren(); + + // Tell Cocoa explicit that we wan't the view to receive key events + // (regardless of focus policy) because this is how it works on other + // platforms (and in the carbon port): + if (!qApp->focusWidget()) + [windowRef makeFirstResponder:nsview]; if (topExtra->posFromMove) { updateFrameStrut(); |