Windows QPA: Store requested geometry before QPlatformWindow::initialGeometry()
When requesting windows with a size of 0x0 for which a default size
is determined by QPlatformWindow::initialGeometry(),
QWindowsWindow::initialize() did not call handleGeometry() since
it compared against the requested geometry obtained after
calling QPlatformWindow::initialGeometry().
Store the initial geometry in the context.
Amends deb7f9a7c3
.
Task-number: QTBUG-62177
Task-number: QTBUG-61977
Change-Id: I9e96f2f0b984b9009bebb192f576c92b4409d5d1
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This commit is contained in:
parent
4bfff6a98b
commit
0257ffe465
@ -640,7 +640,7 @@ QWindowsWindowData
|
||||
|
||||
// Capture events before CreateWindowEx() returns. The context is cleared in
|
||||
// the QWindowsWindow constructor.
|
||||
const QWindowCreationContextPtr context(new QWindowCreationContext(w, rect, data.customMargins, style, exStyle));
|
||||
const QWindowCreationContextPtr context(new QWindowCreationContext(w, data.geometry, rect, data.customMargins, style, exStyle));
|
||||
QWindowsContext::instance()->setWindowCreationContext(context);
|
||||
|
||||
qCDebug(lcQpaWindows).nospace()
|
||||
@ -1004,10 +1004,11 @@ void QWindowsForeignWindow::setVisible(bool visible)
|
||||
*/
|
||||
|
||||
QWindowCreationContext::QWindowCreationContext(const QWindow *w,
|
||||
const QRect &geometry,
|
||||
const QRect &geometryIn, const QRect &geometry,
|
||||
const QMargins &cm,
|
||||
DWORD style_, DWORD exStyle_) :
|
||||
geometryHint(w, cm), window(w), style(style_), exStyle(exStyle_),
|
||||
requestedGeometryIn(geometryIn),
|
||||
requestedGeometry(geometry), obtainedGeometry(geometry),
|
||||
margins(QWindowsGeometryHint::frame(style, exStyle)), customMargins(cm)
|
||||
{
|
||||
@ -1122,7 +1123,7 @@ void QWindowsWindow::initialize()
|
||||
if (w->type() != Qt::Desktop) {
|
||||
const Qt::WindowState state = w->windowState();
|
||||
if (state != Qt::WindowMaximized && state != Qt::WindowFullScreen
|
||||
&& creationContext->requestedGeometry != creationContext->obtainedGeometry) {
|
||||
&& creationContext->requestedGeometryIn != creationContext->obtainedGeometry) {
|
||||
QWindowSystemInterface::handleGeometryChange(w, creationContext->obtainedGeometry);
|
||||
}
|
||||
QPlatformScreen *obtainedScreen = screenForGeometry(creationContext->obtainedGeometry);
|
||||
|
@ -81,9 +81,10 @@ struct QWindowsGeometryHint
|
||||
|
||||
struct QWindowCreationContext
|
||||
{
|
||||
QWindowCreationContext(const QWindow *w, const QRect &r,
|
||||
const QMargins &customMargins,
|
||||
DWORD style, DWORD exStyle);
|
||||
explicit QWindowCreationContext(const QWindow *w,
|
||||
const QRect &geometryIn, const QRect &geometry,
|
||||
const QMargins &customMargins,
|
||||
DWORD style, DWORD exStyle);
|
||||
void applyToMinMaxInfo(MINMAXINFO *mmi) const
|
||||
{ geometryHint.applyToMinMaxInfo(style, exStyle, mmi); }
|
||||
|
||||
@ -91,7 +92,8 @@ struct QWindowCreationContext
|
||||
const QWindow *window;
|
||||
DWORD style;
|
||||
DWORD exStyle;
|
||||
QRect requestedGeometry;
|
||||
QRect requestedGeometryIn; // QWindow scaled
|
||||
QRect requestedGeometry; // after QPlatformWindow::initialGeometry()
|
||||
QRect obtainedGeometry;
|
||||
QMargins margins;
|
||||
QMargins customMargins; // User-defined, additional frame for WM_NCCALCSIZE
|
||||
|
Loading…
Reference in New Issue
Block a user