Sine Striker
2024-02-25 6f6f96909e7ded6ae3a4e59d9d4b62fa593abb23
src/widgets/widgetwindowagent_win.cpp
@@ -136,22 +136,31 @@
            Q_UNUSED(obj)
            auto window = widget->windowHandle();
            switch (event->type()) {
                case QEvent::Expose: {
                    // Qt will absolutely send a QExposeEvent or QResizeEvent to the QWindow when it
                    // receives a WM_PAINT message. When the control flow enters the expose handler,
                    // Qt must have already called BeginPaint() and it's the best time for us to
                    // draw the top border.
            // Qt will absolutely send a QExposeEvent or QResizeEvent to the QWindow when it
            // receives a WM_PAINT message. When the control flow enters the expose handler, Qt
            // must have already called BeginPaint() and it's the best time for us to draw the
            // top border.
            // Since a QExposeEvent will be sent immediately after the QResizeEvent, we can simply
            // ignore it.
            if (event->type() == QEvent::Expose) {
                auto ee = static_cast<QExposeEvent *>(event);
                if (window->isExposed() && isNormalWindow() && !ee->region().isNull()) {
                    resumeWindowEventAndDraw(window, event);
                    return true;
                    // Since a QExposeEvent will be sent immediately after the QResizeEvent, we can
                    // simply ignore it.
                    auto ee = static_cast<QExposeEvent *>(event);
                    if (window->isExposed() && isNormalWindow() && !ee->region().isNull()) {
                        resumeWindowEventAndDraw(window, event);
                        return true;
                    }
                    break;
                }
                case QEvent::WinIdChange: {
                    if (auto winId = ctx->windowId()) {
                        updateGeometry();
                    }
                    break;
                }
                default:
                    break;
            }
            return false;
        }