| | |
| | | # 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 { |
| | |
| | | |
| | | 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 |
| | |
| | | |
| | | 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; |
| | | } |
| | |
| | | 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; |
| | | } |
| | |
| | | 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: |