From f68665298b9a310460a1b449520a39e80cfd4b7a Mon Sep 17 00:00:00 2001 From: Yuhang Zhao <2546789017@qq.com> Date: Mon, 14 Mar 2022 20:59:38 +0800 Subject: [PATCH] wip Signed-off-by: Yuhang Zhao <2546789017@qq.com> --- examples/example.manifest | 4 ++-- framelesshelper.cpp | 3 +++ framelesshelper_win32.cpp | 4 ++++ utilities.cpp | 14 ++++++++++++++ utilities.h | 1 + 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/examples/example.manifest b/examples/example.manifest index b2991af..54b7d3f 100644 --- a/examples/example.manifest +++ b/examples/example.manifest @@ -27,8 +27,8 @@ - True/PM - PerMonitorV2, PerMonitor + True/PM, True + PerMonitorV2, PerMonitor, System diff --git a/framelesshelper.cpp b/framelesshelper.cpp index cf4a8bb..687049c 100644 --- a/framelesshelper.cpp +++ b/framelesshelper.cpp @@ -70,6 +70,9 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event) return false; } const auto window = qobject_cast(object); + if (Utilities::isWindowFixedSize(window)) { + return false; + } const auto mouseEvent = static_cast(event); #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) const QPointF localPos = mouseEvent->position(); diff --git a/framelesshelper_win32.cpp b/framelesshelper_win32.cpp index ab4448d..b47bea3 100644 --- a/framelesshelper_win32.cpp +++ b/framelesshelper_win32.cpp @@ -584,6 +584,10 @@ bool FramelessHelperWin::nativeEventFilter(const QByteArray &eventType, void *me // another branch, if you are interested in it, you can give it a // try. + if (Utilities::isWindowFixedSize(window)) { + *result = HTCLIENT; + return true; + } const POINT globalPos = {GET_X_LPARAM(msg->lParam), GET_Y_LPARAM(msg->lParam)}; POINT localPos = globalPos; if (ScreenToClient(msg->hwnd, &localPos) == FALSE) { diff --git a/utilities.cpp b/utilities.cpp index 790712c..76ccace 100644 --- a/utilities.cpp +++ b/utilities.cpp @@ -79,4 +79,18 @@ Qt::Edges Utilities::calculateWindowEdges(const QWindow *window, const QPointF & return edges; } +bool Utilities::isWindowFixedSize(const QWindow *window) +{ + Q_ASSERT(window); + if (!window) { + return false; + } + if (window->flags() & Qt::MSWindowsFixedSizeDialogHint) { + return true; + } + const QSize minSize = window->minimumSize(); + const QSize maxSize = window->maximumSize(); + return (!minSize.isEmpty() && !maxSize.isEmpty() && (minSize == maxSize)); +} + FRAMELESSHELPER_END_NAMESPACE diff --git a/utilities.h b/utilities.h index 6f2400f..86d3bda 100644 --- a/utilities.h +++ b/utilities.h @@ -36,6 +36,7 @@ namespace Utilities [[nodiscard]] FRAMELESSHELPER_API Qt::Edges calculateWindowEdges(const QWindow *window, const QPointF &pos); FRAMELESSHELPER_API void startSystemMove(QWindow *window); FRAMELESSHELPER_API void startSystemResize(QWindow *window, const Qt::Edges edges); +[[nodiscard]] FRAMELESSHELPER_API bool isWindowFixedSize(const QWindow *window); #ifdef Q_OS_WINDOWS [[nodiscard]] FRAMELESSHELPER_API bool isWin8OrGreater();