QOffscreenSurface: Suppress setting of a default geometry on the window
When investigating the bug report, it was discovered that the offscreen window is assigned a default geometry by QPlatformWindow::initialGeometry(), causing subsequent resize events and flushing of event queues. Suppress that by making it a popup which is not subject to window title bar restrictions on Windows and setting the respective flags. Task-number: QTBUG-74176 Change-Id: I7f9c1a3bfd57072c8188a98124bde87491dd25eb Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>bb10
parent
e1167ed650
commit
10327549cb
|
|
@ -46,6 +46,8 @@
|
|||
#include "qwindow.h"
|
||||
#include "qplatformwindow.h"
|
||||
|
||||
#include <private/qwindow_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
/*!
|
||||
|
|
@ -199,12 +201,18 @@ void QOffscreenSurface::create()
|
|||
if (QThread::currentThread() != qGuiApp->thread())
|
||||
qWarning("Attempting to create QWindow-based QOffscreenSurface outside the gui thread. Expect failures.");
|
||||
d->offscreenWindow = new QWindow(d->screen);
|
||||
// Make the window frameless to prevent Windows from enlarging it, should it
|
||||
// violate the minimum title bar width on the platform.
|
||||
d->offscreenWindow->setFlags(d->offscreenWindow->flags()
|
||||
| Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
|
||||
d->offscreenWindow->setObjectName(QLatin1String("QOffscreenSurface"));
|
||||
// Remove this window from the global list since we do not want it to be destroyed when closing the app.
|
||||
// The QOffscreenSurface has to be usable even after exiting the event loop.
|
||||
QGuiApplicationPrivate::window_list.removeOne(d->offscreenWindow);
|
||||
d->offscreenWindow->setSurfaceType(QWindow::OpenGLSurface);
|
||||
d->offscreenWindow->setFormat(d->requestedFormat);
|
||||
// Prevent QPlatformWindow::initialGeometry() and platforms from setting a default geometry.
|
||||
qt_window_private(d->offscreenWindow)->setAutomaticPositionAndResizeEnabled(false);
|
||||
d->offscreenWindow->setGeometry(0, 0, d->size.width(), d->size.height());
|
||||
d->offscreenWindow->create();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue