At last, a very large update 0.42.0 has finally dropped!
Notable changes
- Wlroots has been dropped, and is no longer a dependency of Hyprland.
- Explicit sync support has been added and will be automatically turned on/off depending on your setup. For some select nvidia users, this might cause glitches. In such cases, disable it with
render:explicit_sync = false
- Old protocol implementations redone in our newer, more memory-safe impl style (thanks @ikalco!)
- In-house XCursor implementation for legacy themes (thanks @gulafaran!)
- Tons and tons of fixes and performance improvements!
Breaking changes
misc:no_direct_scanout
->render:direct_scanout
fakefullscreen
has been dropped in favor of the newfullscreenstate
dispatcher
News for packagers
- New dependency: aquamarine
- Dropped submodule: wlroots
New features:
- config: add option to exit window while retaining fullscreen (#516) (#6880)
- core: Add missing header for libc++ after e989a0b (#7158)
- core: add a destructor to CHyprOpenglImpl and avoid wl_container_of undefined behaviour (#7101)
- crashreporter: add date and flags to crash report (#7028)
- debug: add Nvidia driver info (#6715)
- flake: add clang-tools to devShell (#6916)
- gitignore: add CMake residual files
- hyprpm: add short error code explanations
- internal: Add functions to hyprctl header (#6745)
- keybinds: add bindp and noshortcutsinhibit (#7017)
- keybinds: add safeguard to mousebinds (#7034)
- pluginapi: Add force reload of config at the end of plugin initialization (#7099)
- pointer: change min cursor padding to 0 (#6027)
- socket2: Add windowtitlev2 event which includes the window address (#6856)
- touch: add touch swipe invert config (#6940)
Fixes:
- border: fixup infinite recursion
- compositor: fix general:extend_border_grab_area (#7214)
- compositor: fix log typos (#7111)
- configmgr: fix warning
- core/surface/buffer: Buffer lock/release fixes (#7110)
- core/surface: fixup a few pointer handling edge cases
- core: Fix crash on opening chromium (#6932)
- core: fix a few ubsan issues reported at exit of hyprland (#6699)
- decorations: fix infinite recursion on no_gaps when only (#7169)
- drm-syncobj: fixup fd leak with timelines
- hyprctl: increase hyprctl timeout to 5s to fix #6801 (#7152)
- ime-relay: fix crash on nullptr surface focus
- input: Fix
hyprctl switchxkblayout
not actually changing layout (#7070) - input: fix capabilities enum types passed
- input: fix invalid usage of dev in setTouchDeviceConfigs
- input: fix keyboard leds with multiple keyboards (#7079)
- input: fix leds on kb creation (#7206)
- internal: fix fullscreen typos (#7134)
- keybinds: fix NoSymbol keybinds (#7199)
- keybinds: fix movewindow float to 0 (#6777)
- layersurface: fixup focus issues in onUnmap
- layout: fix dynamic rules not updating after setting fullscreen (#7129)
- meson: fix wlroots-hyprland dep checks (for libliftoff patch to work) (#6736)
- output: minor tearing fixes
- pointer: fix buffer crash (#7131)
- presentation-feedback: fix invalid values sent after aq merge
- renderer: Explicit sync fixes (#7151)
- renderer: fix a few xray regressions (#6855)
- renderer: fixup crashes on inaccessible files for bg
- renderer: fixup nvidia driver version checks
- renderer: partially revert previous xray fix (#6868)
- session: fix activate events being always treated as on (#6696)
- sessionLock: fix the check for locking a locked session (#6843)
- shortcutsInhibit: fix crash
- style: fix clang-format
- surface: fix zero_scaling xwayland damage
- surface: fixup logical damage size calculations
- toplevelexport: fix flipped r/b channels when sharing windows (#6861)
- touch: fix touch swipe invert config (#7014)
- virtual-pointer: fixup virtual pointer warp events
- wayland/compositor: fixup buffer damage tracking for wl_shm buffers
- wayland/compositor: fixup double buffer releases
- wayland/surface: fixup self-owning surface roles
- xdg-shell: fix xdg-positioner y-flip (#7094)
- xdg-shell: fixup unassigned wl surfaces to xdg surfaces
- xwayland: fix high cpu idle usage
- xwayland: fix setting title prop (#6809)
- xwayland: fixup WM_SIZE_HINTS handling according to ICCCM
- xwm: Fix xwayland black window bug after losing focus (#6966)
Other:
- CMake, Meson, Nix: replace props.json with VERSION
- CMake, Meson: install config and wallpapers to DATADIR/hypr
- CMake: Suppress CMake warning about GNUInstallDirs
- Completions: use only awk (#6763)
- Core: Move to aquamarine (#6608)
- Nix: remove meson (used by wlroots)
- compositor: ignore setting surface scanout if DS is disabled
- compositor: implement wayland socket handover (#6930)
- compositor: minor cleanups for fading out layers
- compositor: simplify getWindowFromSurface
- config: avoid using initial ws tracking for exec-once
- config: don't crash when getenv HOME returns null
- config: use hyprutils helper (#6891)
- core/surface: drop map/unmap events in member funcs
- core: Improve handling of window properties (#6776)
- core: Properly shutdown wl display (#7018)
- core: avoid locking 2 wayland sockets (#6971)
- core: emit unmap event after unmap in surface destroy
- core: move to steady_clock where applicable
- cursor: Better xcursor implementation (#7178)
- cursormgr: avoid scanning ill formed inherit (#7211)
- cursormgr: implement inheriting themes for xcursor (#7197)
- debug: dont manually unlock the lock_guard (#7210)
- debug: get rid of useless 1s in logs (#6969)
- egl: attempt a 3.2 egl context first
- egl: avoid setting debug mode and handle legacyrenderer
- egl: require gles 3.0 only
- egl: support getting the device via platform_device
- ext-foreign-toplevel: Send done after title and class (#6857)
- hyprctl completions: Use only awk rather than grep + awk
- hyprctl: link to much less libraries (#7212)
- hyprerror: minor stylistic changes
- hyprpm: execute all git commands regardless of fails
- hyprpm: init submodules after resets
- input: Emulate discrete scrolling from v120 events (#6881)
- input: don't simulate mouse movement on focus change in follow_mouse = 2/3 if no_warps is false (#7015)
- input: refocus last window on keyboard unfocusable surfaces
- input: unify removing currentlyDraggedWindow (#7071)
- inputmgr: ensure we dont divide by zero (#6713)
- internal: refactor fullscreen states (#7104)
- internal: removed Herobrine
- internal: some minor fd/socket cleanups and make logging thread safe (#7123)
- keybinds: allow toggling fullscreenstate (#7128)
- keybinds: handle monitor change in moveWindowIntoGroup (#7030)
- keybinds: handle null monitor in pinActive (#7122)
- keybinds: improve fullscreenstate toggling (#7174)
- keybinds: never switch to another monitor with per_monitor (#6665)
- keybinds: remove toggleopaque (#7024)
- keyboard: properly update keymap state and fd on keymap changes
- keyboard: update xkb state after key event
- layer-shell: avoid crashes on unmap (#7092)
- layer-shell: properly map and unmap surface and propagate unmap events
- layer-shell: validate exclusiveEdge and don't set it as top by default (#7006)
- layershell: don't throw misaligned error on exclusive edge 0
- layersurface: null check for surface validity before unmap()
- layout: update workspace rules on layout change (#6878)
- meson: install wayland.hpp header
- opengl: destroy cairo image surface after use
- output: submit damage to kms
- pointer-constraint: set lifetime correctly
- pointer/hw: extend cursor swapchain to 3
- pointer: round position when rendering software cursors
- pointer: update geometry after unplug events
- pointer: use preMonitorCommit for resetting render state
- protocols: Move globalshortcuts impl (#7102)
- protocols: move screencopy and toplevel export to hyprwayland-scanner (#7065)
- protocols: move text-input-v1 to hyprwayland-scanner (#7096)
- renderer/layer-shell: use explicitly set exclusiveEdge (#6984)
- renderer: Make shader time always count from zero (#6903)
- renderer: don't skip back background on preBlurQueued
- renderer: don't use the surface counter in popup iterations
- renderer: drastically optimize bg texture creation
- renderer: drop redundant spammy trace log
- renderer: guard layer in renderLayer
- renderer: untransform textures matching display transform
- renderer: use session lock alpha for rendering lacking locks
- seat: don't send keyboard data without a keyboard cap (#6697)
- session-lock: send
locked
after the lock screen is properly rendered (#6850) - sessionLock: don't sendLocked when session lock has already been destoyed (#7150)
- sessionLock: focus lock on creation based on mouse position (#6658)
- surface: avoid crashes on fading out layers
- surface: emit unmap before unmapping and releasing the buffers
- tablet: Send .frame() on .proximity_out() (#6761)
- touch: set lastInputTouch on every event
- virtualptr: allow binding to output
- virtualptr: map to entire screen if no output is provided
- wayland/compositor: drop pending buffer ref if synchronous
- wayland/compositor: release buffers on unmap
- wayland/output: avoid sending events to dead outputs
- window/ls: reset core signals after destroy
- window: drop ack requirement for applying pending reported size
- window: override noMaximize if new window takes over fullscreen (#6812) (#6870)
- wl_seat: avoid sending events to objects without caps
- workspaces: don't try to reopen special workspaces (#6802)
- xcursor: rework bootleg xcursor (#7140)
- xdg-shell: completely rewrite xdg-positioner (#7067)
- xdg-shell: make xdg-positioner flip target greatest available space (#7209)
- xwayland: avoid unfocusing on OR child focuses
- xwayland: break cyclic loop of parents (#6722)
- xwm: drop invalid case for clearing X focus
Special thanks
Special thanks as always to these people for donating:
- FUTO
- Xoores
- taigrr
- SomeMediocreGamer
- Azelphur
- ari-cake
- alukortti
- MasterHowToLearn
- Theory_Lukas
- maltbeverage
- sneed
- Lunix
- king_hreidma
- Opdog
- R
- Daniele
- Josh
- Jahn16
- dieg0
- cjmcguire88
- Gabriel Chamon
- tradiff
- Saulimedes
- jii
- Ryan
- Plyply
- Jordan Lambert
- Seb
- Strelok
- cupcakemonster
- tricked
- blueteamboss
- AlexVanAxe
- Torwalt
- Volodymyr Shkvarok
- radicaltray
MRs
- sessionLock: focus lock on creation based on mouse position by @outfoxxed in #6658
- fix: never switch to another monitor(when
_per_monitor
specified) by @Truenya in #6665 - fix a few ubsan issues reported at exit of hyprland by @gulafaran in #6699
- Fix
listener_sessionActive
to handle an event correctly when the session get inactivated by @harenayo in #6696 - Fix #6279: prevent sending keymap or repeat info events by keyboards without keyboard capability by @harenayo in #6697
- inputmgr ensure we dont divide by zero by @gulafaran in #6713
- Nvidia driver info by @UjinT34 in #6715
- xwayland: break cyclic loop of parents by @gulafaran in #6722
- fix wlroots-hyprland dep checks (for libliftoff patch to work) by @ikalco in #6736
- fix: change min cursor padding to 0 by @drendog in #6027
- hyprctl completions: Use only awk rather than grep + awk by @Lincoln-Yuji in #6744
- [Tablet] Send Frame on ProximityOut by @Agent00Ming in #6761
- Removing unnecessary pipes for completions by @Lincoln-Yuji in #6763
- fix movewindow float to 0 by @MightyPlaza in #6777
- config: don't crash when getenv HOME returns null by @PaideiaDilemma in #6780
- Add functions to hyprctl header by @Yusuf-Duran in #6745
- workspaces: don't try to reopen special workspaces by @VirtCode in #6802
- flake.lock: update by @andresilva in #6814
- fix setting xwayland title prop by @ikalco in #6809
- Improve handling of window properties by @MightyPlaza in #6776
- sessionLock: fix the check for locking a locked session by @PaideiaDilemma in #6843
- meson: install wayland.hpp header by @VirtCode in #6845
- fix: xray regressions by @MightyPlaza in #6855
- session-lock: send
locked
after the lock screen is properly rendered by @MikeWalrus in #6850 - Send done after title and app id events for ForeignTopLevel protocol by @caffineehacker in #6857
- toplevelexport: fix flipped r/b channels when sharing windows by @dedsm in #6861
- Add windowtitlev2 event for the socket which includes the window title by @caffineehacker in #6856
- partial revert previous xray fix by @MightyPlaza in #6868
- fix: new_window_takes_over_fullscreen=1, overridingNoMaximise (#6812) by @nktnet1 in #6870
- update workspace rules on layout change by @MightyPlaza in #6878
- feat: option to exit window while retaining fullscreen (#516) by @nktnet1 in #6880
- Config: use hyprutils helper by @fufexan in #6891
- Make shader time always count from zero by @PartyWumpus in #6903
- flake: adding clang-tools to devShell by @Ciflire in #6916
- [Scroll Wheel] Emulate discrete scrolling from v120 events by @Agent00Ming in #6881
- compositor: implement wayland socket handover by @Ferdi265 in #6930
- Fix crash when opening chromium by @phonetic112 in #6932
- Core: Move to aquamarine by @vaxerski in #6608
- Add touch swipe invert config by @khachbe in #6940
- Fix xwayland black window bug after losing focus by @UjinT34 in #6966
- fix: avoid locking 2 wayland sockets by @diniamo in #6971
- flake: update xdph by @diniamo in #6975
- get rid of 1 in logs by @ikalco in #6969
- renderer: use explicitly set exclusiveEdge by @darkwater in #6984
- validate exclusiveEdge and don't set it as top by default by @ikalco in #7006
- flake: update aquamarine by @leon-erd in #7012
- touch: fix touch swipe invert config by @leon-erd in #7014
- add bindp and noshortcutsinhibit by @MightyPlaza in #7017
- add date and flags to crash report by @MightyPlaza in #7028
- Properly shutdown wl display by @ikalco in #7018
- handle monitor changes in moveWindowIntoGroup by @MightyPlaza in #7030
- Don't simulate mouse movement on focus change in follow_mouse = 2/3 if no_warps is false by @antonok-edm in #7015
- add safeguard to mousebinds by @MightyPlaza in #7034
- move screencopy and toplevel export to hyprwayland-scanner by @ikalco in #7065
- Fix
hyprctl switchxkblayout
not actually changing layout by @MahouShoujoMivutilde in #7070 - unify removing currentlyDraggedWindow by @MightyPlaza in #7071
- CI: only run once for PRs with branches from original repo by @fufexan in #7075
- xdg-shell: completely rewrite xdg-positioner by @outfoxxed in #7067
- input: fix keyboard leds with multiple keyboards by @sungyoonc in #7079
- layer-shell: avoid crashes on unmap by @VirtCode in #7092
- xdg-shell: fix xdg-positioner y-flip by @outfoxxed in #7094
- Add force reload of config at the end of plugin initialization by @atikiNBTW in #7099
- move text-input-v1 to hyprwayland-scanner by @ikalco in #7096
- Fix typos in Compositor.cpp by @jim3692 in #7111
- Move globalshortcuts impl by @ikalco in #7102
- keybinds: handle null monitor in pinActive by @andresilva in #7122
- refactor fullscreen by @MightyPlaza in #7104
- some minor fd/socket cleanups and make logging thread safe by @gulafaran in #7123
- Buffer lock/release fixes by @vaxerski in #7110
- fix buffer crash with cursors by @gulafaran in #7131
- fix: dynamic rules not updating after setting fullscreen by @sungyoonc in #7129
- allows toggling fullscreenstate by @MightyPlaza in #7128
- fix fullscreen typos by @MightyPlaza in #7134
- sessionLock: don't sendLocked when session lock has already been destoyed by @PaideiaDilemma in #7150
- increase hyprctl timeout to 5s to fix #6801 by @zjeffer in #7152
- xcursor rework bootleg xcursor by @gulafaran in #7140
- Unbreak build with libc++ by @jbeich in #7158
- fix infinite recursion on no_gaps when only by @MightyPlaza in #7169
- CMake: Suppress CMake warning about GNUInstallDirs by @MaroonSkull in #7164
- improve fullscreenstate toggling by @MightyPlaza in #7174
- implent xcursor manager by @gulafaran in #7178
- Explicit sync fixes by @vaxerski in #7151
- fix leds on kb creation by @ikalco in #7206
- debug: dont manually unlock the lock_guard by @gulafaran in #7210
- fix NoSymbol keybinds by @ikalco in #7199
- xcursor implent inheriting themes by @gulafaran in #7197
- xdg-shell: make xdg-positioner flip target greatest available space by @outfoxxed in #7209
- hyprctl: link to much less libraries by @sliedes in #7212
- fix general:extend_border_grab_area by @Agent00Ming in #7214
- safe guard against ill formed index.themes by @gulafaran in #7211
New Contributors
- @harenayo made their first contribution in #6696
- @Lincoln-Yuji made their first contribution in #6744
- @Yusuf-Duran made their first contribution in #6745
- @caffineehacker made their first contribution in #6857
- @dedsm made their first contribution in #6861
- @nktnet1 made their first contribution in #6870
- @PartyWumpus made their first contribution in #6903
- @Ciflire made their first contribution in #6916
- @Ferdi265 made their first contribution in #6930
- @khachbe made their first contribution in #6940
- @darkwater made their first contribution in #6984
- @leon-erd made their first contribution in #7012
- @antonok-edm made their first contribution in #7015
- @MahouShoujoMivutilde made their first contribution in #7070
- @atikiNBTW made their first contribution in #7099
- @jim3692 made their first contribution in #7111
- @MaroonSkull made their first contribution in #7164
- @sliedes made their first contribution in #7212
Full Changelog: v0.41.2...v0.42.0