diff --git a/hyprland-0.44.1.tar.xz b/hyprland-0.44.1.tar.xz deleted file mode 100644 index 159f76e..0000000 --- a/hyprland-0.44.1.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1ce5b9e6eddd57cde64fd0626cfd799550df6947883f795f5222d8d2b6725a0f -size 51320696 diff --git a/hyprland-0.45.0.tar.xz b/hyprland-0.45.0.tar.xz new file mode 100644 index 0000000..148d4e5 --- /dev/null +++ b/hyprland-0.45.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06d2122ef5bcbdde3bac0e2bd03c93c0419a7e4c1fe22bab539e53c46dac0419 +size 51332744 diff --git a/hyprland.changes b/hyprland.changes index b765de5..49d18ea 100644 --- a/hyprland.changes +++ b/hyprland.changes @@ -1,3 +1,150 @@ +------------------------------------------------------------------- +Sat Nov 9 16:26:26 UTC 2024 - Florian "spirit" + +- Update to version 0.45.0: + + A big update, with tons of fixes, improvements and new stuff! + + Breaking changes + - no_gaps_when_only has been removed. See the wiki for equivalent + workspace rules. + - decoration:shadow_ variables have moved. See the wiki for the + new names. + + New features: + - feat: add a custom made treewide formatter (#7992) + - groups: add group_on_movetoworkspace (#8159) + - groups: add merge_groups_on_groupbar (#8362) + - hyprctl: add caps/num lock state for keyboards (#8145) + - hyprctl: add mirrorOf to hyprctl monitors + - hyprpm: Add option to notify on fail and keep original notify + (#8167) + - input: add snapping to floating windows (#8088) + - layout: add drag_into_group to control merging dragging windows + (#8004) + - layout: add merge_floated_into_tiled_on_groupbar (#8042) + - pointer: add default auto for no_hw_cursors + - protocols: Add support for hyprland-ctm-control-v1 (#8023) + - renderer: Add a missing texture asset and a user check + - renderer: add expand_undersized_textures + - shadow: add sharp and refactor options + - snap: add option border_overlap and other improvements (#8289) + + Fixes: + - IME: Fixup IME popup candidate windows position when scale is + not 1.0 (#8117) + - Makefile: fix legacyrendererdebug typo (#8214) + - Systemd fixes + - config: fix generateConfig loop (#8164) + - core: fix group members disappearing when you move the group to + another monitor (#8237) + - drm-lease: fix crashes and implementation (#8116) + - drm-syncobj: fix crash on missing timelines + - drm-timeline: Add check for conflicting acquire and release + points (#8083) + - group: fix moveWindowIntoGroup (#8297) + - groups: fix swallowing (#8223) + - hyprerror: fix height calc with bottom bar (#8043) + - hyprpm: Fix crashes due to misplaced fmt argument(s) (#8140) + - input: Fix VRR for constrained cursors (#6877) + - internal: cleanup CMonitor usage and fix a few ref hogs + - keybinds: fixup xkb_states for resolve_by_sym + - layersurface: fixup brace style + - layout: fix auto group when opening a new window in a + non-focused workspace using window rules (#8006) + - layout: window snapping cleanup + fixes + - misc: Fix bad links to wiki (#8240) + - monitors: fix vrr breaking monitor disconnect (#8314) + - notif-overlay: add a bit of padding for icons + - renderer: fix floating window damage (#8182) + - renderer: minor fixup to window rendering logic (#8359) + - screencopy: fix build with legacyrenderer + - screencopy: fix screencopy frames not being cleaned up (#8017) + - shaders: fixup jagged edges in texture rounded corners + - shadow: fix double premultiplication + - xwayland: minor cleanups and fixes (#8076) + - xwayland: minor fixups for stability (#8323) + + Other: + - Build with hyprland-session.service (#8251) + - config/example: add optional smart gaps to the default config + - defaultConfig: add a nofocus rule for weird X windows + - Improve hyprland-session.service (#8225) + - compositor: make sure we don't ret early on no surface + - config/layout: nuke no_gaps_when_only (#8072) + - config: give simple help for super+q not working + - core: move internal structures to monitor pointers (#8266) + - default/config: improve default animations + - defaultConfig: improve smart gaps + - defaultConfig: update default config values for shadows (#8360) + - dispatchers: allow leading whitespace in window parameter + (#8016) + - example: update desktop file to include DesktopNames + - example/hyprland-session.service: add support for xdg autostart + (#8230) + - foreign-toplevel-wlr: don't send updates to X11 OR windows + - foreign-toplevel: don't send updates to X11 OR windows + - gammactrl: guard pMonitor in setGamma + - groupbar: set locked color when groups are globally locked + (#8257) + - hyprctl: convert std::cout and std::cerr to std::println() + - hyprctl: move setprop into dispatchers (#8275) + - hyprctl: reload windowrules on reloadAll + - hyprerror: make hyprerror reserve space (#8040) + - hyprland-systemd.desktop improvements (#8318) + - hyprland-systemd.desktop: change name back to Hyprland (#8351) + - hyprland: convert std::cout and std::cerr to std::println() + - hyprpm: convert std::cout and std::cerr to std::println() + - hyprpm: disallow shallow on unknown branch + - input: Refocus window on scrolling if follows mouse (#8361) + - input: cleanup device naming logic + - input: ignore non-kb ls-es in refocusLastWindow + - internal: Move CMonitor to SP (#8178) + - internal: Remove some unused lambda captures (#8218) + - internal: check size limit in layouts (#8298) + - internal: few more marginal optimisations from profiling + (#8271) + - internal: improve version query and define HYPRLAND_VERSION + (#8034) + - internal: more profiling less calls and local copies (#8300) + - internal: optimize cursor move a bit (#8264) + - internal: use clampWindowSize to unify min/maxsize handling + (#8014) + - keyboard: update group state on change for the sym resolve + state + - layershell: check if workspace is valid in onMap + - layershell: minor cleanups and improvements to focus + - layersurface: round geom in arrangeLayerArray + - layout: deny auto-grouping a new floating window into a tiled + group (#8108) + - layout: don't snap to self and allow same-pid snaps + - layout: enable group rules for new floating windows (#8122) + - layout: move applyGroupRules() to onWindowCreated() (#8139) + - layout: remove unnecessary check after 45e8219 (#8037) + - layout: simplify the conditions to autogroup (#8120) + - layout: slight adjustments to snapping logic (#8273) + - misc: refactor version command (#8027) + - monitor: avoid crash on released buffer in surf + - monitor: modernize/refactor last legacy-handled events + - output/xdg-output: avoid sending events to released globals + - output: send enter events on late wl_output binds + - output: update state even if no owner exists (#8044) + - pointer: expand sw cursor damage box + - renderer: don't rely on datarootdir for local share + - renderer: improve api around new framebuffer changes + - renderer: reserve space for error at the bottom if that's set + - renderer: safeguard against non-sampleable currentFB in + blurMainFb + - seat: avoid sending pointless 'keymap' and 'repeat_info' events + (#8276) + - security-context: avoid UB in C macro (#8229) + - security-context: close client fds after disconnect + - security-context: implement protocol + - session-lock: reset seat grab on a new session lock (#8147) + - shaders: improve corner AA in borders shader + - swallow: check if swallow_regex doesn't exist (#8265) + - tablet: use inputMgr unified naming scheme + - window: properly break cycles in X11TransientFor + - windowrules: allow specifying max size in size window rule + (#8021) + - xcursor: don't crash on broken permissions in X themes + - xwm: avoid infinite parent lookup loop in lookupParentExists + ------------------------------------------------------------------- Wed Oct 9 15:11:23 UTC 2024 - Florian "sp1rit" diff --git a/hyprland.spec b/hyprland.spec index 9747ffa..0a1ab6b 100644 --- a/hyprland.spec +++ b/hyprland.spec @@ -22,7 +22,7 @@ %define shortname hypr Name: hyprland -Version: 0.44.1 +Version: 0.45.0 Release: 0 Summary: Dynamic tiling Wayland compositor License: BSD-3-Clause @@ -37,7 +37,7 @@ BuildRequires: git BuildRequires: glslang-devel BuildRequires: meson BuildRequires: pkgconfig -BuildRequires: pkgconfig(aquamarine) +BuildRequires: pkgconfig(aquamarine) >= 0.4.2 BuildRequires: pkgconfig(cairo) BuildRequires: pkgconfig(egl) BuildRequires: pkgconfig(gbm) >= 17.1.0 @@ -53,6 +53,7 @@ BuildRequires: pkgconfig(libudev) BuildRequires: pkgconfig(pango) BuildRequires: pkgconfig(pangocairo) BuildRequires: pkgconfig(pixman-1) >= 0.42.0 +BuildRequires: pkgconfig(systemd) BuildRequires: pkgconfig(tomlplusplus) BuildRequires: pkgconfig(uuid) BuildRequires: pkgconfig(vulkan) >= 1.2.182 @@ -178,6 +179,7 @@ sed -i 's;REPLACE_ME_WITH_PREFIX;%{_prefix};' hyprpm/src/core/DataState.cpp %{_datadir}/%{shortname}/lockdead2.png %dir %{_datadir}/wayland-sessions/ %{_datadir}/wayland-sessions/%{name}.desktop +%{_datadir}/wayland-sessions/%{name}-systemd.desktop %dir %{_datadir}/xdg-desktop-portal %{_datadir}/xdg-desktop-portal/%{name}-portals.conf %{_mandir}/man1/Hyprland.* diff --git a/opensuse-hyprpm-use-hyprland-devel-subpkg.patch b/opensuse-hyprpm-use-hyprland-devel-subpkg.patch index e2fe8bb..ff316bc 100644 --- a/opensuse-hyprpm-use-hyprland-devel-subpkg.patch +++ b/opensuse-hyprpm-use-hyprland-devel-subpkg.patch @@ -1,4 +1,4 @@ -From c34dc954cc6388e9bc9ea608152ae4fc3f201bb1 Mon Sep 17 00:00:00 2001 +From 59baf7887afbb81fc56fc211571f50c6f6806be0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20sp1rit=E2=80=8B?= Date: Fri, 14 Jun 2024 23:43:46 +0200 Subject: [PATCH] openSUSE: Use hyprland-devel instead of downloading from @@ -17,11 +17,11 @@ It also adds a new check to ensure that the subpackage is instealled. Signed-off-by: Florian "sp1rit"​ --- hyprpm/src/core/DataState.cpp | 2 +- - hyprpm/src/core/PluginManager.cpp | 140 +++++------------------------- - 2 files changed, 21 insertions(+), 121 deletions(-) + hyprpm/src/core/PluginManager.cpp | 138 ++++-------------------------- + 2 files changed, 20 insertions(+), 120 deletions(-) diff --git a/hyprpm/src/core/DataState.cpp b/hyprpm/src/core/DataState.cpp -index 61ad336..99dbadd 100644 +index fb8679d..a1c7026 100644 --- a/hyprpm/src/core/DataState.cpp +++ b/hyprpm/src/core/DataState.cpp @@ -21,7 +21,7 @@ std::string DataState::getDataStatePath() { @@ -34,10 +34,10 @@ index 61ad336..99dbadd 100644 void DataState::ensureStateStoreExists() { diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp -index 6988547..036c705 100644 +index 57c6764..7f2ca09 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp -@@ -14,6 +14,7 @@ +@@ -17,6 +17,7 @@ #include #include @@ -45,26 +45,25 @@ index 6988547..036c705 100644 #include #include -@@ -406,134 +407,20 @@ bool CPluginManager::updateHeaders(bool force) { +@@ -412,141 +413,27 @@ bool CPluginManager::updateHeaders(bool force) { const auto HLVER = getHyprlandVersion(); if (!hasDeps()) { -- std::cerr << "\n" << Colors::RED << "✖" << Colors::RESET << " Could not update. Dependencies not satisfied. Hyprpm requires: cmake, meson, cpio\n"; -+ std::cerr << "\n" << Colors::RED << "✖" << Colors::RESET << " Could not update. Dependencies not satisfied. Hyprpm requires: hyprland-devel, cmake, meson, cpio\n"; +- std::println("\n{}", failureString("Could not update. Dependencies not satisfied. Hyprpm requires: cmake, meson, cpio")); ++ std::println("\n{}", failureString("Could not update. Dependencies not satisfied. Hyprpm requires: hyprland-devel, cmake, meson, cpio")); return false; } -- + - if (!std::filesystem::exists("/tmp/hyprpm")) { - std::filesystem::create_directory("/tmp/hyprpm"); - std::filesystem::permissions("/tmp/hyprpm", std::filesystem::perms::all, std::filesystem::perm_options::replace); - } - - if (!force && headersValid() == HEADERS_OK) { -- std::cout << "\n" << std::string{Colors::GREEN} + "✔" + Colors::RESET + " Headers up to date.\n"; +- std::println("\n{}", successString("Headers up to date.")); - return true; - } - -+ CProgressBar progress; - progress.m_iMaxSteps = 5; + progress.m_iMaxSteps = 1; @@ -76,74 +75,74 @@ index 6988547..036c705 100644 - const auto WORKINGDIR = "/tmp/hyprpm/hyprland-" + USERNAME; - - if (!createSafeDirectory(WORKINGDIR)) { -- std::cerr << "\n" << Colors::RED << "✖" << Colors::RESET << " Could not prepare working dir for hl\n"; +- std::println("\n{}", failureString("Could not prepare working dir for hl")); - return false; - } - -- progress.printMessageAbove(std::string{Colors::YELLOW} + "!" + Colors::RESET + " Cloning https://github.com/hyprwm/hyprland, this might take a moment."); +- progress.printMessageAbove(statusString("!", Colors::YELLOW, "Cloning https://github.com/hyprwm/Hyprland, this might take a moment.")); - -- const bool bShallow = (HLVER.branch == "main" || HLVER.branch == "") && !m_bNoShallow; +- const bool bShallow = (HLVER.branch == "main") && !m_bNoShallow; - - // let us give a bit of leg-room for shallowing - // due to timezones, etc. -- const std::string SHALLOW_DATE = -- trim(HLVER.date).empty() ? "" : execAndGet("LC_TIME=\"en_US.UTF-8\" date --date='" + HLVER.date + " - 1 weeks' '+\%a \%b \%d \%H:\%M:\%S \%Y'"); +- const std::string SHALLOW_DATE = trim(HLVER.date).empty() ? "" : execAndGet("LC_TIME=\"en_US.UTF-8\" date --date='" + HLVER.date + " - 1 weeks' '+%a %b %d %H:%M:%S %Y'"); - - if (m_bVerbose && bShallow) -- progress.printMessageAbove(std::string{Colors::BLUE} + "[v] " + Colors::RESET + "will shallow since: " + SHALLOW_DATE); +- progress.printMessageAbove(verboseString("will shallow since: {}", SHALLOW_DATE)); - - std::string ret = -- execAndGet("cd /tmp/hyprpm && git clone --recursive https://github.com/hyprwm/hyprland hyprland-" + USERNAME + (bShallow ? " --shallow-since='" + SHALLOW_DATE + "'" : "")); +- execAndGet("cd /tmp/hyprpm && git clone --recursive https://github.com/hyprwm/Hyprland hyprland-" + USERNAME + (bShallow ? " --shallow-since='" + SHALLOW_DATE + "'" : "")); - - if (!std::filesystem::exists(WORKINGDIR)) { -- progress.printMessageAbove(std::string{Colors::RED} + "✖" + Colors::RESET + " Clone failed. Retrying without shallow."); +- progress.printMessageAbove(failureString("Clone failed. Retrying without shallow.")); - ret = execAndGet("cd /tmp/hyprpm && git clone --recursive https://github.com/hyprwm/hyprland hyprland-" + USERNAME); - } - - if (!std::filesystem::exists(WORKINGDIR + "/.git")) { -- std::cerr << "\n" << Colors::RED << "✖" << Colors::RESET << " Could not clone the hyprland repository. shell returned:\n" << ret << "\n"; +- std::println(stderr, "\n{}", failureString("Could not clone the Hyprland repository. shell returned:\n{}", ret)); - return false; - } - -- progress.printMessageAbove(std::string{Colors::GREEN} + "✔" + Colors::RESET + " cloned"); +- progress.printMessageAbove(successString("Hyprland cloned")); - progress.m_iSteps = 2; - progress.m_szCurrentMessage = "Checking out sources"; - progress.print(); - - if (m_bVerbose) -- progress.printMessageAbove(std::string{Colors::BLUE} + "[v] " + Colors::RESET + "will run: " + "cd " + WORKINGDIR + " && git checkout " + HLVER.hash + " 2>&1"); +- progress.printMessageAbove(verboseString("will run: cd {} && git checkout {} 2>&1", WORKINGDIR, HLVER.hash)); - - ret = execAndGet("cd " + WORKINGDIR + " && git checkout " + HLVER.hash + " 2>&1"); - - if (ret.contains("fatal: unable to read tree")) { -- std::cerr << "\n" -- << Colors::RED << "✖" << Colors::RESET -- << " Could not checkout the running Hyprland commit. If you are on -git, try updating.\nYou can also try re-running hyprpm update with --no-shallow.\n"; +- std::println(stderr, "\n{}", +- failureString("Could not checkout the running Hyprland commit. If you are on -git, try updating.\n" +- "You can also try re-running hyprpm update with --no-shallow.")); - return false; - } - - if (m_bVerbose) -- progress.printMessageAbove(std::string{Colors::BLUE} + "[v] " + Colors::RESET + "git returned (co): " + ret); +- progress.printMessageAbove(verboseString("git returned (co): {}", ret)); - - ret = execAndGet("cd " + WORKINGDIR + " ; git rm subprojects/tracy ; git submodule update --init 2>&1 ; git reset --hard --recurse-submodules " + HLVER.hash); - - if (m_bVerbose) -- progress.printMessageAbove(std::string{Colors::BLUE} + "[v] " + Colors::RESET + "git returned (rs): " + ret); +- progress.printMessageAbove(verboseString("git returned (rs): {}", ret)); - -- progress.printMessageAbove(std::string{Colors::GREEN} + "✔" + Colors::RESET + " checked out to running ver"); +- progress.printMessageAbove(successString("checked out to running ver")); - progress.m_iSteps = 3; - progress.m_szCurrentMessage = "Building Hyprland"; -- progress.print(); -- -- progress.printMessageAbove(std::string{Colors::YELLOW} + "!" + Colors::RESET + " configuring Hyprland"); ++ progress.m_szCurrentMessage = "Checking headers"; + progress.print(); + +- progress.printMessageAbove(statusString("!", Colors::YELLOW, "configuring Hyprland")); - - if (m_bVerbose) -- progress.printMessageAbove(std::string{Colors::BLUE} + "[v] " + Colors::RESET + "setting PREFIX for cmake to " + DataState::getHeadersPath()); +- progress.printMessageAbove(verboseString("setting PREFIX for cmake to {}", DataState::getHeadersPath())); - - ret = execAndGet(std::format("cd {} && cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:STRING=\"{}\" -S . -B ./build -G Ninja", WORKINGDIR, - DataState::getHeadersPath())); - if (m_bVerbose) -- progress.printMessageAbove(std::string{Colors::BLUE} + "[v] " + Colors::RESET + "cmake returned: " + ret); +- progress.printMessageAbove(verboseString("cmake returned: {}", ret)); - - if (ret.contains("CMake Error at")) { - // missing deps, let the user know. @@ -152,49 +151,48 @@ index 6988547..036c705 100644 - missing = missing.substr(0, missing.find("-- Configuring incomplete")); - missing = missing.substr(0, missing.find_last_of('\n')); - -- std::cerr << "\n" -- << Colors::RED << "✖" << Colors::RESET << " Could not configure the hyprland source, cmake complained:\n" -- << missing << "\n\nThis likely means that you are missing the above dependencies or they are out of date.\n"; +- std::println(stderr, "\n{}", +- failureString("Could not configure the hyprland source, cmake complained:\n{}\n\n" +- "This likely means that you are missing the above dependencies or they are out of date.", +- missing)); - return false; - } - -- progress.printMessageAbove(std::string{Colors::GREEN} + "✔" + Colors::RESET + " configured Hyprland"); +- progress.printMessageAbove(successString("configured Hyprland")); - progress.m_iSteps = 4; - progress.m_szCurrentMessage = "Installing sources"; -+ progress.m_szCurrentMessage = "Checking headers"; - progress.print(); - -- std::string cmd = +- progress.print(); +- +- const std::string& cmd = - std::format("sed -i -e \"s#PREFIX = /usr/local#PREFIX = {}#\" {}/Makefile && cd {} && make installheaders", DataState::getHeadersPath(), WORKINGDIR, WORKINGDIR); - if (m_bVerbose) -- progress.printMessageAbove(std::string{Colors::BLUE} + "[v] " + Colors::RESET + "installation will run: " + cmd); +- progress.printMessageAbove(verboseString("installation will run: {}", cmd)); - - ret = execAndGet(cmd); - - if (m_bVerbose) -- std::cout << Colors::BLUE << "[v] " << Colors::RESET << "installer returned: " << ret << "\n"; +- std::println("{}", verboseString("installer returned: {}", ret)); - - // remove build files - std::filesystem::remove_all(WORKINGDIR); - auto HEADERSVALID = headersValid(); if (HEADERSVALID == HEADERS_OK) { - progress.printMessageAbove(std::string{Colors::GREEN} + "✔" + Colors::RESET + " installed headers"); + progress.printMessageAbove(successString("installed headers")); - progress.m_iSteps = 5; + progress.m_iSteps = 1; progress.m_szCurrentMessage = "Done!"; progress.print(); -@@ -541,7 +428,7 @@ bool CPluginManager::updateHeaders(bool force) { + std::print("\n"); } else { - progress.printMessageAbove(std::string{Colors::RED} + "✖" + Colors::RESET + " failed to install headers with error code " + std::to_string((int)HEADERSVALID) + " (" + - headerErrorShort(HEADERSVALID) + ")"); + progress.printMessageAbove(failureString("failed to install headers with error code {} ({})", (int)HEADERSVALID, headerErrorShort(HEADERSVALID))); - progress.m_iSteps = 5; + progress.m_iSteps = 1; progress.m_szCurrentMessage = "Failed"; progress.print(); -@@ -904,6 +791,19 @@ std::string CPluginManager::headerErrorShort(const eHeadersErrors err) { +@@ -910,6 +797,19 @@ std::string CPluginManager::headerErrorShort(const eHeadersErrors err) { } bool CPluginManager::hasDeps() { @@ -215,5 +213,5 @@ index 6988547..036c705 100644 for (auto const& d : deps) { if (!execAndGet("command -v " + d).contains("/")) -- -2.45.2 +2.47.0