SineStriker
2025-05-19 ac1a62b2a76e4d15e412b9579b80da2dafbc6d6a
src/core/contexts/win32windowcontext.cpp
@@ -37,6 +37,14 @@
#  error Current Qt version has a critical bug which will break QWK functionality. Please upgrade to > 6.6.1 or downgrade to < 6.6.0
#endif
#ifndef DWM_BB_ENABLE
#  define DWM_BB_ENABLE 0x00000001
#endif
#ifndef ABM_GETAUTOHIDEBAREX
#  define ABM_GETAUTOHIDEBAREX 0x0000000b
#endif
namespace QWK {
    enum IconButtonClickLevelFlag {
@@ -920,13 +928,8 @@
        const DynamicApis &apis = DynamicApis::instance();
        const auto &extendMargins = [this, &apis, hwnd]() {
            // For some unknown reason, the window background is totally black when the host object
            // is a QWidget. And extending the window frame into the client area seems to fix it
            // magically.
            // We don't need the following *HACK* for QtQuick windows.
            if (!m_host->isWidgetType()) {
                return;
            }
            // For some unknown reason, the window background is totally black and extending
            // the window frame into the client area seems to fix it magically.
            // After many times of trying, we found that the Acrylic/Mica/Mica Alt background
            // only appears on the native Win32 window's background, so naturally we want to
            // extend the window frame into the whole client area to be able to let the special
@@ -955,6 +958,7 @@
        const auto &effectBugWorkaround = [this, hwnd]() {
            // We don't need the following *HACK* for QWidget windows.
            // Completely based on actual experiments, root reason is totally unknown.
            if (m_host->isWidgetType()) {
                return;
            }
@@ -1905,6 +1909,18 @@
                break;
            }
            case WM_SHOWWINDOW: {
                if (!wParam || !isWindowNoState(hWnd) || isFullScreen(hWnd)) {
                    break;
                }
                RECT windowRect{};
                ::GetWindowRect(hWnd, &windowRect);
                static constexpr const auto swpFlags = SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED | SWP_NOOWNERZORDER;
                ::SetWindowPos(hWnd, nullptr, 0, 0, RECT_WIDTH(windowRect) + 1, RECT_HEIGHT(windowRect) + 1, swpFlags);
                ::SetWindowPos(hWnd, nullptr, 0, 0, RECT_WIDTH(windowRect), RECT_HEIGHT(windowRect), swpFlags);
                break;
            }
            default:
                break;
        }
@@ -2325,7 +2341,7 @@
                if (!mouseHook) {
                    mouseHook = ::SetWindowsHookExW(
                        WH_MOUSE,
                        [](int nCode, WPARAM wParam, LPARAM lParam) {
                        [](int nCode, WPARAM wParam, LPARAM lParam) -> LRESULT {
                            if (nCode >= 0) {
                                switch (wParam) {
                                    case WM_LBUTTONDBLCLK: