commit xdg-desktop-portal-hyprland for openSUSE:Factory
Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package xdg-desktop-portal-hyprland for openSUSE:Factory checked in at 2024-07-28 17:20:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xdg-desktop-portal-hyprland (Old) and /work/SRC/openSUSE:Factory/.xdg-desktop-portal-hyprland.new.1882 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "xdg-desktop-portal-hyprland" Sun Jul 28 17:20:04 2024 rev:12 rq:1189902 version:1.3.3 Changes: -------- --- /work/SRC/openSUSE:Factory/xdg-desktop-portal-hyprland/xdg-desktop-portal-hyprland.changes 2024-07-10 16:50:01.368735675 +0200 +++ /work/SRC/openSUSE:Factory/.xdg-desktop-portal-hyprland.new.1882/xdg-desktop-portal-hyprland.changes 2024-07-28 17:20:37.686633817 +0200 @@ -1,0 +2,9 @@ +Mon Jul 22 17:43:39 UTC 2024 - Joshua Smith <smolsheep@opensuse.org> + +- Remove fix-compilation-with-pw.patch -- Fixed upstream +- Update to version 1.3.3: + * core: sanitize environment and paths from user data + * core: fix compilation with newer pw versions + * required pipewire version is now >= 1.1.82. + +------------------------------------------------------------------- Old: ---- fix-compilation-with-pw.patch xdg-desktop-portal-hyprland-1.3.2.tar.gz New: ---- xdg-desktop-portal-hyprland-1.3.3.tar.gz BETA DEBUG BEGIN: Old: - Remove fix-compilation-with-pw.patch -- Fixed upstream - Update to version 1.3.3: BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xdg-desktop-portal-hyprland.spec ++++++ --- /var/tmp/diff_new_pack.RwFNob/_old 2024-07-28 17:20:38.134651720 +0200 +++ /var/tmp/diff_new_pack.RwFNob/_new 2024-07-28 17:20:38.138651879 +0200 @@ -19,14 +19,13 @@ %global __builder ninja Name: xdg-desktop-portal-hyprland -Version: 1.3.2 +Version: 1.3.3 Release: 0 Summary: Extended xdg-desktop-portal backend for Hyprland License: MIT Group: System/Libraries URL: https://github.com/hyprwm/xdg-desktop-portal-hyprland Source0: https://github.com/hyprwm/xdg-desktop-portal-hyprland/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz -Patch1: https://github.com/hyprwm/xdg-desktop-portal-hyprland/commit/c5b30938710d6c5... BuildRequires: cmake # Seems some of the C and CXX flags are CLANG specific BuildRequires: clang @@ -59,7 +58,7 @@ BuildRequires: pkgconfig(wlroots) >= 0.17.0 # Screencasting won't work without pipewire, but it's not a hard dependency. -Recommends: pipewire >= 0.3.41 +Recommends: pipewire >= 1.1.18 # Required since the picker uses qt wayland. # Not a strict requirement as the portal will fallback to slurp ++++++ xdg-desktop-portal-hyprland-1.3.2.tar.gz -> xdg-desktop-portal-hyprland-1.3.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/VERSION new/xdg-desktop-portal-hyprland-1.3.3/VERSION --- old/xdg-desktop-portal-hyprland-1.3.2/VERSION 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/VERSION 2024-07-22 13:35:31.000000000 +0200 @@ -1 +1 @@ -1.3.2 +1.3.3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/flake.lock new/xdg-desktop-portal-hyprland-1.3.3/flake.lock --- old/xdg-desktop-portal-hyprland-1.3.2/flake.lock 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/flake.lock 2024-07-22 13:35:31.000000000 +0200 @@ -10,11 +10,11 @@ ] }, "locked": { - "lastModified": 1691753796, - "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "lastModified": 1718746314, + "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", "type": "github" }, "original": { @@ -25,17 +25,18 @@ }, "hyprlang": { "inputs": { + "hyprutils": "hyprutils", "nixpkgs": [ "nixpkgs" ], "systems": "systems" }, "locked": { - "lastModified": 1713121246, - "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=", + "lastModified": 1717881852, + "narHash": "sha256-XeeVoKHQgfKuXoP6q90sUqKyl7EYy3ol2dVZGM+Jj94=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706", + "rev": "ec6938c66253429192274d612912649a0cfe4d28", "type": "github" }, "original": { @@ -44,13 +45,38 @@ "type": "github" } }, + "hyprutils": { + "inputs": { + "nixpkgs": [ + "hyprlang", + "nixpkgs" + ], + "systems": [ + "hyprlang", + "systems" + ] + }, + "locked": { + "lastModified": 1717881334, + "narHash": "sha256-a0inRgJhPL6v9v7RPM/rx1kbXdfe3xJA1c9z0ZkYnh4=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "0693f9398ab693d89c9a0aa3b3d062dd61b7a60e", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprutils", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1712963716, - "narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=", + "lastModified": 1720031269, + "narHash": "sha256-rwz8NJZV+387rnWpTYcXaRNvzUSnnF9aHONoJIYmiUQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "cfd6b5fc90b15709b780a5a1619695a88505a176", + "rev": "9f4128e00b0ae8ec65918efeba59db998750ead6", "type": "github" }, "original": { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/nix/default.nix new/xdg-desktop-portal-hyprland-1.3.3/nix/default.nix --- old/xdg-desktop-portal-hyprland-1.3.2/nix/default.nix 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/nix/default.nix 2024-07-22 13:35:31.000000000 +0200 @@ -29,8 +29,6 @@ src = ../.; - cmakeFlags = lib.optional debug (lib.strings.cmakeFeature "CMAKE_BUILD_TYPE" "DEBUG"); - nativeBuildInputs = [ cmake makeWrapper @@ -54,6 +52,13 @@ wayland-protocols ]; + cmakeBuildType = + if debug + then "Debug" + else "RelWithDebInfo"; + + dontStrip = true; + dontWrapQtApps = true; postInstall = '' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/nix/overlays.nix new/xdg-desktop-portal-hyprland-1.3.3/nix/overlays.nix --- old/xdg-desktop-portal-hyprland-1.3.2/nix/overlays.nix 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/nix/overlays.nix 2024-07-22 13:35:31.000000000 +0200 @@ -19,13 +19,33 @@ default = mkJoinedOverlays (with self.overlays; [ xdg-desktop-portal-hyprland ]); - xdg-desktop-portal-hyprland = final: prev: { - xdg-desktop-portal-hyprland = final.callPackage ./default.nix { - stdenv = prev.gcc13Stdenv; - inherit (final) hyprland-protocols; - inherit (final.qt6) qtbase qttools wrapQtAppsHook qtwayland; - inherit version; - inherit (inputs.hyprlang.packages.${prev.system}) hyprlang; - }; + xdg-desktop-portal-hyprland = lib.composeManyExtensions [ + self.overlays.pipewire + (final: prev: { + xdg-desktop-portal-hyprland = final.callPackage ./default.nix { + stdenv = prev.gcc13Stdenv; + inherit (final) hyprland-protocols; + inherit (final.qt6) qtbase qttools wrapQtAppsHook qtwayland; + inherit version; + inherit (inputs.hyprlang.packages.${prev.system}) hyprlang; + }; + }) + ]; + + # TODO: remove when https://nixpk.gs/pr-tracker.html?pr=322933 lands in unstable + pipewire = final: prev: { + pipewire = prev.pipewire.overrideAttrs (self: super: { + version = "1.2.0"; + + src = final.fetchFromGitLab { + domain = "gitlab.freedesktop.org"; + owner = "pipewire"; + repo = "pipewire"; + rev = self.version; + hash = "sha256-hjjiH7+JoyRTcdbPDvkUEpO72b5p8CbTD6Un/vZrHL8="; + }; + + mesonFlags = super.mesonFlags ++ [(final.lib.mesonEnable "snap" false)]; + }); }; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/src/core/PortalManager.cpp new/xdg-desktop-portal-hyprland-1.3.3/src/core/PortalManager.cpp --- old/xdg-desktop-portal-hyprland-1.3.2/src/core/PortalManager.cpp 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/src/core/PortalManager.cpp 2024-07-22 13:35:31.000000000 +0200 @@ -41,7 +41,7 @@ } static void handleOutputMode(void* data, struct wl_output* wl_output, uint32_t flags, int32_t width, int32_t height, int32_t refresh) { - const auto POUTPUT = (SOutput*)data; + const auto POUTPUT = (SOutput*)data; POUTPUT->refreshRate = std::round(refresh / 1000.0); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/src/helpers/Log.hpp new/xdg-desktop-portal-hyprland-1.3.3/src/helpers/Log.hpp --- old/xdg-desktop-portal-hyprland-1.3.2/src/helpers/Log.hpp 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/src/helpers/Log.hpp 2024-07-22 13:35:31.000000000 +0200 @@ -3,8 +3,7 @@ #include <iostream> #include <string> -enum eLogLevel -{ +enum eLogLevel { TRACE = 0, INFO, LOG, @@ -17,7 +16,7 @@ if (!(expr)) { \ Debug::log(CRIT, "\n==========================================================================================\nASSERTION FAILED! \n\n{}\n\nat: line {} in {}", \ std::format(reason, ##__VA_ARGS__), __LINE__, \ - ([]() constexpr->std::string { return std::string(__FILE__).substr(std::string(__FILE__).find_last_of('/') + 1); })().c_str()); \ + ([]() constexpr -> std::string { return std::string(__FILE__).substr(std::string(__FILE__).find_last_of('/') + 1); })().c_str()); \ printf("Assertion failed! See the log in /tmp/hypr/hyprland.log for more info."); \ *((int*)nullptr) = 1; /* so that we crash and get a coredump */ \ } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/src/helpers/MiscFunctions.hpp new/xdg-desktop-portal-hyprland-1.3.3/src/helpers/MiscFunctions.hpp --- old/xdg-desktop-portal-hyprland-1.3.2/src/helpers/MiscFunctions.hpp 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/src/helpers/MiscFunctions.hpp 2024-07-22 13:35:31.000000000 +0200 @@ -3,6 +3,6 @@ #include <sdbus-c++/Message.h> std::string execAndGet(const char* cmd); -void addHyprlandNotification(const std::string& icon, float timeMs, const std::string& color, const std::string& message); -bool inShellPath(const std::string& exec); -void sendEmptyDbusMethodReply(sdbus::MethodCall& call, u_int32_t responseCode); \ No newline at end of file +void addHyprlandNotification(const std::string& icon, float timeMs, const std::string& color, const std::string& message); +bool inShellPath(const std::string& exec); +void sendEmptyDbusMethodReply(sdbus::MethodCall& call, u_int32_t responseCode); \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/src/portals/Screencopy.cpp new/xdg-desktop-portal-hyprland-1.3.3/src/portals/Screencopy.cpp --- old/xdg-desktop-portal-hyprland-1.3.2/src/portals/Screencopy.cpp 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/src/portals/Screencopy.cpp 2024-07-22 13:35:31.000000000 +0200 @@ -689,7 +689,8 @@ Debug::log(TRACE, "[screencopy] set fps {}, frame took {:.2f}ms, ms till next refresh {:.2f}, estimated actual fps: {:.2f}", pSession->sharingData.framerate, FRAMETOOKMS, MSTILNEXTREFRESH, std::clamp(1000.0 / FRAMETOOKMS, 1.0, (double)pSession->sharingData.framerate)); - g_pPortalManager->addTimer({std::clamp(MSTILNEXTREFRESH - 1.0 /* safezone */, 6.0, 1000.0), [pSession]() { g_pPortalManager->m_sPortals.screencopy->startFrameCopy(pSession); }}); + g_pPortalManager->addTimer( + {std::clamp(MSTILNEXTREFRESH - 1.0 /* safezone */, 6.0, 1000.0), [pSession]() { g_pPortalManager->m_sPortals.screencopy->startFrameCopy(pSession); }}); } bool CScreencopyPortal::hasToplevelCapabilities() { return m_sState.toplevel; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/src/portals/Screenshot.cpp new/xdg-desktop-portal-hyprland-1.3.3/src/portals/Screenshot.cpp --- old/xdg-desktop-portal-hyprland-1.3.2/src/portals/Screenshot.cpp 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/src/portals/Screenshot.cpp 2024-07-22 13:35:31.000000000 +0200 @@ -6,7 +6,9 @@ #include <regex> #include <filesystem> -void pickHyprPicker(sdbus::MethodCall& call) { +std::string lastScreenshot; + +void pickHyprPicker(sdbus::MethodCall& call) { const std::string HYPRPICKER_CMD = "hyprpicker --format=rgb --no-fancy"; std::string rgbColor = execAndGet(HYPRPICKER_CMD.c_str()); @@ -68,7 +70,7 @@ maxValString = maxValString.substr(0, maxValString.find(' ')); uint32_t maxVal = std::stoi(maxValString); - double r, g, b; + double r, g, b; // 1 byte per triplet if (maxVal < 256) { @@ -86,7 +88,7 @@ b = ((byteString[4] << 8) | byteString[5]) / (maxVal * 1.0); } - auto reply = call.createReply(); + auto reply = call.createReply(); std::unordered_map<std::string, sdbus::Variant> results; results["color"] = sdbus::Struct(std::tuple{r, g, b}); @@ -133,11 +135,15 @@ bool isInteractive = options.count("interactive") && options["interactive"].get<bool>() && inShellPath("slurp"); // make screenshot - const std::string HYPR_DIR = "/tmp/hypr/"; - const std::string SNAP_FILE = "xdph_screenshot.png"; - const std::string FILE_PATH = HYPR_DIR + SNAP_FILE; - const std::string SNAP_CMD = "grim " + FILE_PATH; - const std::string SNAP_INTERACTIVE_CMD = "grim -g \"$(slurp)\" " + FILE_PATH; + + const auto RUNTIME_DIR = getenv("XDG_RUNTIME_DIR"); + srand(time(nullptr)); + + const std::string HYPR_DIR = RUNTIME_DIR ? std::string{RUNTIME_DIR} + "/hypr/" : "/tmp/hypr/"; + const std::string SNAP_FILE = std::format("xdph_screenshot_{:x}.png", rand()); // rand() is good enough + const std::string FILE_PATH = HYPR_DIR + SNAP_FILE; + const std::string SNAP_CMD = "grim '" + FILE_PATH + "'"; + const std::string SNAP_INTERACTIVE_CMD = "grim -g \"$(slurp)\" '" + FILE_PATH + "'"; std::unordered_map<std::string, sdbus::Variant> results; results["uri"] = "file://" + FILE_PATH; @@ -145,6 +151,11 @@ std::filesystem::remove(FILE_PATH); std::filesystem::create_directory(HYPR_DIR); + // remove last screenshot. This could cause issues if the app hasn't read the screenshot back yet, but oh well. + if (!lastScreenshot.empty()) + std::filesystem::remove(lastScreenshot); + lastScreenshot = FILE_PATH; + if (isInteractive) execAndGet(SNAP_INTERACTIVE_CMD.c_str()); else @@ -152,7 +163,7 @@ uint32_t responseCode = std::filesystem::exists(FILE_PATH) ? 0 : 1; - auto reply = call.createReply(); + auto reply = call.createReply(); reply << responseCode; reply << results; reply.send(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/src/portals/Screenshot.hpp new/xdg-desktop-portal-hyprland-1.3.3/src/portals/Screenshot.hpp --- old/xdg-desktop-portal-hyprland-1.3.2/src/portals/Screenshot.hpp 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/src/portals/Screenshot.hpp 2024-07-22 13:35:31.000000000 +0200 @@ -13,6 +13,6 @@ private: std::unique_ptr<sdbus::IObject> m_pObject; - const std::string INTERFACE_NAME = "org.freedesktop.impl.portal.Screenshot"; - const std::string OBJECT_PATH = "/org/freedesktop/portal/desktop"; + const std::string INTERFACE_NAME = "org.freedesktop.impl.portal.Screenshot"; + const std::string OBJECT_PATH = "/org/freedesktop/portal/desktop"; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/src/shared/ScreencopyShared.cpp new/xdg-desktop-portal-hyprland-1.3.3/src/shared/ScreencopyShared.cpp --- old/xdg-desktop-portal-hyprland-1.3.2/src/shared/ScreencopyShared.cpp 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/src/shared/ScreencopyShared.cpp 2024-07-22 13:35:31.000000000 +0200 @@ -16,7 +16,7 @@ for (size_t i = 1; i < result.size(); ++i) { if (result[i - 1] == '>' && result[i] == ']') result[i] = ' '; - if (result[i] == '\"') + if (result[i] == '\"' || result[i] == '\'') result[i] = ' '; } return result; @@ -43,8 +43,10 @@ const char* XCURSOR_SIZE = getenv("XCURSOR_SIZE"); const char* HYPRLAND_INSTANCE_SIGNATURE = getenv("HYPRLAND_INSTANCE_SIGNATURE"); - std::string cmd = - std::format("WAYLAND_DISPLAY={} QT_QPA_PLATFORM=\"wayland\" XCURSOR_SIZE={} HYPRLAND_INSTANCE_SIGNATURE={} XDPH_WINDOW_SHARING_LIST=\"{}\" hyprland-share-picker 2>&1", + // DANGEROUS: we are sending a list of app IDs and titles via env. Make sure it's in 'singlequotes' to avoid something like $(rm -rf /) + // TODO: this is dumb, use a pipe or something. + std::string cmd = + std::format("WAYLAND_DISPLAY='{}' QT_QPA_PLATFORM='wayland' XCURSOR_SIZE='{}' HYPRLAND_INSTANCE_SIGNATURE='{}' XDPH_WINDOW_SHARING_LIST='{}' hyprland-share-picker 2>&1", WAYLAND_DISPLAY ? WAYLAND_DISPLAY : "", XCURSOR_SIZE ? XCURSOR_SIZE : "24", HYPRLAND_INSTANCE_SIGNATURE ? HYPRLAND_INSTANCE_SIGNATURE : "0", buildWindowList()); const auto RETVAL = execAndGet(cmd.c_str()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xdg-desktop-portal-hyprland-1.3.2/src/shared/ScreencopyShared.hpp new/xdg-desktop-portal-hyprland-1.3.3/src/shared/ScreencopyShared.hpp --- old/xdg-desktop-portal-hyprland-1.3.2/src/shared/ScreencopyShared.hpp 2024-06-13 11:48:34.000000000 +0200 +++ new/xdg-desktop-portal-hyprland-1.3.3/src/shared/ScreencopyShared.hpp 2024-07-22 13:35:31.000000000 +0200 @@ -5,16 +5,12 @@ extern "C" { #include <spa/pod/builder.h> -#undef SPA_VERSION_POD_BUILDER_CALLBACKS -#define SPA_VERSION_POD_BUILDER_CALLBACKS .version = 0 #include <spa/buffer/meta.h> #include <spa/utils/result.h> #include <spa/param/props.h> #include <spa/param/format-utils.h> #include <spa/param/video/format-utils.h> #include <spa/pod/dynamic.h> -#undef SPA_VERSION_POD_BUILDER_CALLBACKS -#define SPA_VERSION_POD_BUILDER_CALLBACKS 0 } #include <wayland-client.h> @@ -22,8 +18,7 @@ #define XDPH_PWR_BUFFERS_MIN 2 #define XDPH_PWR_ALIGN 16 -enum eSelectionType -{ +enum eSelectionType { TYPE_INVALID = -1, TYPE_OUTPUT = 0, TYPE_WINDOW,
participants (1)
-
Source-Sync