Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
5.4.2, 5.5.1, 5.6.0 Beta, 5.6.0
-
OS X Yosemite 10.10.3
Description
Overview
The fix for QTBUG-44313 introduced clearing QCocoaWindow::m_backingStore when QCocoaWindow::m_platformWindow->m_inSetGeometry is true. Leaving the backing store null causes a subsequent paint operation to abort, leaving the dialog momentarily undrawn (transparent).
Deeper Analysis
This line is causing the dialog to momentarily disappear from the screen:
[m_nsWindow setFrame:[m_nsWindow frameRectForContentRect:bounds] display:YES animate:NO];
That's happening because of this line deeper in the callstack:
if (m_backingStore.isNull() return;
Recommended Fix - DEPRECATED, SEE COMMENTS FOR REVISED FIX
I've applied this locally on top of Qt 5.4.2 with great success. Instead of clearing the backing store, do the following:
{ m_backingStore = QImage(geometry.size(), m_backingStore.format()); QEvent updateRequest(QEvent::UpdateRequest); QCoreApplication::sendEvent(m_window, &updateRequest); }
That creates a new backing store at the correct new size and then forces the widget to synchronously draw at that size to fill the new backing store with correct visuals.
Attachments
Issue Links
- is duplicated by
-
QTBUG-49828 Big flickering on frameless Window resizing (regression on OSX)
- Closed
- replaces
-
QTBUG-49828 Big flickering on frameless Window resizing (regression on OSX)
- Closed