After a while, your Overlord is proud to announce Hyprland 0.49.0.
Breaking changes:
cursor:warp_on_change_workspace
no longer controls warps for special workspaces. Usewarp_on_toggle_special
for more fine control.master:center_master_slaves_on_right
has been changed tomaster:center_master_fallback
providing more options than just right.- you'll now need to input your sudo password for sensitive hyprpm operations. Due to that change your repositories and enabled plugins will be reset.
New features:
- InputManager: add config option to disable keybinds per device (#10064)
- InputManager: add nofollowmouse (#9994)
- Permission Manager: add permission management for screencopy (#9930)
- animations: Add option for animating workspaces as if the first and last were adjacent (#10277)
- anr: add config for ping number before popup shows up (#9782)
- async: add Promise and use it for AsyncDialogBox
- binds: add drag_threshold for click/drag isolation (#9839)
- groupbar: Add options for setting group bar title font weight (and indicator gap) (#9617)
- groupbar: add text offset and upper gap settings (#9733)
- helpers: Add an async dialog box impl (#9919)
- input: add warp_on_toggle_special (#9945)
- keybinds: add sendkeystate dispatcher (#9599)
- layerrules: add abovelock to render above lockscreen (#9793)
- permissions: add perms for plugin loading (#10184)
- protocols: add Hyprland toplevel mapping implementation (#9775)
- protocols: add support for xdg-system-bell-v1
- protocols: add xdg_toplevel_tag_v1 support
- renderer: add render:send_content_type setting (#9851)
- socket2: add minimized event for foreign-wlr
- socket2: add monitorremovedv2 event (#10229)
- windowrules: add noclosefor
- workspaces: Add binds:hide_special_on_workspace_change (#9728)
Fixes:
- asyncDialogBox: fix missing pid
- asyncdialogbox: fix missing header
- ci: minor fixes to glaze
- compositor/surface: fix surface opaque and input regions not being updated (#10055)
- compositor: fix crash when moving a workspace to a monitor with size 0x0 (#9848)
- compositor: fix getMonitorInDirection skipping active monitor (#10114)
- config: Fix matching monitor by description to allow space prefix (#9788)
- configmgr: fix CConfigValue<> from plugins
- core: fix artifacts when fullscreening (#9778)
- core: fix crash in data device on shutdown (#9997)
- core: fix null ref when resuming system (#9794)
- ctm: fix crash when finishing ctm progress with a destroyed monitor (#9835)
- framebuffer: Fix framebuffer size check (#10068)
- helpers: add missing include for BSDs after 3c12867 (#9982)
- hyprpm: add missing include for libc++ after 858c0e2 (#10234)
- hyprpm: add missing return (#10299)
- input/layers: Fix exclusive LS focus / refocus after unmap (#9984)
- internal: fix minor ubsan errors (#9743)
- internal: fix name confusion in SAlphaValue
- keybindmgr: fixup bindn regression
- layerrules: fix abovelock interactivity for touch input (#10253)
- makefile: add new shaders to
make installheaders
(#9783) - makefile: fix find command in installheaders
- monitors: fix disconnected monitors are reconnected to an empty workspace (#9874)
- renderer: Simplify and fix hdr metadata setting (#9706)
- socket2: fix order of window events on map (#10341)
- solitary: Fix the non-working tearing #9429 (#9772)
- swipe: fix prev workspace remembering
- swipe: fix swiping onto a new workspace bound to another monitor (#8176) (#9927)
- window: Fix order of urgency flag and event emission (#10163)
- workspaces: Fix empty flag not selecting active workspace (#10237)
- workspaces: minor fixes to persistence
- xdg-bell/xdg-tag: fix moved resource usage
- xdg-bell: fix wrong resource cast
- xdg-shell: fix some null refs (#9992)
Other:
- CursorManager: Store cursor pixel data retrieved from X/HC as a copy (#9986)
- DMABuffer: reserve vector and avoid UB (#10317)
- DataDevice: position icon at cursor hotspot (#9895)
- DonationNag: ask after each major update (#10213)
- Groupbar: apply scaling factor to text (#9731)
- IHyprLayout: center floating window at cursor when picked up from fullscreen (#10063)
- IHyprLayout: respect minimum window size (#10017)
- SECURITY: init security policy
- ci: close unwanted issues automatically (#10106)
- cm: Use precomputed primaries conversion (#9814)
- cmake: do not install version.h.in (#10035)
- cmake: ignore Wclobbered
- compositor: avoid crash on null window monitor move
- compositor: refactor class member vars (#10141)
- compositor: set fullscreenstate on movetoworkspace (#10303)
- config: Refactor class member vars (#10124)
- config: use natural increase and decrease of brightness for default cfg (#10210)
- core: Don't damage the entire surface every frame (#9763)
- core: wait for dmabuf readiness (#9806)
- ctm: enable fade animation on nvidia driver versions 575 and above (#10095)
- debug: refactor class member vars (#10130)
- decoration: bring back border_part_of_window
- decorationPositioner: update posinfo on window update
- desktop: Damage subsurface when position changes (#10094)
- desktop: cleanup code and use std::ranges (#10289)
- devices: refactor class member vars (#10206)
- dwindle: ignore fullscreen window for positioning when use_active_for_splits=false (#9838)
- dwindle: use idealIgnoreReserved for moveWindowTo bbs
- github: remove issue templates
- groupbar: round boxes
- helpers: properly support next/prev for workspace switching (#10074)
- helpers: refactor class member vars (#10218)
- hyprerror: refactor class member vars (#10227)
- hyprpm: Minor optimizations and refactor of helpers and progress bar (#10246)
- hyprpm: clean up root access and properly check input (#10304)
- hyprpm: extend dep list
- hyprpm: move to system directories for storing plugins (#10211)
- hyprpm: wrap sudo cmd in quotes
- input: don't use pointer hold logic for unmapped surfs
- inputs: refactor class member vars (#10230)
- internal: Don't force default cursor on config reload/monitor reconfigure (#9815)
- internal: Removed Herobrine
- internal: Use vecnotinrect instead of !vecinrect (#10262)
- keybinds: allow executing binds not bound to a key (#10102)
- layerSurface: warp position and size before taking a snapshot (#10054)
- layers: refactor class member vars (#10149)
- layout: allow interacting with pinned windows when fullscreened (#10326)
- layout: center floating window at cursor when picked up from fullscreen (#9780)
- layout: properly assign workspace and monitor when moving a child to the parent (#10338)
- layout: properly track floating window position (#9937)
- layouts: refactor class member vars (#10228)
- managers: refactor class member vars (#10242)
- master: Change center_master_slaves_on_right to center_master_fallback (#10201)
- nix/module: load plugins using exec-once (#9836)
- opengl: check for g_pHyprOpengl pointer (#9791)
- opengl: don't attempt to compile cm on gles3.0
- pass/rect: include clipBox in opaque calculations
- pass: remove renderer finalDamage since it's unused (#9996)
- pass: remove unusued timeline in texpass (#9734)
- pass: revert "remove renderer finalDamage since it's unused (#9996)" (#10039)
- permissions: disable automatic reloading of permissions from cfg
- plugins: refactor class member vars (#10257)
- popup: damage old size on unmap as well as new (#10306)
- protocols/meson.build: use native wayland-scanner
- protocols: Don't update hdr metadata if image description is unchanged (#9776)
- protocols: ensure PointerConstraints activation occurs only after attched to InputManager (#10096)
- protocols: refactor class member vars (a-m) (#10265)
- protocols: refactor class member vars (core) (#10259)
- protocols: refactor class member vars (n-t) (#10273)
- protocols: refactor class member vars (types) (#10261)
- protocols: refactor class member vars (u-z) (#10282)
- refactor: cshader class to sshader struct (#10324)
- render, helpers: Call OpenGL destroyMonitorResources on disconnect (#10111)
- render: properly release rendered buffers (#9807)
- render: refactor class member vars (#10292)
- renderer/opengl: Extract shaders from source (#9600)
- renderer: always try to apply a mode if pixel size is invalid (#10291)
- renderer: precompute fullalpha (#10319)
- renderer: render fading out floating windows over fs
- renderer: render tiled fading out above other tiled windows
- screencopy: Handle explicit sync failure (#10050)
- screencopy: don't render cursor when frame doesn't want it
- screencopy: support hw cursors while sharing with cursor
- seat: avoid sending null surfaces in leave/enter events
- surfacestate: reset buffer bit before applying to current
- surfacestate: track and apply updated state
- synctimeline: check if fd is readable before wait (#9789)
- tablet: naive window refocusing (#10110)
- time: move to stl's clocks and move timer
- versionkeeper: create version file if not present (#9829)
- watchdog: remove watchdog
- window: don't deactivate unfocused xwayland windows in groups (#9781)
- window: make AsyncDialogBoxes not closeable
- window: send fractional scale on updateScaleTransform
- window: use stored size for new floating window when persistentsize is set (#10212)
- windowrules: allow incrementing window props (#9566)
- windows: refactor class member vars (#10168)
- workspaces: refactor class member vars (#10167)
- xcursormgr: include
- xdg-bell: avoid crashes on null toplevel
- xwayland: Cleanup server startup and FDs (#9769)
- xwayland: refactor class member vars (#10312)
- xwayland: sync primary selection with wayland (#9952)
- xwl: dont close the fd to early (#9715)
Special Thanks
Special thanks as always to these absolute chads for donating $$$ to help fund the project:
Top Supporters:
johndoe42, Amaan Q., Driwell, RaymondLC92, Robin B., taigrr, yyyyyyyan, ari-cake, Xoores, ExBhal, AuHunter, SA1G0N, Jas Singh, alukortti, MasterHowToLearn, arc-d3v, SomeMediocreGamer, Xafierz, Theory_Lukas
New Monthly Supporters:
len0rd, Semikiwi, joker1007, Michael-Buckley, Cubeman, Hamzah Ansari, Ramez, Rosslaew, -FR, ugsto, fipso, vx, Kilikoli, TBash, nikkehtine, Firstpick(FirstPick)
One-time Donators:
Yasen, Mantas, norlock, Nyx, scanhex, Raikas, Apheleia, bobblkabb, salfel, t1mp4, drzbida, johndurkot, Danielw_kiwi, hillsprig, Yehoslav, reference, themiguelps2, shayaharuno, FirstKix, Snepsts, mautz, Thomas Engheran, ril, Eric, folkdnd, R, flwo, Khargoosh, D.L, ZeulSoare, 🅳ιzzιєє🕶👌🏾, Guido Ferri, Adam, Aaronjamt, BennetLe, Freka, cairnan, bush, Monkey, HeartBlin, ncbo4zk4, Cespen, calumhalpin, Linus Palma, omnicroissant, VEN, Folkrt, eddiezane, dzendaa
MRs
- Simplify and fix hdr metadata setting by @UjinT34 in #9706
- xwl: dont close the fd to early by @gulafaran in #9715
- keybinds: add sendkeystate by @nnyyxxxx in #9599
- Groupbar: apply scaling factor to text by @ArkadyBuryakov in #9731
- pass: remove unusued timeline in texpass by @gulafaran in #9734
- fix minor ubsan errors by @gulafaran in #9743
- core: Don't damage the entire surface every frame by @PlasmaPower in #9763
- xwayland: Cleanup server startup and FDs by @PlasmaPower in #9769
- Extract shaders from source by @UjinT34 in #9600
- opengl: check for g_pHyprOpengl pointer by @gulafaran in #9791
- makefile: add new shaders to
make installheaders
by @micha4w in #9783 - protocols: Don't update hdr metadata if image description is unchanged by @PlasmaPower in #9776
- synctimeline: check if fd is readable before wait by @gulafaran in #9789
- Config option: binds:hide_special_on_workspace_change by @LeviVanDerMaas in #9728
- Fix matching monitor by description to allow space prefix by @emad-elsaid in #9788
- Fix the non-working tearing #9429 by @iddm in #9772
- core: fix null ref when resuming system by @nnyyxxxx in #9794
- core: fix artifacts when fullscreening by @nnyyxxxx in #9778
- anr: make pings configurable by @nnyyxxxx in #9782
- Don't force default cursor on config reload/monitor reconfigure by @X2E4VXpZKv in #9815
- layout: center floating window at cursor when picked up from fullscreen by @nnyyxxxx in #9780
- window: don't deactivate unfocused xwayland windows in groups by @nnyyxxxx in #9781
- versionkeeper: create version file if not present by @arminius-smh in #9829
- Groupbar text offset and upper gap by @ArkadyBuryakov in #9733
- nix module: load plugins using exec-once by @amadejkastelic in #9836
- ctm: fix crash when finishing ctm progress with a destroyed monitor by @PaideiaDilemma in #9835
- compositor: fix crash when moving a workspace to a monitor with size 0x0 by @PaideiaDilemma in #9848
- helpers: Add an async dialog box impl by @vaxerski in #9919
- DataDevice: position icon at cursor hotspot by @nnyyxxxx in #9895
- layout: properly track floating window position by @VirtCode in #9937
- swipe: fix swiping onto a new workspace bound to another monitor (#8176) by @kerty0 in #9927
- helpers: unbreak build on BSDs by @jbeich in #9982
- input/layers: Fix exclusive LS focus / refocus after unmap by @vaxerski in #9984
- core: refactor and improve surface commit by @ikalco in #9805
- CursorManager: Store cursor pixel data retrieved from X/HC as a copy. by @vaxerski in #9986
- xwayland: sync primary selection with wayland by @nnyyxxxx in #9952
- Permission Manager: add permission management for screencopy by @vaxerski in #9930
- xdg-shell: fix some null refs by @nnyyxxxx in #9992
- remove renderer finalDamage since it's unused by @ikalco in #9996
- fix crash in data device on shutdown by @ikalco in #9997
- input: add warp_on_toggle_special by @VirtCode in #9945
- cmake: do not install version.h.in by @alba4k in #10035
- Revert "pass: remove renderer finalDamage since it's unused (#9996)" by @vaxerski in #10039
- screencopy: Handle explicit sync failure by @PlasmaPower in #10050
- binds: drag_threshold for click/drag isolation by @alaricljs in #9839
- fix surface opaque and input regions not being updated by @ikalco in #10055
- fix(dwindle): ignore fullscreen window for positioning when use_active_for_splits=false by @rszyma in #9838
- IHyprLayout: respect minimum window size by @nnyyxxxx in #10017
- IHyprLayout: center floating window at cursor when picked up from fullscreen by @nnyyxxxx in #10063
- layerSurface: warp position and size before taking a snapshot by @vaxerski in #10054
- fix: 1x1 framebuffer creation by @psyvern in #10068
- fix: disconnected monitors are reconnected to an empty workspace by @matjam in #9874
- allow incrementing window props by @MightyPlaza in #9566
- core: wait for dmabuf readiness by @ikalco in #9806
- desktop: Damage subsurface when position changes by @PlasmaPower in #10094
- InputManager: add config option to disable keybinds by @nnyyxxxx in #10064
- ci: close unwanted issues automatically by @NotAShelf in #10106
- render, helpers: Call OpenGL destroyMonitorResources on disconnect by @PlasmaPower in #10111
- ctm: enable fade animation on nvidia driver versions 575 and above by @fxzzi in #10095
- fix PointerConstraints activation occurring before attached to InputManager by @bk304 in #10096
- Fix CCompositor::getMonitorInDirection does not return focused monitor by @syuzuki in #10114
- Refactor config classes vars by @davc0n in #10124
- input(tablet): naive window refocusing by @PtaxLaine in #10110
- debug: refactor class member vars by @davc0n in #10130
- managers: allow executing binds not bound to a key by @nnyyxxxx in #10102
- InputManager: add nofollowmouse by @nnyyxxxx in #9994
- compositor: refactor class member vars by @davc0n in #10141
- Hyprland toplevel mapping protocol by @WhySoBad in #9775
- Groupbar: Add options for setting group bar title font weight (and indicator gap) by @mhydock in #9617
- layers: refactor class member vars by @davc0n in #10149
- workspaces: refactor class member vars by @davc0n in #10167
- Fix order of urgency flag and event emmission by @jmoggr in #10163
- layerrules: add abovelock to render above lockscreen by @VirtCode in #9793
- helpers: properly support next/prev for workspace switching by @nnyyxxxx in #10074
- windows: refactor class member vars by @davc0n in #10168
- PermissionSystem: add perms for plugin loading by @vaxerski in #10184
- devices: refactor class member vars by @davc0n in #10206
- Use precomputed primaries conversion by @UjinT34 in #9814
- render:send_content_type setting by @UjinT34 in #9851
- feat(config): natural increase and decrease of brightness by @sand4rt in #10210
- DonationNag: ask after each major update by @vaxerski in #10213
- render: properly release rendered buffers by @ikalco in #9807
- helpers: refactor class member vars by @davc0n in #10218
- hyprerror: refactor class member vars by @davc0n in #10227
- layouts: refactor class member vars by @davc0n in #10228
- Change center_master_slaves_on_right to center_master_fallback by @Zetta1Reid0 in #10201
- hyprpm: move to system directories for storing plugins by @vaxerski in #10211
- hyprpm: unbreak build with libc++ by @jbeich in #10234
- inputs: refactor class member vars by @davc0n in #10230
- managers: refactor class member vars by @davc0n in #10242
- protocols: refactor class member vars (core) by @davc0n in #10259
- plugins: refactor class member vars by @davc0n in #10257
- layerrules: fix abovelock interactivity for touch input by @VirtCode in #10253
- Use vecnotinrect instead of !vecinrect by @Honkazel in #10262
- protocols: refactor class member vars (types) by @davc0n in #10261
- protocols: refactor class member vars (a-m) by @davc0n in #10265
- protocols: refactor class member vars (n-t) by @davc0n in #10273
- Fix empty flag not selecting active workspace by @phonetic112 in #10237
- protocols: refactor class member vars (u-z) by @davc0n in #10282
- hyprpm: Minor optimizations and refactor of helpers and progress bar by @nots1dd in #10246
- Fix renderer crashing on uninitialized FBs due to a null mode by @vaxerski in #10291
- render: refactor class member vars by @davc0n in #10292
- Feature: add monitorremovedv2 IPC event by @blackthorne7 in #10229
- fix(window): use stored size for new floating window when persistentsize is set by @yuukibarns in #10212
- Add option for animating workspaces as if the first and last were adjacent by @CyrenArkade in #10277
- hyprpm: add missing return by @Zebra2711 in #10299
- popup: damage old size on unmap as well as new by @vaxerski in #10306
- hyprpm: clean up root access and properly check input by @vaxerski in #10304
- xwayland: refactor class member vars by @davc0n in #10312
- DMABuffer: reserve vector and avoid UB by @gulafaran in #10317
- renderer: precompute fullalpha by @gulafaran in #10319
- refactor: cshader class to sshader struct by @davc0n in #10324
- set fullscreenstate on movetoworkspace by @MightyPlaza in #10303
- layout: allow interacting with pinned windows when fullscreened by @nnyyxxxx in #10326
- layout: properly assign workspace and monitor when moving a child to the parent by @vaxerski in #10338
- desktop: cleanup code and use std::ranges by @nots1dd in #10289
- socket2: fix order of window events on map by @vaxerski in #10341
New Contributors
- @ArkadyBuryakov made their first contribution in #9731
- @LeviVanDerMaas made their first contribution in #9728
- @emad-elsaid made their first contribution in #9788
- @X2E4VXpZKv made their first contribution in #9815
- @arminius-smh made their first contribution in #9829
- @amadejkastelic made their first contribution in #9836
- @kerty0 made their first contribution in #9927
- @psyvern made their first contribution in #10068
- @matjam made their first contribution in #9874
- @bk304 made their first contribution in #10096
- @syuzuki made their first contribution in #10114
- @mhydock made their first contribution in #9617
- @jmoggr made their first contribution in #10163
- @sand4rt made their first contribution in #10210
- @nots1dd made their first contribution in #10246
- @blackthorne7 made their first contribution in #10229
- @yuukibarns made their first contribution in #10212
- @CyrenArkade made their first contribution in #10277
- @Zebra2711 made their first contribution in #10299
Full Changelog: v0.48.0...v0.49.0