Prevent windows from jumping when changing geometry on OS X

We were setting the frame origin and content size as two separate steps.
The frame origin was asynchronous, while the content size was synchronous.
This resulted in the window visually jumping/moving, instead of applying
the new geometry in one single step.

We now set both in one go using setFrame, by manually calculating the
frameRectForContentRect. This makes the whole process asynchronous.

Task-number: QTBUG-31039
Change-Id: Iaba46106b9f200c707507f330fa801c99e2e7d89
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
bb10
Tor Arne Vestbø 2013-05-08 14:34:43 +02:00 committed by The Qt Project
parent 69c05bbef4
commit 3c69751ef2
1 changed files with 1 additions and 2 deletions

View File

@ -272,8 +272,7 @@ void QCocoaWindow::setCocoaGeometry(const QRect &rect)
if (m_nsWindow) {
NSRect bounds = qt_mac_flipRect(rect, window());
[m_nsWindow setContentSize : bounds.size];
[m_nsWindow setFrameOrigin : bounds.origin];
[m_nsWindow setFrame:[m_nsWindow frameRectForContentRect:bounds] display:YES animate:NO];
} else {
[m_contentView setFrame : NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height())];
}