diff --git a/src/platformsupport/wayland/configure.cmake b/src/platformsupport/wayland/configure.cmake index eda1f085019..45f94533348 100644 --- a/src/platformsupport/wayland/configure.cmake +++ b/src/platformsupport/wayland/configure.cmake @@ -245,6 +245,11 @@ qt_feature("wayland-vulkan-server-buffer" PRIVATE qt_feature("wayland-datadevice" PRIVATE CONDITION QT_FEATURE_draganddrop OR QT_FEATURE_clipboard ) +qt_feature("wayland-decoration-adwaita" PRIVATE + LABEL "GNOME-like client-side decorations" + CONDITION NOT WIN32 AND QT_FEATURE_wayland_client AND TARGET Qt::DBus AND TARGET Qt::Svg +) + qt_configure_add_summary_entry(ARGS "wayland-client") qt_configure_add_summary_entry(ARGS "wayland-server") @@ -257,6 +262,9 @@ qt_configure_add_summary_entry(ARGS "wayland-dmabuf-server-buffer") qt_configure_add_summary_entry(ARGS "wayland-shm-emulation-server-buffer") qt_configure_add_summary_entry(ARGS "wayland-vulkan-server-buffer") qt_configure_end_summary_section() # end of "Qt Wayland Drivers" section +qt_configure_add_summary_section(NAME "Qt Wayland Decoration Plugins") +qt_configure_add_summary_entry(ARGS "wayland-decoration-adwaita") +qt_configure_end_summary_section() # end of "Qt Wayland Decoration Plugins" section qt_configure_add_report_entry( TYPE ERROR diff --git a/src/plugins/platforms/wayland/plugins/decorations/CMakeLists.txt b/src/plugins/platforms/wayland/plugins/decorations/CMakeLists.txt index 73c59e4a547..abe3c375b88 100644 --- a/src/plugins/platforms/wayland/plugins/decorations/CMakeLists.txt +++ b/src/plugins/platforms/wayland/plugins/decorations/CMakeLists.txt @@ -2,5 +2,8 @@ # SPDX-License-Identifier: BSD-3-Clause # Generated from decorations.pro. +if (QT_FEATURE_wayland_decoration_adwaita) + add_subdirectory(adwaita) +endif() add_subdirectory(bradient) diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp index 215193a7bf8..c0a415725e4 100644 --- a/src/plugins/platforms/wayland/qwaylandwindow.cpp +++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -36,6 +37,8 @@ QT_BEGIN_NAMESPACE +using namespace Qt::StringLiterals; + namespace QtWaylandClient { Q_LOGGING_CATEGORY(lcWaylandBackingstore, "qt.qpa.wayland.backingstore") @@ -1092,6 +1095,22 @@ bool QWaylandWindow::createDecoration() } } + if (targetKey.isEmpty()) { + auto unixServices = dynamic_cast( + QGuiApplicationPrivate::platformIntegration()->services()); + const QByteArray currentDesktop = unixServices->desktopEnvironment(); + if (currentDesktop == "GNOME") { + if (decorations.contains("adwaita"_L1)) + targetKey = "adwaita"_L1; + else if (decorations.contains("gnome"_L1)) + targetKey = "gnome"_L1; + } else { + // Do not use Adwaita/GNOME decorations on other DEs + decorations.removeAll("adwaita"_L1); + decorations.removeAll("gnome"_L1); + } + } + if (targetKey.isEmpty()) targetKey = decorations.first(); // first come, first served.