From 488b326e0f90b3d0b6a628bab52b6670c63bc4d1 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Mon, 14 Feb 2022 22:49:37 +0100 Subject: [PATCH] globalshortcut-x11: Use XDefaultRootWindow with Qt >= 6.2 --- CMakeLists.txt | 16 ++++++++++------ src/globalshortcuts/globalshortcut-x11.cpp | 21 +++++++++------------ 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 55356914c..c72218547 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -373,13 +373,17 @@ optional_component(GLOBALSHORTCUTS ON "Global shortcuts" DEPENDS "D-Bus, X11, Windows or macOS" HAVE_GLOBALSHORTCUTS_SUPPORT ) -if(HAVE_X11EXTRAS OR HAVE_QPA_QPLATFORMNATIVEINTERFACE_H) - set(HAVE_X11EXTRAS_OR_QPA_QPLATFORMNATIVEINTERFACE_H ON) +if(BUILD_WITH_QT6 AND (Qt6Core_VERSION VERSION_EQUAL 6.2.0 OR Qt6Core_VERSION VERSION_GREATER 6.2.0)) + optional_component(X11_GLOBALSHORTCUTS ON "X11 global shortcuts" DEPENDS "X11" X11_FOUND) +else() + if(HAVE_X11EXTRAS OR HAVE_QPA_QPLATFORMNATIVEINTERFACE_H) + set(HAVE_X11EXTRAS_OR_QPA_QPLATFORMNATIVEINTERFACE_H ON) + endif() + optional_component(X11_GLOBALSHORTCUTS ON "X11 global shortcuts" + DEPENDS "X11" X11_FOUND + DEPENDS "Qt >= 6.2, X11Extras or qpa/qplatformnativeinterface.h header" HAVE_X11EXTRAS_OR_QPA_QPLATFORMNATIVEINTERFACE_H + ) endif() -optional_component(X11_GLOBALSHORTCUTS ON "X11 global shortcuts" - DEPENDS "X11" X11_FOUND - DEPENDS "X11Extras or qpa/qplatformnativeinterface.h header" HAVE_X11EXTRAS_OR_QPA_QPLATFORMNATIVEINTERFACE_H -) optional_component(AUDIOCD ON "Devices: Audio CD support" DEPENDS "libcdio" LIBCDIO_FOUND diff --git a/src/globalshortcuts/globalshortcut-x11.cpp b/src/globalshortcuts/globalshortcut-x11.cpp index 44d93a9a1..5ec70d40e 100644 --- a/src/globalshortcuts/globalshortcut-x11.cpp +++ b/src/globalshortcuts/globalshortcut-x11.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -37,14 +38,12 @@ #include #include -#include - +#if QT_VERSION < QT_VERSION_CHECK(6, 2, 0) #if defined(HAVE_X11EXTRAS) # include #elif defined(HAVE_QPA_QPLATFORMNATIVEINTERFACE_H) # include -#else -# error "Missing X11Extras or qpa/qplatformnativeinterface.h header." +#endif #endif const QVector GlobalShortcut::mask_modifiers_ = QVector() << 0 << Mod2Mask << LockMask << (Mod2Mask | LockMask); @@ -60,9 +59,7 @@ Display *X11Display() { if (QNativeInterface::QX11Application *x11_app = qApp->nativeInterface()) { return x11_app->display(); } - else { - return nullptr; - } + return nullptr; #elif defined(HAVE_X11EXTRAS) // Qt 5: Use X11Extras @@ -87,14 +84,14 @@ Display *X11Display() { quint32 AppRootWindow() { -#if 0 // 6.2: There currently isn't a way to access rootWindow through QX11Application. +#if QT_VERSION >= QT_VERSION_CHECK(6, 2, 0) // 6.2: Use the new native interface. if (QNativeInterface::QX11Application *x11_app = qApp->nativeInterface()) { - return static_cast(reinterpret_cast(x11_app->rootWindow())); - } - else { - return 0; + if (x11_app->display()) { + return XDefaultRootWindow(x11_app->display()); + } } + return 0; #elif defined(HAVE_X11EXTRAS) // Qt 5: Use X11Extras