From e6da80a440218b87e441c8a698014ef3962af98b Mon Sep 17 00:00:00 2001 From: everyx Date: Sun, 12 Oct 2025 22:03:20 +0800 Subject: [PATCH] Fix build with Qt >= 6.10 Qt 6.10 introduced changes to how private headers are handled and deprecated the setMouseCursor function. - Explicitly find GuiPrivate and WaylandClientPrivate packages with CMake to resolve linking errors. - Use applyCursor() instead of the deprecated setMouseCursor() for Qt versions 6.10 and newer. Fixes #87 --- CMakeLists.txt | 11 ++++++++++- src/qadwaitadecorations.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f50ebf7..d8b23d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,10 @@ include(FeatureSummary) if (USE_QT6) find_package(QT NAMES Qt6 COMPONENTS Core Gui Svg Wayland Widgets REQUIRED) + if (Qt6Gui_VERSION VERSION_GREATER_EQUAL "6.10.0") + find_package(Qt6GuiPrivate REQUIRED) + find_package(Qt6WaylandClientPrivate REQUIRED) + endif() else() find_package(QT NAMES Qt5 COMPONENTS Core Gui Svg Wayland Widgets REQUIRED) endif() @@ -35,6 +39,12 @@ find_package(Qt${QT_VERSION_MAJOR} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS WaylandClient Widgets ) +if (Qt6Gui_VERSION VERSION_GREATER_EQUAL "6.10.0") + find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS + GuiPrivate + WaylandClientPrivate + ) +endif() find_package(Qt${QT_VERSION_MAJOR}Gui ${QT_MIN_VERSION} CONFIG REQUIRED Private) if (NOT USE_QT6) @@ -68,4 +78,3 @@ endif() add_subdirectory(src) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) - diff --git a/src/qadwaitadecorations.cpp b/src/qadwaitadecorations.cpp index 4189fa3..6619e1e 100644 --- a/src/qadwaitadecorations.cpp +++ b/src/qadwaitadecorations.cpp @@ -798,19 +798,31 @@ void QAdwaitaDecorations::processMouseTop(QWaylandInputDevice *inputDevice, cons if (local.x() <= margins().left()) { // top left bit #if QT_CONFIG(cursor) +# if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + waylandWindow()->applyCursor(inputDevice, Qt::SizeFDiagCursor); +# else waylandWindow()->setMouseCursor(inputDevice, Qt::SizeFDiagCursor); +# endif #endif startResize(inputDevice, Qt::TopEdge | Qt::LeftEdge, b); } else if (local.x() > surfaceRect.right() - margins().left()) { // top right bit #if QT_CONFIG(cursor) +# if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + waylandWindow()->applyCursor(inputDevice, Qt::SizeBDiagCursor); +# else waylandWindow()->setMouseCursor(inputDevice, Qt::SizeBDiagCursor); +# endif #endif startResize(inputDevice, Qt::TopEdge | Qt::RightEdge, b); } else { // top resize bit #if QT_CONFIG(cursor) +# if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + waylandWindow()->applyCursor(inputDevice, Qt::SizeVerCursor); +# else waylandWindow()->setMouseCursor(inputDevice, Qt::SizeVerCursor); +# endif #endif startResize(inputDevice, Qt::TopEdge, b); } @@ -857,19 +869,31 @@ void QAdwaitaDecorations::processMouseBottom(QWaylandInputDevice *inputDevice, c if (local.x() <= margins().left()) { // bottom left bit #if QT_CONFIG(cursor) +# if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + waylandWindow()->applyCursor(inputDevice, Qt::SizeBDiagCursor); +# else waylandWindow()->setMouseCursor(inputDevice, Qt::SizeBDiagCursor); +# endif #endif startResize(inputDevice, Qt::BottomEdge | Qt::LeftEdge, b); } else if (local.x() > window()->width() + margins().right()) { // bottom right bit #if QT_CONFIG(cursor) +# if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + waylandWindow()->applyCursor(inputDevice, Qt::SizeFDiagCursor); +# else waylandWindow()->setMouseCursor(inputDevice, Qt::SizeFDiagCursor); +# endif #endif startResize(inputDevice, Qt::BottomEdge | Qt::RightEdge, b); } else { // bottom bit #if QT_CONFIG(cursor) +# if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + waylandWindow()->applyCursor(inputDevice, Qt::SizeVerCursor); +# else waylandWindow()->setMouseCursor(inputDevice, Qt::SizeVerCursor); +# endif #endif startResize(inputDevice, Qt::BottomEdge, b); } @@ -881,7 +905,11 @@ void QAdwaitaDecorations::processMouseLeft(QWaylandInputDevice *inputDevice, con Q_UNUSED(local) Q_UNUSED(mods) #if QT_CONFIG(cursor) +# if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + waylandWindow()->applyCursor(inputDevice, Qt::SizeHorCursor); +# else waylandWindow()->setMouseCursor(inputDevice, Qt::SizeHorCursor); +# endif #endif startResize(inputDevice, Qt::LeftEdge, b); } @@ -892,7 +920,11 @@ void QAdwaitaDecorations::processMouseRight(QWaylandInputDevice *inputDevice, co Q_UNUSED(local) Q_UNUSED(mods) #if QT_CONFIG(cursor) +# if QT_VERSION >= QT_VERSION_CHECK(6, 10, 0) + waylandWindow()->applyCursor(inputDevice, Qt::SizeHorCursor); +# else waylandWindow()->setMouseCursor(inputDevice, Qt::SizeHorCursor); +# endif #endif startResize(inputDevice, Qt::RightEdge, b); }