From 01f3750efd70583288c48c440f96591c062ac2e4 Mon Sep 17 00:00:00 2001 From: Yuhang Zhao Date: Thu, 24 Aug 2023 13:10:11 +0800 Subject: [PATCH] win: minor tweaks --- examples/quick/qml/ApplicationWindow.qml | 2 +- examples/quick/qml/Window.qml | 2 +- examples/widget/widget.cpp | 2 +- .../Core/framelesshelper_windows.h | 324 ++++++++++++++++++ src/core/utils_win.cpp | 193 ++++++++--- src/widgets/standardtitlebar.cpp | 3 + 6 files changed, 468 insertions(+), 58 deletions(-) diff --git a/examples/quick/qml/ApplicationWindow.qml b/examples/quick/qml/ApplicationWindow.qml index e60c0d12..3009fa3f 100644 --- a/examples/quick/qml/ApplicationWindow.qml +++ b/examples/quick/qml/ApplicationWindow.qml @@ -81,7 +81,7 @@ FramelessApplicationWindow { } Timer { - interval: 500 + interval: 100 running: true repeat: true onTriggered: timeLabel.text = Qt.formatTime(new Date(), "hh:mm:ss") diff --git a/examples/quick/qml/Window.qml b/examples/quick/qml/Window.qml index 2de80872..558b1a3c 100644 --- a/examples/quick/qml/Window.qml +++ b/examples/quick/qml/Window.qml @@ -81,7 +81,7 @@ FramelessWindow { } Timer { - interval: 500 + interval: 100 running: true repeat: true onTriggered: timeLabel.text = Qt.formatTime(new Date(), "hh:mm:ss") diff --git a/examples/widget/widget.cpp b/examples/widget/widget.cpp index 07f1d879..c44b5116 100644 --- a/examples/widget/widget.cpp +++ b/examples/widget/widget.cpp @@ -54,7 +54,7 @@ FRAMELESSHELPER_STRING_CONSTANT(DevicePixelRatio) Widget::Widget(QWidget *parent) : FramelessWidget(parent) { initialize(); - startTimer(500); + startTimer(100); connect(FramelessManager::instance(), &FramelessManager::systemThemeChanged, this, &Widget::updateStyleSheet); } diff --git a/include/FramelessHelper/Core/framelesshelper_windows.h b/include/FramelessHelper/Core/framelesshelper_windows.h index 57c66a7f..2d41d31d 100644 --- a/include/FramelessHelper/Core/framelesshelper_windows.h +++ b/include/FramelessHelper/Core/framelesshelper_windows.h @@ -86,6 +86,130 @@ #include +#ifndef WM_SIZEWAIT +# define WM_SIZEWAIT (0x0004) +#endif + +#ifndef WM_SETVISIBLE +# define WM_SETVISIBLE (0x0009) +#endif + +#ifndef WM_SYSTEMERROR +# define WM_SYSTEMERROR (0x0017) +#endif + +#ifndef WM_CTLCOLOR +# define WM_CTLCOLOR (0x0019) +#endif + +#ifndef WM_LOGOFF +# define WM_LOGOFF (0x0025) +#endif + +#ifndef WM_ALTTABACTIVE +# define WM_ALTTABACTIVE (0x0029) +#endif + +#ifndef WM_SHELLNOTIFY +# define WM_SHELLNOTIFY (0x0034) +#endif + +#ifndef WM_ISACTIVEICON +# define WM_ISACTIVEICON (0x0035) +#endif + +#ifndef WM_QUERYPARKICON +# define WM_QUERYPARKICON (0x0036) +#endif + +#ifndef WM_WINHELP +# define WM_WINHELP (0x0038) +#endif + +#ifndef WM_FULLSCREEN +# define WM_FULLSCREEN (0x003A) +#endif + +#ifndef WM_CLIENTSHUTDOWN +# define WM_CLIENTSHUTDOWN (0x003B) +#endif + +#ifndef WM_DDEMLEVENT +# define WM_DDEMLEVENT (0x003C) +#endif + +#ifndef WM_TESTING +# define WM_TESTING (0x0040) +#endif + +#ifndef WM_OTHERWINDOWCREATED +# define WM_OTHERWINDOWCREATED (0x0042) +#endif + +#ifndef WM_OTHERWINDOWDESTROYED +# define WM_OTHERWINDOWDESTROYED (0x0043) +#endif + +#ifndef WM_COPYGLOBALDATA +# define WM_COPYGLOBALDATA (0x0049) +#endif + +#ifndef WM_KEYF1 +# define WM_KEYF1 (0x004D) +#endif + +#ifndef WM_ACCESS_WINDOW +# define WM_ACCESS_WINDOW (0x004F) +#endif + +#ifndef WM_FINALDESTROY +# define WM_FINALDESTROY (0x0070) +#endif + +#ifndef WM_MEASUREITEM_CLIENTDATA +# define WM_MEASUREITEM_CLIENTDATA (0x0071) +#endif + +#ifndef WM_SYNCTASK +# define WM_SYNCTASK (0x0089) +#endif + +#ifndef WM_KLUDGEMINRECT +# define WM_KLUDGEMINRECT (0x008B) +#endif + +#ifndef WM_LPKDRAWSWITCHWND +# define WM_LPKDRAWSWITCHWND (0x008C) +#endif + +#ifndef WM_UAHDESTROYWINDOW +# define WM_UAHDESTROYWINDOW (0x0090) +#endif + +#ifndef WM_UAHDRAWMENU +# define WM_UAHDRAWMENU (0x0091) +#endif + +#ifndef WM_UAHDRAWMENUITEM +# define WM_UAHDRAWMENUITEM (0x0092) +#endif + +#ifndef WM_UAHINITMENU +# define WM_UAHINITMENU (0x0093) +#endif + +#ifndef WM_UAHMEASUREMENUITEM +# define WM_UAHMEASUREMENUITEM (0x0094) +#endif + +#ifndef WM_UAHNCPAINTMENUPOPUP +# define WM_UAHNCPAINTMENUPOPUP (0x0095) +#endif + +#ifndef WM_UAHUPDATE +# define WM_UAHUPDATE (0x0096) +#endif + #ifndef WM_NCUAHDRAWCAPTION # define WM_NCUAHDRAWCAPTION (0x00AE) #endif @@ -94,6 +218,206 @@ # define WM_NCUAHDRAWFRAME (0x00AF) #endif +#ifndef WM_YOMICHAR +# define WM_YOMICHAR (0x0108) +#endif + +#ifndef WM_CONVERTREQUEST +# define WM_CONVERTREQUEST (0x010A) +#endif + +#ifndef WM_CONVERTRESULT +# define WM_CONVERTRESULT (0x010B) +#endif + +#ifndef WM_INTERIM +# define WM_INTERIM (0x010C) +#endif + +#ifndef WM_SYSTIMER +# define WM_SYSTIMER (0x0118) +#endif + +#ifndef WM_GESTUREINPUT +# define WM_GESTUREINPUT (0x011B) +#endif + +#ifndef WM_GESTURENOTIFIED +# define WM_GESTURENOTIFIED (0x011C) +#endif + +#ifndef WM_LBTRACKPOINT +# define WM_LBTRACKPOINT (0x0131) +#endif + +#ifndef WM_DROPOBJECT +# define WM_DROPOBJECT (0x022A) +#endif + +#ifndef WM_QUERYDROPOBJECT +# define WM_QUERYDROPOBJECT (0x022B) +#endif + +#ifndef WM_BEGINDRAG +# define WM_BEGINDRAG (0x022C) +#endif + +#ifndef WM_DRAGLOOP +# define WM_DRAGLOOP (0x022D) +#endif + +#ifndef WM_DRAGSELECT +# define WM_DRAGSELECT (0x022E) +#endif + +#ifndef WM_DRAGMOVE +# define WM_DRAGMOVE (0x022F) +#endif + +#ifndef WM_STOPINERTIA +# define WM_STOPINERTIA (0x023B) +#endif + +#ifndef WM_ENDINERTIA +# define WM_ENDINERTIA (0x023C) +#endif + +#ifndef WM_EDGYINERTIA +# define WM_EDGYINERTIA (0x023D) +#endif + +#ifndef WM_VISIBILITYCHANGED +# define WM_VISIBILITYCHANGED (0x0270) +#endif + +#ifndef WM_VIEWSTATECHANGED +# define WM_VIEWSTATECHANGED (0x0271) +#endif + +#ifndef WM_UNREGISTER_WINDOW_SERVICES +# define WM_UNREGISTER_WINDOW_SERVICES (0x0272) +#endif + +#ifndef WM_CONSOLIDATED +# define WM_CONSOLIDATED (0x0273) +#endif + +#ifndef WM_IME_REPORT +# define WM_IME_REPORT (0x0280) +#endif + +#ifndef WM_IME_SYSTEM +# define WM_IME_SYSTEM (0x0287) +#endif + +#ifndef WM_POINTERDEVICEADDED +# define WM_POINTERDEVICEADDED (0x02C8) +#endif + +#ifndef WM_POINTERDEVICEDELETED +# define WM_POINTERDEVICEDELETED (0x02C9) +#endif + +#ifndef WM_FLICK +# define WM_FLICK (0x02CB) +#endif + +#ifndef WM_FLICKINTERNAL +# define WM_FLICKINTERNAL (0x02CD) +#endif + +#ifndef WM_BRIGHTNESSCHANGED +# define WM_BRIGHTNESSCHANGED (0x02CE) +#endif + +#ifndef WM_SYSMENU +# define WM_SYSMENU (0x0313) +#endif + +#ifndef WM_HOOKMSG +# define WM_HOOKMSG (0x0314) +#endif + +#ifndef WM_EXITPROCESS +# define WM_EXITPROCESS (0x0315) +#endif + +#ifndef WM_WAKETHREAD +# define WM_WAKETHREAD (0x0316) +#endif + +#ifndef WM_UAHINIT +# define WM_UAHINIT (0x031B) +#endif + +#ifndef WM_DESKTOPNOTIFY +# define WM_DESKTOPNOTIFY (0x031C) +#endif + +#ifndef WM_DWMEXILEFRAME +# define WM_DWMEXILEFRAME (0x0322) +#endif + +#ifndef WM_MAGNIFICATION_STARTED +# define WM_MAGNIFICATION_STARTED (0x0324) +#endif + +#ifndef WM_MAGNIFICATION_ENDED +# define WM_MAGNIFICATION_ENDED (0x0325) +#endif + +#ifndef WM_DWMTHUMBNAILSIZECHANGED +# define WM_DWMTHUMBNAILSIZECHANGED (0x0327) +#endif + +#ifndef WM_MAGNIFICATION_OUTPUT +# define WM_MAGNIFICATION_OUTPUT (0x0328) +#endif + +#ifndef WM_BSDRDATA +# define WM_BSDRDATA (0x0329) +#endif + +#ifndef WM_DWMTRANSITIONSTATECHANGED +# define WM_DWMTRANSITIONSTATECHANGED (0x032A) +#endif + +#ifndef WM_KEYBOARDCORRECTIONCALLOUT +# define WM_KEYBOARDCORRECTIONCALLOUT (0x032C) +#endif + +#ifndef WM_KEYBOARDCORRECTIONACTION +# define WM_KEYBOARDCORRECTIONACTION (0x032D) +#endif + +#ifndef WM_UIACTION +# define WM_UIACTION (0x032E) +#endif + +#ifndef WM_ROUTED_UI_EVENT +# define WM_ROUTED_UI_EVENT (0x032F) +#endif + +#ifndef WM_MEASURECONTROL +# define WM_MEASURECONTROL (0x0330) +#endif + +#ifndef WM_GETACTIONTEXT +# define WM_GETACTIONTEXT (0x0331) +#endif + +#ifndef WM_FORWARDKEYDOWN +# define WM_FORWARDKEYDOWN (0x0333) +#endif + +#ifndef WM_FORWARDKEYUP +# define WM_FORWARDKEYUP (0x0334) +#endif + +#ifndef WM_NOTIFYWOW +# define WM_NOTIFYWOW (0x0340) +#endif + #ifndef WM_DWMCOMPOSITIONCHANGED # define WM_DWMCOMPOSITIONCHANGED (0x031E) #endif diff --git a/src/core/utils_win.cpp b/src/core/utils_win.cpp index 7404b41a..d057b3ea 100644 --- a/src/core/utils_win.cpp +++ b/src/core/utils_win.cpp @@ -242,7 +242,7 @@ struct Win32Message }; #define DEFINE_WIN32_MESSAGE(Message) Win32Message{ Message, #Message }, -static constexpr const std::array g_win32MessageMap = +static constexpr const std::array g_win32MessageMap = { DEFINE_WIN32_MESSAGE(WM_NULL) DEFINE_WIN32_MESSAGE(WM_CREATE) @@ -376,7 +376,6 @@ static constexpr const std::array g_win32MessageMap = DEFINE_WIN32_MESSAGE(WM_CTLCOLORDLG) DEFINE_WIN32_MESSAGE(WM_CTLCOLORSCROLLBAR) DEFINE_WIN32_MESSAGE(WM_CTLCOLORSTATIC) - DEFINE_WIN32_MESSAGE(MN_GETHMENU) DEFINE_WIN32_MESSAGE(WM_MOUSEMOVE) // WM_MOUSEFIRST DEFINE_WIN32_MESSAGE(WM_LBUTTONDOWN) DEFINE_WIN32_MESSAGE(WM_LBUTTONUP) @@ -433,7 +432,6 @@ static constexpr const std::array g_win32MessageMap = DEFINE_WIN32_MESSAGE(WM_TOUCHHITTESTING) DEFINE_WIN32_MESSAGE(WM_POINTERWHEEL) DEFINE_WIN32_MESSAGE(WM_POINTERHWHEEL) - DEFINE_WIN32_MESSAGE(DM_POINTERHITTEST) DEFINE_WIN32_MESSAGE(WM_POINTERROUTEDTO) DEFINE_WIN32_MESSAGE(WM_POINTERROUTEDAWAY) DEFINE_WIN32_MESSAGE(WM_POINTERROUTEDRELEASED) @@ -496,6 +494,90 @@ static constexpr const std::array g_win32MessageMap = DEFINE_WIN32_MESSAGE(WM_PENWINLAST) DEFINE_WIN32_MESSAGE(WM_APP) DEFINE_WIN32_MESSAGE(WM_USER) + // Undocumented messages: + DEFINE_WIN32_MESSAGE(WM_SIZEWAIT) + DEFINE_WIN32_MESSAGE(WM_SETVISIBLE) + DEFINE_WIN32_MESSAGE(WM_SYSTEMERROR) + DEFINE_WIN32_MESSAGE(WM_CTLCOLOR) + DEFINE_WIN32_MESSAGE(WM_LOGOFF) + DEFINE_WIN32_MESSAGE(WM_ALTTABACTIVE) + DEFINE_WIN32_MESSAGE(WM_SHELLNOTIFY) + DEFINE_WIN32_MESSAGE(WM_ISACTIVEICON) + DEFINE_WIN32_MESSAGE(WM_QUERYPARKICON) + DEFINE_WIN32_MESSAGE(WM_WINHELP) + DEFINE_WIN32_MESSAGE(WM_FULLSCREEN) + DEFINE_WIN32_MESSAGE(WM_CLIENTSHUTDOWN) + DEFINE_WIN32_MESSAGE(WM_DDEMLEVENT) + DEFINE_WIN32_MESSAGE(WM_TESTING) + DEFINE_WIN32_MESSAGE(WM_OTHERWINDOWCREATED) + DEFINE_WIN32_MESSAGE(WM_OTHERWINDOWDESTROYED) + DEFINE_WIN32_MESSAGE(WM_COPYGLOBALDATA) + DEFINE_WIN32_MESSAGE(WM_KEYF1) + DEFINE_WIN32_MESSAGE(WM_ACCESS_WINDOW) + DEFINE_WIN32_MESSAGE(WM_FINALDESTROY) + DEFINE_WIN32_MESSAGE(WM_MEASUREITEM_CLIENTDATA) + DEFINE_WIN32_MESSAGE(WM_SYNCTASK) + DEFINE_WIN32_MESSAGE(WM_KLUDGEMINRECT) + DEFINE_WIN32_MESSAGE(WM_LPKDRAWSWITCHWND) + DEFINE_WIN32_MESSAGE(WM_UAHDESTROYWINDOW) + DEFINE_WIN32_MESSAGE(WM_UAHDRAWMENU) + DEFINE_WIN32_MESSAGE(WM_UAHDRAWMENUITEM) + DEFINE_WIN32_MESSAGE(WM_UAHINITMENU) + DEFINE_WIN32_MESSAGE(WM_UAHMEASUREMENUITEM) + DEFINE_WIN32_MESSAGE(WM_UAHNCPAINTMENUPOPUP) + DEFINE_WIN32_MESSAGE(WM_UAHUPDATE) + DEFINE_WIN32_MESSAGE(WM_NCUAHDRAWCAPTION) + DEFINE_WIN32_MESSAGE(WM_NCUAHDRAWFRAME) + DEFINE_WIN32_MESSAGE(WM_YOMICHAR) + DEFINE_WIN32_MESSAGE(WM_CONVERTREQUEST) + DEFINE_WIN32_MESSAGE(WM_CONVERTRESULT) + DEFINE_WIN32_MESSAGE(WM_INTERIM) + DEFINE_WIN32_MESSAGE(WM_SYSTIMER) + DEFINE_WIN32_MESSAGE(WM_GESTUREINPUT) + DEFINE_WIN32_MESSAGE(WM_GESTURENOTIFIED) + DEFINE_WIN32_MESSAGE(WM_LBTRACKPOINT) + DEFINE_WIN32_MESSAGE(WM_DROPOBJECT) + DEFINE_WIN32_MESSAGE(WM_QUERYDROPOBJECT) + DEFINE_WIN32_MESSAGE(WM_BEGINDRAG) + DEFINE_WIN32_MESSAGE(WM_DRAGLOOP) + DEFINE_WIN32_MESSAGE(WM_DRAGSELECT) + DEFINE_WIN32_MESSAGE(WM_DRAGMOVE) + DEFINE_WIN32_MESSAGE(WM_STOPINERTIA) + DEFINE_WIN32_MESSAGE(WM_ENDINERTIA) + DEFINE_WIN32_MESSAGE(WM_EDGYINERTIA) + DEFINE_WIN32_MESSAGE(WM_VISIBILITYCHANGED) + DEFINE_WIN32_MESSAGE(WM_VIEWSTATECHANGED) + DEFINE_WIN32_MESSAGE(WM_UNREGISTER_WINDOW_SERVICES) + DEFINE_WIN32_MESSAGE(WM_CONSOLIDATED) + DEFINE_WIN32_MESSAGE(WM_IME_REPORT) + DEFINE_WIN32_MESSAGE(WM_IME_SYSTEM) + DEFINE_WIN32_MESSAGE(WM_POINTERDEVICEADDED) + DEFINE_WIN32_MESSAGE(WM_POINTERDEVICEDELETED) + DEFINE_WIN32_MESSAGE(WM_FLICK) + DEFINE_WIN32_MESSAGE(WM_FLICKINTERNAL) + DEFINE_WIN32_MESSAGE(WM_BRIGHTNESSCHANGED) + DEFINE_WIN32_MESSAGE(WM_SYSMENU) + DEFINE_WIN32_MESSAGE(WM_HOOKMSG) + DEFINE_WIN32_MESSAGE(WM_EXITPROCESS) + DEFINE_WIN32_MESSAGE(WM_WAKETHREAD) + DEFINE_WIN32_MESSAGE(WM_UAHINIT) + DEFINE_WIN32_MESSAGE(WM_DESKTOPNOTIFY) + DEFINE_WIN32_MESSAGE(WM_DWMEXILEFRAME) + DEFINE_WIN32_MESSAGE(WM_MAGNIFICATION_STARTED) + DEFINE_WIN32_MESSAGE(WM_MAGNIFICATION_ENDED) + DEFINE_WIN32_MESSAGE(WM_DWMTHUMBNAILSIZECHANGED) + DEFINE_WIN32_MESSAGE(WM_MAGNIFICATION_OUTPUT) + DEFINE_WIN32_MESSAGE(WM_BSDRDATA) + DEFINE_WIN32_MESSAGE(WM_DWMTRANSITIONSTATECHANGED) + DEFINE_WIN32_MESSAGE(WM_KEYBOARDCORRECTIONCALLOUT) + DEFINE_WIN32_MESSAGE(WM_KEYBOARDCORRECTIONACTION) + DEFINE_WIN32_MESSAGE(WM_UIACTION) + DEFINE_WIN32_MESSAGE(WM_ROUTED_UI_EVENT) + DEFINE_WIN32_MESSAGE(WM_MEASURECONTROL) + DEFINE_WIN32_MESSAGE(WM_GETACTIONTEXT) + DEFINE_WIN32_MESSAGE(WM_FORWARDKEYDOWN) + DEFINE_WIN32_MESSAGE(WM_FORWARDKEYUP) + DEFINE_WIN32_MESSAGE(WM_NOTIFYWOW) }; #undef DEFINE_WIN32_MESSAGE @@ -804,8 +886,7 @@ static constexpr const std::array g_win32MessageMap = { if (edges == Qt::Edges{}) { return 0; - } - if (edges == (Qt::LeftEdge)) { + } else if (edges == (Qt::LeftEdge)) { return 0xF001; // SC_SIZELEFT } else if (edges == (Qt::RightEdge)) { return 0xF002; // SC_SIZERIGHT @@ -840,22 +921,15 @@ static constexpr const std::array g_win32MessageMap = [[nodiscard]] static inline bool isNonClientMessage(const UINT message) { - if ((message >= WM_NCCREATE) && (message <= WM_NCACTIVATE)) { - return true; - } - if ((message >= WM_NCMOUSEMOVE) && (message <= WM_NCMBUTTONDBLCLK)) { - return true; - } - if ((message >= WM_NCXBUTTONDOWN) && (message <= WM_NCXBUTTONDBLCLK)) { - return true; - } - if ((message >= WM_NCPOINTERUPDATE) && (message <= WM_NCPOINTERUP)) { - return true; - } - if ((message == WM_NCMOUSEHOVER) || (message == WM_NCMOUSELEAVE)) { + if (((message >= WM_NCCREATE) && (message <= WM_NCACTIVATE)) + || ((message >= WM_NCMOUSEMOVE) && (message <= WM_NCMBUTTONDBLCLK)) + || ((message >= WM_NCXBUTTONDOWN) && (message <= WM_NCXBUTTONDBLCLK)) + || ((message >= WM_NCPOINTERUPDATE) && (message <= WM_NCPOINTERUP)) + || ((message == WM_NCMOUSEHOVER) || (message == WM_NCMOUSELEAVE))) { return true; + } else { + return false; } - return false; } [[nodiscard]] static inline bool isMouseMessage(const UINT message, bool *isNonClient = nullptr) @@ -866,16 +940,16 @@ static constexpr const std::array g_win32MessageMap = *isNonClient = false; } return true; - } - if (((message >= WM_NCMOUSEMOVE) && (message <= WM_NCMBUTTONDBLCLK)) + } else if (((message >= WM_NCMOUSEMOVE) && (message <= WM_NCMBUTTONDBLCLK)) || ((message >= WM_NCXBUTTONDOWN) && (message <= WM_NCXBUTTONDBLCLK)) || ((message == WM_NCMOUSEHOVER) || (message == WM_NCMOUSELEAVE))) { if (isNonClient) { *isNonClient = true; } return true; + } else { + return false; } - return false; } [[nodiscard]] static inline bool usePureQtImplementation() @@ -892,16 +966,32 @@ static constexpr const std::array g_win32MessageMap = return 0; } if (isWin32MessageDebuggingEnabled()) { - const auto it = std::find(g_win32MessageMap.cbegin(), g_win32MessageMap.cend(), Win32Message{ uMsg, nullptr }); - if (it != g_win32MessageMap.cend()) { - QString text = {}; - QTextStream stream(&text); - stream << "Win32 message received: " << it->Str << " (0x" - << QString::number(uMsg, 16).toUpper().rightJustified(4, u'0') << ')'; + const QString messageCodeHex = FRAMELESSHELPER_STRING_LITERAL("0x") + QString::number(uMsg, 16).toUpper().rightJustified(4, u'0'); + QString text = {}; + QTextStream stream(&text); + stream << "Win32 message received: "; + if (uMsg >= WM_APP) { + const UINT diff = (uMsg - WM_APP); + stream << "WM_APP + " << diff << " (" << messageCodeHex + << ") [private message owned by current application]"; + } else if (uMsg >= WM_USER) { + const UINT diff = (uMsg - WM_USER); + stream << "WM_USER + " << diff << " (" << messageCodeHex + << ") [private message owned by all kinds of controls]"; + } else { + const auto it = std::find(g_win32MessageMap.cbegin(), g_win32MessageMap.cend(), Win32Message{ uMsg, nullptr }); + if (it == g_win32MessageMap.cend()) { + stream << "UNKNOWN"; + } else { + stream << it->Str; + } + stream << " (" << messageCodeHex << ')'; + auto screenPos = POINT{ 0, 0 }; + auto clientPos = POINT{ 0, 0 }; bool isNonClientMouseMessage = false; if (isMouseMessage(uMsg, &isNonClientMouseMessage)) { if (isNonClientMouseMessage) { - const auto screenPos = [uMsg, lParam]() -> POINT { + screenPos = [uMsg, lParam]() -> POINT { if (uMsg == WM_NCMOUSELEAVE) { const DWORD dwScreenPos = ::GetMessagePos(); return POINT{ GET_X_LPARAM(dwScreenPos), GET_Y_LPARAM(dwScreenPos) }; @@ -909,42 +999,35 @@ static constexpr const std::array g_win32MessageMap = return POINT{ GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; } }(); - POINT clientPos = screenPos; + clientPos = screenPos; if (::ScreenToClient(hWnd, &clientPos) == FALSE) { WARNING << Utils::getSystemErrorMessage(kScreenToClient); clientPos = {}; } - stream << ", screen coordinate: POINT(x: " << screenPos.x << ", y: " - << screenPos.y << "), client coordinate: POINT(x: " - << clientPos.x << ", y: " << clientPos.y << ')'; } else { - const auto clientPos = [hWnd, uMsg, lParam]() -> POINT { - if (uMsg == WM_MOUSELEAVE) { - const DWORD dwScreenPos = ::GetMessagePos(); - const auto screenPos = POINT{ GET_X_LPARAM(dwScreenPos), GET_Y_LPARAM(dwScreenPos) }; - POINT clientPos = screenPos; - if (::ScreenToClient(hWnd, &clientPos) == FALSE) { - WARNING << Utils::getSystemErrorMessage(kScreenToClient); - return {}; - } else { - return clientPos; - } - } else { - return POINT{ GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; + if (uMsg == WM_MOUSELEAVE) { + const DWORD dwScreenPos = ::GetMessagePos(); + screenPos = POINT{ GET_X_LPARAM(dwScreenPos), GET_Y_LPARAM(dwScreenPos) }; + clientPos = screenPos; + if (::ScreenToClient(hWnd, &clientPos) == FALSE) { + WARNING << Utils::getSystemErrorMessage(kScreenToClient); + clientPos = {}; + } + } else { + clientPos = POINT{ GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; + screenPos = clientPos; + if (::ClientToScreen(hWnd, &screenPos) == FALSE) { + WARNING << Utils::getSystemErrorMessage(kClientToScreen); + screenPos = {}; } - }(); - POINT screenPos = clientPos; - if (::ClientToScreen(hWnd, &screenPos) == FALSE) { - WARNING << Utils::getSystemErrorMessage(kClientToScreen); - screenPos = {}; } - stream << ", screen coordinate: POINT(x: " << screenPos.x << ", y: " - << screenPos.y << "), client coordinate: POINT(x: " - << clientPos.x << ", y: " << clientPos.y << ')'; } + stream << ", screen coordinate: POINT(x: " << screenPos.x << ", y: " + << screenPos.y << "), client coordinate: POINT(x: " + << clientPos.x << ", y: " << clientPos.y << ')'; } - DEBUG.noquote() << text; } + DEBUG.noquote() << text; } const auto windowId = reinterpret_cast(hWnd); const auto it = g_win32UtilsData()->data.constFind(windowId); diff --git a/src/widgets/standardtitlebar.cpp b/src/widgets/standardtitlebar.cpp index 1c5a87ca..17222def 100644 --- a/src/widgets/standardtitlebar.cpp +++ b/src/widgets/standardtitlebar.cpp @@ -374,6 +374,9 @@ bool StandardTitleBarPrivate::mouseEventHandler(QMouseEvent *event) QRect StandardTitleBarPrivate::windowIconRect() const { Q_Q(const StandardTitleBar); + if (!windowIconVisible_real()) { + return {}; + } const QSize size = windowIconSize(); #ifdef Q_OS_MACOS const auto x = [this, q, &size]() -> int {