diff --git a/CMakeLists.txt b/CMakeLists.txt index 462ef9a..ba2ba1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,14 +4,14 @@ cmake_minimum_required(VERSION 3.16) project(layershellqt) -set(PROJECT_VERSION "6.0.80") +set(PROJECT_VERSION "5.90.90") set(PROJECT_VERSION_MAJOR 6) set(CMAKE_C_STANDARD 99) -set(QT_MIN_VERSION "6.6.0") -#set(KF6_MIN_VERSION "5.240.0") -#set(KDE_COMPILERSETTINGS_LEVEL "5.82") +set(QT_MIN_VERSION "6.5.0") +set(KF6_MIN_VERSION "5.240.0") +set(KDE_COMPILERSETTINGS_LEVEL "5.82") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -26,11 +26,10 @@ include(ECMSetupVersion) include(ECMDeprecationSettings) include(ECMGenerateHeaders) include(CMakePackageConfigHelpers) -#include(FeatureSummary) +include(FeatureSummary) include(GenerateExportHeader) -#include(KDEClangFormat) +include(KDEClangFormat) include(ECMQtDeclareLoggingCategory) -include(ECMQmlModule) find_package(Qt6 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS WaylandClient Qml) @@ -45,22 +44,20 @@ set_package_properties(Wayland PROPERTIES TYPE REQUIRED) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu90") -set(CMAKE_AUTOMOC ON) - ecm_setup_version(${PROJECT_VERSION} VARIABLE_PREFIX LAYERSHELLQT VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/layershellqt_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/LayerShellQtConfigVersion.cmake" SOVERSION ${PROJECT_VERSION_MAJOR}) file(GLOB_RECURSE ALL_CLANG_FORMAT_SOURCE_FILES *.cpp *.h) -#kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) +kde_clang_format(${ALL_CLANG_FORMAT_SOURCE_FILES}) ecm_set_disabled_deprecation_versions(QT 6.5 KF 5.240 ) add_subdirectory(src) -#add_subdirectory(tests) +add_subdirectory(tests) set(CMAKECONFIG_INSTALL_DIR ${KDE_INSTALL_CMAKEPACKAGEDIR}/LayerShellQt) install(EXPORT LayerShellQtTargets diff --git a/README.md b/README.md index 50dc5a2..4e5367e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -Forked to reduce kde deps / build for qt6 as its not stable in nixpkgs, really only minor cmake patches - # LayerShellQt This component is meant for applications to be able to easily use clients based on wlr-layer-shell. diff --git a/default.nix b/default.nix deleted file mode 100644 index b6093a9..0000000 --- a/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ stdenv, cmake, qt6, wayland, wayland-scanner, wayland-protocols, pkg-config, libsForQt5 }: stdenv.mkDerivation { - pname = "layer-shell-qt-nokde"; - version = "6.0.80"; - - src = ./.; - - nativeBuildInputs = [ - cmake - pkg-config - wayland-scanner - libsForQt5.extra-cmake-modules - ]; - - dontWrapQtApps = true; - - buildInputs = [ - qt6.qtbase - qt6.qtdeclarative - qt6.qtwayland - wayland - wayland-protocols - ]; -} diff --git a/shell.nix b/shell.nix deleted file mode 100644 index f4c3863..0000000 --- a/shell.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ pkgs ? import {} }: pkgs.mkShell { - nativeBuildInputs = with pkgs; [ - cmake - wayland-scanner - libsForQt5.extra-cmake-modules - - clang-tools_17 - ]; - - buildInputs = with pkgs; [ - qt6.qtbase - qt6.qtdeclarative - qt6.qtwayland - wayland - wayland-protocols - ]; - - shellHook = '' - export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) - - # Add Qt-related environment variables. - # https://discourse.nixos.org/t/qt-development-environment-on-a-flake-system/23707/5 - setQtEnvironment=$(mktemp) - random=$(openssl rand -base64 20 | sed "s/[^a-zA-Z0-9]//g") - makeWrapper "$(type -p sh)" "$setQtEnvironment" "''${qtWrapperArgs[@]}" --argv0 "$random" - sed "/$random/d" -i "$setQtEnvironment" - source "$setQtEnvironment" - - # qmlls does not account for the import path and bases its search off qtbase's path. - # The actual imports come from qtdeclarative. This directs qmlls to the correct imports. - export QMLLS_BUILD_DIRS=$(pwd)/build:$QML2_IMPORT_PATH - ''; -} diff --git a/src/declarative/CMakeLists.txt b/src/declarative/CMakeLists.txt index 1bf3a99..f9ea9fe 100644 --- a/src/declarative/CMakeLists.txt +++ b/src/declarative/CMakeLists.txt @@ -1,12 +1,9 @@ # SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez # SPDX-License-Identifier: BSD-3-Clause -set(BUILD_SHARED_LIBS OFF) - -ecm_add_qml_module(LayerShellQtQml +qt_add_qml_module(LayerShellQtQml URI "org.kde.layershell" VERSION 1.0 SOURCES layershellqtplugin.cpp) target_link_libraries(LayerShellQtQml PRIVATE Qt::Qml LayerShellQtInterface) -ecm_finalize_qml_module(LayerShellQtQml DESTINATION ${KDE_INSTALL_QMLDIR}) diff --git a/src/interfaces/window.cpp b/src/interfaces/window.cpp index 5dbd8cc..4f56bfc 100644 --- a/src/interfaces/window.cpp +++ b/src/interfaces/window.cpp @@ -6,6 +6,9 @@ #include "window.h" #include "../qwaylandlayershellintegration_p.h" +#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0) +#include "../qwaylandlayersurface_p.h" +#endif #include @@ -138,6 +141,21 @@ void Window::setCloseOnDismissed(bool close) d->closeOnDismissed = close; } +#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0) +void Window::attachPopup(QWindow *window, xdg_popup *popup) +{ + auto waylandWindow = dynamic_cast(window->handle()); + if (!waylandWindow) { + return; + } + + auto shellSurface = dynamic_cast(waylandWindow->shellSurface()); + if (shellSurface) { + shellSurface->get_popup(popup); + } +} +#endif + Window::Window(QWindow *window) : QObject(window) , d(new WindowPrivate(window)) diff --git a/src/interfaces/window.h b/src/interfaces/window.h index 8a5bf95..3f3ae80 100644 --- a/src/interfaces/window.h +++ b/src/interfaces/window.h @@ -14,6 +14,10 @@ #include "layershellqt_export.h" +#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0) +struct xdg_popup; +#endif + namespace LayerShellQt { class WindowPrivate; @@ -116,6 +120,10 @@ public: */ static Window *get(QWindow *window); +#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0) + static void attachPopup(QWindow *window, xdg_popup *popup); +#endif + static Window *qmlAttachedProperties(QObject *object); Q_SIGNALS: diff --git a/src/qwaylandlayersurface.cpp b/src/qwaylandlayersurface.cpp index 89f47ef..ed57f4a 100644 --- a/src/qwaylandlayersurface.cpp +++ b/src/qwaylandlayersurface.cpp @@ -100,6 +100,7 @@ void QWaylandLayerSurface::zwlr_layer_surface_v1_configure(uint32_t serial, uint } } +#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) void QWaylandLayerSurface::attachPopup(QtWaylandClient::QWaylandShellSurface *popup) { std::any anyRole = popup->surfaceRole(); @@ -110,6 +111,7 @@ void QWaylandLayerSurface::attachPopup(QtWaylandClient::QWaylandShellSurface *po qCWarning(LAYERSHELLQT) << "Cannot attach popup of unknown type"; } } +#endif void QWaylandLayerSurface::applyConfigure() { @@ -119,7 +121,6 @@ void QWaylandLayerSurface::applyConfigure() void QWaylandLayerSurface::setAnchor(uint anchor) { set_anchor(anchor); - setWindowGeometry(window()->windowContentGeometry()); } void QWaylandLayerSurface::setExclusiveZone(int32_t zone) @@ -145,8 +146,8 @@ void QWaylandLayerSurface::setLayer(uint32_t layer) void QWaylandLayerSurface::setWindowGeometry(const QRect &geometry) { - const bool horizontallyConstrained = m_interface->anchors().testFlags({Window::AnchorLeft, Window::AnchorRight}); - const bool verticallyConstrained = m_interface->anchors().testFlags({Window::AnchorTop, Window::AnchorBottom}); + const bool horizontallyConstrained = m_interface->anchors() & (Window::AnchorLeft & Window::AnchorRight); + const bool verticallyConstrained = m_interface->anchors() & (Window::AnchorTop & Window::AnchorBottom); QSize size = geometry.size(); if (horizontallyConstrained) { diff --git a/src/qwaylandlayersurface_p.h b/src/qwaylandlayersurface_p.h index 9ccf819..4b5940c 100644 --- a/src/qwaylandlayersurface_p.h +++ b/src/qwaylandlayersurface_p.h @@ -32,7 +32,9 @@ public: { return m_configured; } +#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0) void attachPopup(QtWaylandClient::QWaylandShellSurface *popup) override; +#endif void setAnchor(uint32_t anchor); void setExclusiveZone(int32_t zone);