diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b66e69594..4d1706385 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -68,6 +68,7 @@ jobs: hicolor-icon-theme qt6-core-devel qt6-gui-devel + qt6-gui-private-devel qt6-widgets-devel qt6-concurrent-devel qt6-network-devel @@ -464,7 +465,9 @@ jobs: libcdio-dev libmtp-dev libgpod-dev + libxkbcommon-dev qt6-base-dev + qt6-base-private-dev qt6-base-dev-tools qt6-tools-dev qt6-tools-dev-tools @@ -545,7 +548,9 @@ jobs: libcdio-dev libmtp-dev libgpod-dev + libxkbcommon-dev qt6-base-dev + qt6-base-private-dev qt6-base-dev-tools qt6-tools-dev qt6-tools-dev-tools diff --git a/CMakeLists.txt b/CMakeLists.txt index aae389dd7..1e23e7710 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -214,30 +214,23 @@ set(QT_VERSION_MAJOR 6) set(QT_MIN_VERSION 6.4.0) set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR}) set(QT_COMPONENTS Core Concurrent Gui Widgets Network Sql) -set(QT_OPTIONAL_COMPONENTS LinguistTools Test) +set(QT_OPTIONAL_COMPONENTS GuiPrivate LinguistTools Test) if(UNIX AND NOT APPLE) list(APPEND QT_OPTIONAL_COMPONENTS DBus) endif() +set(QT_NO_PRIVATE_MODULE_WARNING ON) find_package(Qt${QT_VERSION_MAJOR} ${QT_MIN_VERSION} COMPONENTS ${QT_COMPONENTS} REQUIRED OPTIONAL_COMPONENTS ${QT_OPTIONAL_COMPONENTS}) +if(TARGET "Qt${QT_VERSION_MAJOR}::GuiPrivate") + set(QT_GUI_PRIVATE_FOUND ON) +endif() + if(Qt${QT_VERSION_MAJOR}DBus_FOUND) set(DBUS_FOUND ON) endif() if(X11_FOUND) - - find_path(QPA_QPLATFORMNATIVEINTERFACE_H qpa/qplatformnativeinterface.h PATHS ${Qt${QT_VERSION_MAJOR}Gui_INCLUDE_DIRS} ${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) - if(NOT QPA_QPLATFORMNATIVEINTERFACE_H) - find_path(QPA_QPLATFORMNATIVEINTERFACE_H ${Qt${QT_VERSION_MAJOR}Gui_VERSION}/QtGui/qpa/qplatformnativeinterface.h PATHS ${Qt${QT_VERSION_MAJOR}Gui_INCLUDE_DIRS} ${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) - endif() - if(QPA_QPLATFORMNATIVEINTERFACE_H) - set(HAVE_QPA_QPLATFORMNATIVEINTERFACE_H ON) - message(STATUS "Have qpa/qplatformnativeinterface.h header.") - else() - message(STATUS "Missing qpa/qplatformnativeinterface.h header.") - endif() - # Check for QX11Application (Qt 6 compiled with XCB). set(CMAKE_REQUIRED_FLAGS "-std=c++17") set(CMAKE_REQUIRED_LIBRARIES Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui) @@ -252,7 +245,6 @@ if(X11_FOUND) ) unset(CMAKE_REQUIRED_FLAGS) unset(CMAKE_REQUIRED_LIBRARIES) - endif() # SingleApplication @@ -375,6 +367,10 @@ if(APPLE OR WIN32) ) endif() +optional_component(QPA_QPLATFORMNATIVEINTERFACE ON "QPA Platform interface" + DEPENDS "Qt Gui Private" QT_GUI_PRIVATE_FOUND +) + if(HAVE_SONGFINGERPRINTING OR HAVE_MUSICBRAINZ) set(HAVE_CHROMAPRINT ON) endif() @@ -1502,10 +1498,6 @@ if(SINGLEAPPLICATION_INCLUDE_DIRS) target_include_directories(strawberry_lib SYSTEM PUBLIC ${SINGLEAPPLICATION_INCLUDE_DIRS}) endif() -if(HAVE_QPA_QPLATFORMNATIVEINTERFACE_H) - target_include_directories(strawberry_lib SYSTEM PUBLIC ${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) -endif() - target_link_libraries(strawberry_lib PUBLIC ${CMAKE_THREAD_LIBS_INIT} $<$:${Backtrace_LIBRARIES}> @@ -1526,6 +1518,7 @@ target_link_libraries(strawberry_lib PUBLIC Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Sql $<$:Qt${QT_VERSION_MAJOR}::DBus> + $<$:Qt${QT_VERSION_MAJOR}::GuiPrivate> ICU::uc ICU::i18n $<$:ALSA::ALSA> diff --git a/debian/control b/debian/control index cc69f3037..4803805f3 100644 --- a/debian/control +++ b/debian/control @@ -15,7 +15,9 @@ Build-Depends: debhelper-compat (= 12), libpulse-dev, libtag1-dev, libicu-dev, + libxkbcommon-dev, qt6-base-dev, + qt6-base-private-dev, qt6-base-dev-tools, qt6-tools-dev, qt6-tools-dev-tools, diff --git a/src/config.h.in b/src/config.h.in index 492829e87..e703dbe46 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -41,8 +41,8 @@ #cmakedefine INSTALL_TRANSLATIONS #define TRANSLATIONS_DIR "${CMAKE_INSTALL_PREFIX}/share/strawberry/translations" +#cmakedefine HAVE_QPA_QPLATFORMNATIVEINTERFACE #cmakedefine HAVE_QX11APPLICATION -#cmakedefine HAVE_QPA_QPLATFORMNATIVEINTERFACE_H #cmakedefine ENABLE_WIN32_CONSOLE diff --git a/src/osd/osdpretty.cpp b/src/osd/osdpretty.cpp index a884d3e96..896b6fe9a 100644 --- a/src/osd/osdpretty.cpp +++ b/src/osd/osdpretty.cpp @@ -51,7 +51,7 @@ #include #include -#ifdef HAVE_QPA_QPLATFORMNATIVEINTERFACE_H +#ifdef HAVE_QPA_QPLATFORMNATIVEINTERFACE # include #endif @@ -214,8 +214,8 @@ void OSDPretty::ScreenRemoved(QScreen *screen) { bool OSDPretty::IsTransparencyAvailable() { -#ifdef HAVE_QPA_QPLATFORMNATIVEINTERFACE_H - if (qApp) { +#ifdef HAVE_QPA_QPLATFORMNATIVEINTERFACE + if (qApp && QGuiApplication::platformName() == "xcb"_L1) { QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); QScreen *screen = popup_screen_ == nullptr ? QGuiApplication::primaryScreen() : popup_screen_; if (native && screen) {