diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index b201f32..df756c6 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -588,6 +588,7 @@ QWindowsWindow::WindowData << context->frameWidth << 'x' << context->frameHeight << '+' << context->frameX << '+' << context->frameY << " custom margins: " << context->customMargins; + qDebug() << __FUNCTION__ << context->customMargins; result.hwnd = CreateWindowEx(exStyle, classNameUtf16, titleUtf16, style, @@ -727,7 +728,7 @@ bool QWindowsGeometryHint::handleCalculateSize(const QMargins &customMargins, co ncp->rgrc[0].right -= customMargins.right(); ncp->rgrc[0].bottom -= customMargins.bottom(); result = 0; - if (QWindowsContext::verboseWindows) + if (1 || QWindowsContext::verboseWindows) qDebug() << __FUNCTION__ << oldClientArea << '+' << customMargins << "-->" << ncp->rgrc[0] << ' ' << ncp->rgrc[1] << ' ' << ncp->rgrc[2] << ' ' << ncp->lppos->cx << ',' << ncp->lppos->cy; @@ -2235,6 +2236,7 @@ void QWindowsWindow::setWindowIcon(const QIcon &icon) void QWindowsWindow::setCustomMargins(const QMargins &newCustomMargins) { + qDebug() << __FUNCTION__ << newCustomMargins << "changed" << (newCustomMargins != m_data.customMargins); if (newCustomMargins != m_data.customMargins) { const QMargins oldCustomMargins = m_data.customMargins; m_data.customMargins = newCustomMargins; @@ -2244,7 +2246,7 @@ void QWindowsWindow::setCustomMargins(const QMargins &newCustomMargins) QRect newFrame = currentFrameGeometry.marginsRemoved(oldCustomMargins) + m_data.customMargins; newFrame.moveTo(topLeft); setFlag(FrameDirty); - if (QWindowsContext::verboseWindows) + if (1) qDebug() << __FUNCTION__ << oldCustomMargins << "->" << newCustomMargins << currentFrameGeometry << "->" << newFrame; SetWindowPos(m_data.hwnd, 0, newFrame.x(), newFrame.y(), newFrame.width(), newFrame.height(), SWP_NOZORDER | SWP_FRAMECHANGED); diff --git a/src/widgets/dialogs/qwizard_win.cpp b/src/widgets/dialogs/qwizard_win.cpp index 4ecf071..2d60bcd 100644 --- a/src/widgets/dialogs/qwizard_win.cpp +++ b/src/widgets/dialogs/qwizard_win.cpp @@ -278,10 +278,17 @@ QVistaHelper::~QVistaHelper() --instanceCount; } +static bool useCustomMargins() +{ + bool rc = QCoreApplication::arguments().contains(QStringLiteral("-cm")); + qDebug() << __FUNCTION__ << rc; + return rc; +} + void QVistaHelper::updateCustomMargins(bool vistaMargins) { - if (QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS8) - return; // Negative margins are not supported on Windows 8. + if (!useCustomMargins()) + return; if (QWindow *window = wizard->windowHandle()) { // Reduce top frame to zero since we paint it ourselves. const QMargins customMargins = vistaMargins ? @@ -290,6 +297,7 @@ void QVistaHelper::updateCustomMargins(bool vistaMargins) // The dynamic property takes effect when creating the platform window. window->setProperty("_q_windowsCustomMargins", customMarginsV); // If a platform window exists, change via native interface. + qDebug() << __FUNCTION__ << customMarginsV; if (QPlatformWindow *platformWindow = window->handle()) { QGuiApplication::platformNativeInterface()-> setWindowProperty(platformWindow, QStringLiteral("WindowsCustomMargins"), @@ -324,6 +332,17 @@ QVistaHelper::VistaState QVistaHelper::vistaState() return cachedVistaState; } +int QVistaHelper::titleBarSize() +{ + int r = frameSize() + captionSize(); + QStringList args = QCoreApplication::arguments(); + int idx = args.indexOf(QStringLiteral("-f")); + if (idx > 0) + r = args.at(idx + 1).toInt(); + qDebug() << __FUNCTION__ <= QSysInfo::WV_WINDOWS7 ? 4 : 6)); @@ -117,8 +117,8 @@ private: bool drawTitleText(QPainter *painter, const QString &text, const QRect &rect, HDC hdc); static bool drawBlackRect(const QRect &rect, HDC hdc); - static int frameSize() { return GetSystemMetrics(SM_CYSIZEFRAME); } - static int captionSize() { return GetSystemMetrics(SM_CYCAPTION); } + static int frameSize(); + static int captionSize(); static int backButtonSize() { return int(QStyleHelper::dpiScaled(30)); } static int iconSize() { return 16; } // Standard Aero