After a while, it is my pleasure to release 0.48.0 to everyone!
Hyprland is now 3 years old since March 16th, happy birthday! :)
Breaking changes:
opengl:force_introspection
has been removedrender:allow_early_buffer_release
has been removed- windowrule v1 syntax is gone.
windowrule
now behaves likewindowrulev2
, deprecating thewindowrulev2
keyword
New features:
- animations: add the gnomed animation style for windows
- core: add an ANR dialog
- desktop: add ability to target pinned windows in workspace rules (#9344)
- dispatchers: add cyclenext hist option (#9055)
- groupbar: add an option to adjust gap sizes (#9578)
- hyprctl: Add IPC support for Hyprsunset (#9315)
- hyprpm: add --hl-url for custom forks
- input: add flip_x and flip_y for touchpad (#9481)
- input: add follow_mouse_threshold (#9392)
- keybinds: Added
toggleswallow
dispatcher (#5548) - master: add option to keep master window position (#9537)
- protocols: add version 2 of ext-idle-notify-v1 protocol (#8959)
- renderer: add simple color management (#9506)
- socket2: add activespecialv2 (#9530)
- syncobj: ensure we only add waiters on succesful checks (#9412)
- windowrules: add option to allow size persistence between app launches (#9422)
- xwayland: add INCR support for clipboard transfers (#9434)
Fixes:
- cmake: add CXX_STANDARD_REQUIRED flag to ensure c++ version must be c++26 (#9476)
- config/descriptions: add enable_anr_dialog
- config/hyprctl: fix keyword not updating autoreload
- config: fix a possible crash in the monitor config parser (#9460)
- core,hyprctl: clang, clang-tidy, typo fixes and dtors changes (#9233)
- core/Compositor.hpp: fix non-relative Texture import (#9703)
- core/compositor: Fix dropping cursor buffer data early (#9700)
- core: Add null activeWorkspace check in moveWorkspaceToMonitor (#9503)
- core: fix DS and VRR automation (#9334)
- core: add default initializers for ccompositor ptrs
- core: add mallopt to modify trim threshold
- datadevice: fix wrong param (#9370)
- deps: add libinotify-kqueue on BSDs after 8dd2cd4 (#9197)
- desktop: fix segfault when destroying a partially create layer surface (#9247)
- desktop: move popups to UPs and fix missing subsurface resource
- groupbar: fix groupbar missing when indicator_height is <= 0
- hyprctl/config: fixup config descriptions, fill out missing ones, provide more data
- input: Fix clicking through groupbar tabs (#9606)
- input: fix touch calibration matrix overriding
- input: fixup mouse check for flipping x / y (#9529)
- internal: Fix compiler warnings (#9646)
- internal: fix include paths (#9500)
- keybinds: fix some errors not returning a failure (#9416)
- pass/rect: fix bounding / opaque regions
- presentation: log a fixme when there is a feedback leak
- protocols: Fix IWaylandProtocol onDisplayDestroy m_pGlobal double-free (#9507)
- protocols: Fix blocked color management get_information (#9563)
- protocols: Fix cursor shape protocol valid shape check (#9547)
- protocols: fix wrong iface for xdg_dialog
- renderer: add an option to disable cm and auto-skip cm if not necessary
- renderer: fix cm_fs_passthrough (#9698)
- renderer: fix fade out on silent moves to special
- renderer: fix missing null checks to prevent crashes (#9332)
- renderer: fix window offset for dragged windows (#9629)
- renderer: various fixes towards improving gpu calls robustness (#9188)
- subsurface: fix invalid parent typo
- toplevelexport: fix transformed origin for shm buffers (#9343)
- window: fix missing surface null checks to prevent crashes (#9350)
- xwayland: fix a possible clipboard race condition (#9394)
Other:
- CI/Nix: remove deprecated magic-nix-cache-action
- CMake: install frag files
- CMake: install frag files (for real this time)
- Meson: include frags in globber
- Nix: change meson buildtype from debugoptimized to debug
- XWayland: restore the abstract socket, and make it optional (#9615)
- animation: don't immediately disconnect active vars during tick (#9272)
- animations: sync inactive/active border angles when using borderangle animations (#9401)
- anr: add a note for no pid dialogs
- anr: add xwayland support (#9456)
- ci: Fail on warnings (#9668)
- cmonitor: guard old workspace
- compositor: don't iterate over unmapped ls-es in vectorToLS
- compositor: guard null ws in updating fade
- config/defaultConfig.hpp: windowrulev2 -> windowrule (#9663)
- config: actually set initial beziers (#9400)
- config: default movefocus_cycles_fullscreen to false
- config: nuke windowrule v1 syntax
- config: set no_hw_cursors to auto by default and disable on tearing
- configWatcher: watch both symlinks and canonical paths (#9219)
- configmgr: properly free glob memory
- core/compositor: Correctly track SHM buffer damage (#9678)
- core: avoid .at() and use [] operator (#9347)
- core: begin using CFileDescriptor from hyprutils (#9122)
- core: cleanup some smart pointer usage
- core: cleanup window properties
- core: ignore internal move workspace calls if the workspace doesn't change (#9516)
- core: prevent crash when monitor list is empty (#9572)
- core: update decorations on lockgroups (#9573)
- descriptions: remove allow_early_buffer_release
- desktop: move popup and subsurface ctors to factories
- dmabuf: pop buffer on failure (#9620)
- env: move XDG_SESSION_TYPE to before backend init (#9390)
- example/hyprland.conf: windowrulev2 -> windowrule (#9662)
- groupbar: pass alpha to title tex render pass
- groupbar: remove 2 pixel gap above groupbar (#9664)
- groupbar: remove recursive window recalc (#9561)
- groupbar: various visual improvements
- groups: deactivate unfocused windows in groups (#9354)
- hyprctl/layers: print pid for layershell clients (#9468)
- hyprctl: Error handling improvements, minor cleanups (#9536)
- hyprctl: Extract IPC code to separate method (#9223)
- hyprctl: don't return empty str if there are no global shortcuts
- hyprpm: return 1 when plugins are outdated (#9694)
- ikeyboard: free xkbSymState in clearManuallyAllocd
- input: Provide a non-zero time for button release triggered during window unmap. (#9513)
- input: change window grab cursor to closed hand (#9196)
- internal: redirect exec'd app output to /dev/null (#9411)
- internal: remove unused variable (#9402)
- internal: removed Herobrine
- internal: use isNumber from hyprutils (#9467)
- keybinds): prevent crash when executing movewindoworgroup (#9551)
- managers: Use primary backend for cursor swapchain (#9645)
- monitor: Optimize direct scanout damage (#9653)
- monitor: avoid crash on expired special workspace monitor owner
- monitor: preferred mode now tries first 3 modes if preferred fails before erroring (#9246)
- monitor: report a scheduled frame when tearing on cursor move
- monitor: round refresh rates in sorting modes
- nix/module: toHyprconf -> toHyprlang (#9221)
- nix: remove wayland-protocols overlay and bump flake (#9613)
- opengl: simplify cm pipeline
- pass: add input region debug
- popup: improve ::at() behavior
- popup: stop refocusing at unmap
- popup: take xdg geometry into account in input calcs
- protocols: Ensure protocol dtors are called in ProtocolManager dtor (#9521)
- protocols: Support content-type-v1 proto (#9226)
- protocols: Support wp color management proto (#9444)
- protocols: implement hyprland-ctm-control rev 2 (#9267)
- refactor: clang-tidy in compositor (#9241)
- render: enforce framebuffer offloading and remove introspection toggle (#9217)
- renderer: calculate UV using both pixel and monitor dimensions (#9210)
- renderer: delete now redundant ifdefs (#9651)
- renderer: disable explicit if aquamarine output doesn't support it (#9396) (#9398)
- renderer: don't crash if cm fails to compile
- renderer: remove spammy log
- screencopy, render: Use explicit sync for screencopy (#9697)
- scripts/generateVersion.sh: convert to posix (#9433)
- scripts: don't overwrite generated version if we're not in a git repo
- seatmgr: avoid crash on null surfs
- session-lock: send locked when in unsafe state (#9399)
- splashes: update for 3ya
- subsurfaces: dont try to access popup surfaces when handling subsurface updates (#9421)
- syncobj: dont crash compositor on protocol errors (#9627)
- syncobj: refactor point timelines (#9689)
- syncobj: restore SHM buffer reset (#9675)
- syncobj: use eventfd instead of stalling fd checks (#9437)
- tablet: take
active_area_size
into account when sending tip event (#9325) - touch: reject swipe on locked sessions
- types: Upgrade buffer ref from WP to SP (#9677)
- window: move size reporting to animation begin callback (#9298)
- windowrules: store floating size on close instead of resize (#9569)
- windows: respect noinitialfocus with workspace changes (#9586)
- workspaces: update persistence on workspace rename (#9368)
- xcursor: move config check to sync gsettings (#9473)
- xwayland: configure on a configure request and cleanup geometry conversion (#9375)
- xwayland: correct pointer coordinate mismatch in X11 windows (#9259)
- xwayland: handle window coords correctly (#9238)
- xwayland: improve dnd and cleanup (#9405)
- xwayland: prevent invalid window configurations for X11 apps (#9253)
- xwayland: respect window size set by configure requests (#9190)
- xwayland: send synthetic configure events (#9193)
Special thanks
Special thanks to these people for donating to help the project continue:
Top Supporters:
Azelphur, arc-nix, ExBhal, SomeMediocreGamer, Robin B., yyyyyyyan, taigrr, Amaan Q., Xoores, Jas Singh, Theory_Lukas, JanRi3D, ari-cake, alukortti, RaymondLC92, MasterHowToLearn, johndoe42, Abdulaziz Al-Khater, AuHunter
New Monthly Supporters:
Brad S, tidal608, Wateir, Firstpick(FirstPick), xyrd, realivlis, DeepBlue416, omniprezenze, azunades, aljoshare, Felix, danksa, Litheos, theailer
One-time Donators:
SymphonySimper, FlorentL, Birbirl, MeaTLoTioN, elia, mearkat7, Darmock, KD, Yehoward, nyatta, Urbinholt, InTerFace, Marcos92, Rei (os.rei), 6thScythe, sayykii, HowlVenger, Massis, Somebody, 46620, skk9, Jeffrey, Hari, IgorJ, neriss, Sleroq, Insomnes, Stefano, AJ, Troy, JNC, Gery, Dafitt, Stefan Ernst, quake, lharlanx, pscschn, Bex Jonathan, AliAhmad02, KomariSpaghetti, wjyzxcv, Daniel, Zoltar358, Airor 987, CBeerta, lcassa, Guy incognito , nobody, m3hransh, Lunics, GeoffC, Tamas Tancos, mikelpint, Nathan Lepori, fxj9a, Volodymyr Shkvarok, Haltesh, omnicroissant, grmontpetit, jw, CheeseHunter117, Hunter Wesson, eternal, ddubs, noname, bones, pixel <3, eltwig, Jose, NN, Mikol, Pekka, Andi, Treeniks, derethil, dfseifert, munsman, Cespen, jlevesy, Bill Fucking Nye, Kumungus, crappy, Alin742, Nicholas Roth, sijink, alba4k, Barry, MK, Yasen
MRs
- ci: clang-format fix by @littleblack111 in #9145
- xwayland: send synthetic configure events by @DDoSolitary in #9193
- nix: fix duplicate inputs and update flake.lock by @matt1432 in #9195
- Unbreak build on FreeBSD via libinotify-kqueue by @jbeich in #9197
- xwayland: respect window size set by configure requests by @DDoSolitary in #9190
- fix two minor asan reported leaks by @gulafaran in #9201
- fix(render): calculate UV using both pixel and monitor dimensions by @nnyyxxxx in #9210
- change window grab cursor to closed hand by @mageowl in #9196
- core,hyprctl: clang, clang-tidy, typo fixes and dtors changes by @Honkazel in #9233
- begin using CFileDescriptor from hyprutils by @gulafaran in #9122
- fix(xwayland): handle window coords correctly by @nnyyxxxx in #9238
- preferred mode now trys first 3 modes if preferred fails before erroring by @ikalco in #9246
- fix(xwayland): prevent invalid window configurations for X11 apps by @nnyyxxxx in #9253
- Extract IPC code to separate method by @aaronjamt in #9223
- desktop: fix segfault when destroying a partially create layer surface by @BlueZeeKing in #9247
- src/config/ConfigWatcher.cpp: watch both symlinks and canonical paths by @fufexan in #9219
- fix(xwayland): correct pointer coordinate mismatch in X11 windows by @nnyyxxxx in #9259
- perf(render): enforce framebuffer offloading and remove introspection toggle by @nnyyxxxx in #9217
- animation: don't immediately disconnect active vars during tick by @PaideiaDilemma in #9272
- Nix: change meson buildtype from debugoptimized to debug by @micha4w in #9290
- protocols: implement hyprland-ctm-control v2 by @outfoxxed in #9267
- refactor: clang-tidy in compositor by @Truenya in #9241
- Support content-type-v1 proto by @UjinT34 in #9226
- feat: cyclenext hist option by @Truenya in #9055
- Added
toggleswallow
dispatcher by @tomben13 in #5548 - fix(render): add null checks to prevent crashes by @nnyyxxxx in #9332
- nix: add hydraJobs output for aggregating Hyprland build jobs by @NotAShelf in #9338
- avoid .at() and use [] operator by @gulafaran in #9347
- window: move size reporting to animation begin callback by @PaideiaDilemma in #9298
- toplevelexport: fix transformed origin for shm buffers by @WhySoBad in #9343
- desktop: add ability to target pinned windows in workspace rules by @kreejzak in #9344
- ensure framebuffer textures are detached and deleted, avoid leaving framebuffers bound when not needed by @gulafaran in #9188
- fix(groups): deactivate unfocused windows in groups by @nnyyxxxx in #9354
- datadevice: small comp fix by @Honkazel in #9370
- fixes #9322, take
active_area_size
into account when sending tip event by @clamydo in #9325 - Implement version 2 of ext-idle-notify-v1 protocol by @jjramsey in #8959
- fix(env): move XDG_SESSION_TYPE to before backend init by @nnyyxxxx in #9390
- session-lock: send locked when in unsafe state by @PaideiaDilemma in #9399
- animations: sync inactive/active border angles when using borderangle animations by @PaideiaDilemma in #9401
- fix(render): disable explicit if aquamarine output doesn't support it by @aruhier in #9398
- config: actually set initial beziers by @PaideiaDilemma in #9400
- remove unused variable by @Honkazel in #9402
- syncobj: ensure we only add waiters on succesful checks by @gulafaran in #9412
- fix(exec): redirect app output to /dev/null by @nnyyxxxx in #9411
- Update persistence on workspace rename by @hariseldon78 in #9368
- fix(xwayland): prevent clipboard race condition by @nnyyxxxx in #9394
- fixed socket not returning errors where appropriate by @andrewandreii in #9416
- xwayland: configure on a configure request and cleanup geometry conversion by @PaideiaDilemma in #9375
- implemented follow_mouse_threshold by @andrewandreii in #9392
- fix(subsurface): dont try to access popup surfaces when handling subsurface updates by @nnyyxxxx in #9421
- refactor(build): convert generateVersion to posix by @nnyyxxxx in #9433
- fix(xwayland): add INCR support for clipboard transfers by @nnyyxxxx in #9434
- Add IPC support for Hyprsunset by @aaronjamt in #9315
- anr: add xwayland support by @vaxerski in #9456
- xcursor: move config check to sync gsettings by @gulafaran in #9473
- signalActive: use isNumber from hyprutils by @littleblack111 in #9467
- Less crash-prone monitor config parser by @cyanbun96 in #9460
- refactor(xwayland): improve dnd and cleanup by @nnyyxxxx in #9405
- Support wp color management proto by @UjinT34 in #9444
- layer: getPID() function by @littleblack111 in #9468
- nix: wp-protocol version bump by @Soliprem in #9494
- Fix ColorManagement.hpp include path in Monitor.hpp by @zjeffer in #9500
- core: Add null activeWorkspace check in moveWorkspaceToMonitor by @PlasmaPower in #9503
- protocols: Fix IWaylandProtocol onDisplayDestroy m_pGlobal double-free by @PlasmaPower in #9507
- Provide a non-zero time for button release triggered during window unmap by @ScatteredRay in #9513
- Fix fullscreening in sober by @phonetic112 in #9516
- nix/module: toHyprconf -> toHyprlang by @fufexan in #9221
- protocols: Ensure protocol dtors are called in ProtocolManager dtor by @ikalco in #9521
- feat(input): add flip_x and flip_y for touchpad by @nnyyxxxx in #9481
- feat(ipc): add activespecialv2 by @matt-fff in #9530
- Error handling improvements, magic number replacement and removed unused header files. by @abdalrahmanshaban0 in #9536
- protocols: Fix cursor shape protocol valid shape check by @PlasmaPower in #9547
- fix(input): replace not mouse check by @nnyyxxxx in #9529
- feat(master): add option to keep master window position by @nnyyxxxx in #9537
- fix(keybinds): prevent crash when executing movewindoworgroup by @nnyyxxxx in #9551
- protocols: Fix blocked color management get_information by @PlasmaPower in #9563
- feat(window): add option to allow size persistence between app launches by @nnyyxxxx in #9422
- fix(window): store floating size on close instead of resize by @nnyyxxxx in #9569
- fix(compositor): prevent crash when monitor list is empty by @nnyyxxxx in #9572
- fix direct scanout glitches by @ikalco in #9556
- update decorations on lockgroups by @MightyPlaza in #9573
- fix(window): respect noinitialfocus by @nnyyxxxx in #9586
- Allow adjusting gap size for groupbar by @phonetic112 in #9578
- Simple color management by @UjinT34 in #9506
- nix: remove wayland-protocols bump by @andresilva in #9613
- syncobj: use eventfd instead of stalling fd checks by @gulafaran in #9437
- nix: mesa -> libgbm by @andresilva in #9612
- Fix clicking through groupbar tabs by @phonetic112 in #9606
- Fix window offset when a window is dragged while a workspace is animated by @Blackilykat in #9629
- syncobj: dont crash compositor on protocol errors by @gulafaran in #9627
- Meson: include frags in globber by @fufexan in #9623
- fix hw cursor not being committed cause of same main buffer in DS by @ikalco in #9648
- groupbar: remove recursive window recalc by @nnyyxxxx in #9561
- managers: Use primary backend for cursor swapchain by @PlasmaPower in #9645
- misc: Fix compiler warnings by @PlasmaPower in #9646
- monitor: Optimize direct scanout damage by @PlasmaPower in #9653
- renderer: only commit hw cursor stuff if needed by @ikalco in #9654
- renderer: delete useless ifdefs by @Honkazel in #9651
- updating windowrule on example/hyprland.conf by @tachyglossues in #9662
- Update defaultConfig.hpp by @Kam1k4dze in #9663
- ci: Fail on warnings by @PlasmaPower in #9668
- dmabuf: pop buffer on failure by @gulafaran in #9620
- XWayland: restore the abstract socket, make it optional, extend the default permissions for the regular X Unix socket by @PtaxLaine in #9615
- Remove 2 pixel gap above groupbar by @phonetic112 in #9664
- syncobj: restore SHM buffer reset by @gulafaran in #9675
- types: Upgrade buffer ref from WP to SP by @PlasmaPower in #9677
- Fix DS and VRR automation by @UjinT34 in #9334
- syncobj: store CDRMSyncobjTimelineResource as SP by @gulafaran in #9689
- screencopy, render: Use explicit sync for screencopy by @PlasmaPower in #9697
- hyprpm: return 1 when plugins are outdated by @alba4k in #9694
- core: Correctly track SHM buffer damage by @PlasmaPower in #9678
- Fix cm_fs_passthrough by @UjinT34 in #9698
- core: Fix dropping cursor buffer data early by @PlasmaPower in #9700
- Fix non-relative import in Compositor.hpp by @entailz in #9703
New Contributors
- @mageowl made their first contribution in #9196
- @aaronjamt made their first contribution in #9223
- @BlueZeeKing made their first contribution in #9247
- @micha4w made their first contribution in #9290
- @WhySoBad made their first contribution in #9343
- @kreejzak made their first contribution in #9344
- @clamydo made their first contribution in #9325
- @jjramsey made their first contribution in #8959
- @andrewandreii made their first contribution in #9416
- @cyanbun96 made their first contribution in #9460
- @Soliprem made their first contribution in #9494
- @PlasmaPower made their first contribution in #9503
- @ScatteredRay made their first contribution in #9513
- @matt-fff made their first contribution in #9530
- @abdalrahmanshaban0 made their first contribution in #9536
- @Blackilykat made their first contribution in #9629
- @tachyglossues made their first contribution in #9662
- @PtaxLaine made their first contribution in #9615
- @entailz made their first contribution in #9703
Full Changelog: v0.47.0...v0.48.0