Releases: hyprwm/Hyprland
v0.43.0
A new, big update 0.43.0 brought to you by Yours Truly.
Many bugfixes, and new features, as always.
Notes for packagers
- Hyprland now requires C++26 support to build. gcc>=14 or clang>=18 will be needed.
- Installable assets have moved to
assets/install/
. All pngs there should be installed to$PREFIX/share/hypr/
New features:
- IPC: Add config descriptions (#7377)
- animations: add workspace in/out configs
- config: Add a variable to prevent groups from merging after being dragged (#7650)
- config: Add a window rule to render while unfocused (#7582)
- config: Added default button mapping for xf86 keys (#7672)
- config: add exec-shutdown for running commands on shutdown (#7683)
- core: add option to control which window to focus on close (#7368)
- cursormgr: add a new setting to sync gsettings (#7253)
- env: Add HYPRLAND_NO_SD_VARS env condition (#7358)
- hyprctl: add active and all to switchxkblayout
- logs: Add file path to asset ERR log (#7336)
- windowrules: add fullscreenstate field (#7466)
- xwayland: add option to enable/disable xwayland (#7633)
Fixes:
- Fix crash reports having execute permission
- Fix missing include needed by clang
- build: Fix NO_XWAYLAND compilation (#7538)
- config: add missing header for libc++ after 92744b5 (#7403)
- config: fix explicit sync option warning (#7293)
- config: fix uninitialized values with mode parsing
- core: fix crash on monitor removed with gammaControl (#7601)
- core: fix data race and a unsigned int rollover (#7278)
- cursormgr: fix cursor gsettings on session change (#7295)
- data-device: Fix selection mismatch when wlr resets primary selection (#7598)
- decorations: fix manual resize not recalculating decos (#7323)
- example/config: fix typo in default config (#7446)
- gamma-control: fix crash on monitor disconnect (#7353)
- helpers: fix: revert to signed arithmetic for cycling through workspaces (#7339)
- hyprpm: Fix checking dependencies (#7504)
- input: Fix disabling tap-to-click (#7304)
- input: Fix modifier keys getting stuck if depressed during config reload (#7486)
- install: Prepend ${DESTDIR} when creating hyprland symbolic link (fixes #7280). (#7281)
- keybinds: Fix fullscreenState toggling behaviour (#7288)
- keybinds: Fix syncFullscreen inconsistent with state when set by fullscreenState (#7343)
- keybinds: fixup misused kb state
- misc: fix some minor typos (#7530)
- pointermgr: fix initial cursorwarp (#7286)
- presentation-feedback: minor fixups
- protocol: fix logm template checks
- render: fixup format mismatch after leaving DS
- renderer: minor direct scanout fixes (#7594)
- screencopy: fix 10b format r/b flip
- screencopy: fixup 10-bit sharing via shm on nvidia
- sessionLock: fix misc:allow_session_lock_restore (#7511)
- textinput: fix ime activation in some edge cases (#7660)
- workspacerules: fix on-created-empty window focus (#7657)
Other:
- CI: clarify Nix CI jobs; disable on forked repositories
- CI: disable stale workflow on forks (#7535)
- CMake: drop duplicate -luuid after 5262292
- CMake: drop unused deps after 016da23
- CMakeLists: wayland.xml is in wayland-scanner pkgdatadir
- Nix: exclude wayland-scanner until next staging merge
- Nix: include xcursor regardless of xwayland
- Nix: remove unused dependencies
- README: Change image sources from vaxerski/Hyprland to hyprwm/Hyprland (#7315)
- Revert "syncobj: wait for deadline instead of available"
- Update aquamarine input in flake
- compositor: update suspendstate on window move (#7396)
- core: Include cstring whenever strncpy is used (#7267)
- core: Move to C++26 and use native_handle to CLOEXEC the debug fd (#7219)
- core: Preserve existing XDG_CURRENT_DESKTOP (#7347)
- core: make most for loops use const references (#7527)
- cursor: make inactive_timeout setting a float (#7268)
- data-device: send dndFinished when dnd offer is destroyed while unfinished
- eventloop: don't dispatch in enterLoop
- examples: more systemd examples (#7409)
- headers: set correct paths to header files (#7245)
- hyprctl: avoid parsing string::npos on invalid cmd (#7544)
- hyprpm, hyprctl: update shell completions
- hyprpm, hyprctl: remove Makefiles
- input: don't emit idle activity when calling simulateMouseMovement (#7649)
- input: kb focus mouse focused window if unset (#7666)
- input: move idle notify to input handlers (#7659)
- input: try to refocus a focusable window when seat grabs are reset (#7669)
- internal: introduce new types to avoid unsigned int rollover and signed int overflow (#7216)
- internal: removed Herobrine
- keybinds: refactor dispatchers to be better (#7331)
- keybinds: release mods after sendshortcut (#7581)
- layersurface: don't unref from monitor until dtor
- layersurface: dont rollover on size_t (#7451)
- layersurface: remove layer on destroy from monitor (#7457)
- linux-dmabuf: allow on split-node systems
- logs: don't get timezone every time logging (#7550)
- meson: explicitly specify path for find(1) (#7590)
- misc: Rename all instances of "emtpy" to "empty" (#7522)
- misc: constify the remaining for loops (#7534)
- monitor: avoid dangling references to old monitors being undestroyed
- monitors: avoid crash on wayland output removal
- output: dont cast enum out of range (#7448)
- protocols: avoid crashing in drmlease (#7290)
- protocols: destroy new xdgDialog protocol at right time (#7600)
- protocols: refactor protocol logging to a macro (#7324)
- renderbuffer: ensure framebuffer gets deleted (#7363)
- renderer: better lockscreen dead behavior (#7574)
- renderer: fade out windows on silent moves
- renderer: pass custom modelines to aq
- screencopy: nuke unused stuff
- sessionLock: ensure sls focus in some edge cases (#7647)
- shm: align size to stride (#7383)
- syncobj: wait for deadline instead of available
- textinput: don't deactivate ime if another ti is focused (#7617)
- textinput: send deactivate to ime on destory ti (#7614)
- window/xwayland: minor property cleanup
- window: don't focus on activate if window isn't mapped yet
- windows: support size with pseudo tiled
- xcursor: handle file errors when loading xcursor themes (#7326)
- xcursormgr: dont apply scale on gsettings (#7316)
- xdg-dialog: implement new protocol
- xwayland: deactivate xwayland focus if wayland is focused (#7458)
- xwayland: update overrideRedirect on map and configure (#7575)
- xwaylandmgr: minor refactor to activateSurface
- xwm: don't mark selection events as succeeded
- xwm: read atom name from xcb (#7546)
Special Thanks
Special thanks to these chads for donating, as always:
- Xoores
- taigrr
- SomeMediocreGamer
- Azelphur
- ari-cake
- alukortti
- MasterHowToLearn
- Theory_Lukas
- maltbeverage
- Plyply
- Poor as shit
- Milan
- johndoe42
- yyyyyyyan
- seb
- Cromat_tux
- DaGaugl
- Philipp Soldunov
- nico
- atomicptr
- ircurry
- normal
- Mikey G
- JPEG
- Sven
- neoney
- Valentin MATHIEU
- Morally2412
- Enzi
- Logno
- Mihail
- niraami
- KelpShake
MRs
- core: Move to C++26 and use native_handle to CLOEXEC the debug fd by @vaxerski in #7219
- type conversion to new types to avoid unsigned int rollover and signed int overflow by @gulafaran in #7216
- fix: set correct paths to header files by @matt1432 in #7245
- xcursmgr add a new setting to sync gsettings by @gulafaran in #7253
- Include cstring whenever strncpy is used by @earboxer in #7267
- cursor: make inactive_timeout setting a float by @wwaltb in #7268
- fix initial cursorwarp by @gulafaran in #7286
- Prepend ${DESTDIR} when creating hyprland symbolic link fixes #7280) by @yangyingchao in #7281
- fix explicit sync option warning by @ikalco in #7293
- fix data race and a unsigned int rollover by @gulafaran in #7278
- Fix fullscreenState toggling behaviour by @txkyel in #7288
- protocols avoid crashing in drmlease by @gulafaran in #7290
- fix cursor gsettings on session change by @ikalco in #7295
- readme: Change image sources from vaxerski/Hyprland to hyprwm/Hyprland by @PaddeCraft in #7315
- fix resizing by @MightyPlaza in #7323
- Add file path to asset ERR log by @davc0n in #7336
- handle file errors when loading xcursor themes by @ikalco in #7326
- helpers: fix: revert to signed arithmetic for cycling through workspaces by @ErynGalen in #7339
- Fix syncFullscreen inconsistent with state when set by fullscreenState by @txkyel in #7343
- gamma-control: fix crash on monitor disconnect by @PaideiaDilemma in #7353
- Preserve existing XDG_CURRENT_DESKTOP by @Vladimir-csp in #7347
- protocols refactor protocol logging to a macro by @gulafaran in #7324
- Add HYPRLAND_NO_SD_VARS env condition by @Vladimir-csp in #7358
- renderbuffer ensure framebuffer gets deleted by @gulafaran in #7363
- xcursormgr dont apply scale on gsettings by @gulafaran in htt...
v0.42.0
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- custom modelines are not working anymore (fixed on git)
News for packagers
- New dependency: aquamarine
- Dropped submodule: wlroots
- Assets installation directory changed from
$DATAROOTDIR/hyprland
to$DATAROOTDIR/hypr
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-...
v0.41.2
Hi all! 0.41.2 bringing even more fixes on top of 0.41.1. Enjoy!
New features:
- core: add ability to select previous workspace per monitor (#6598)
- hyprctl: added --follow option to rolliglog (#6325)
- hyprpm: add --no-shallow
- input: add cursor:warp_on_changeworkspace (#6480)
- keybinds: add custom event dispatcher
- vrr: add option to fix mouse breaking vrr (#6483)
- window: expose pseudotiled state and add param to dispatcher (#6583)
Fixes:
- animations: fix overriding direction for slide
- core: fix a few small memory leaks on exit (#6470)
- data-device: minor fixes
- egl: fixup format modifier lookups with implicit modifiers
- foreign-toplevel-wlr: fix out-of-range for missing monitor resources
- format: fix flipped r/b channels on legacy_renderer
- hyprctl: add a newline after log()
- hyprctl: fix zsh completion (#6467)
- keybinds: fix mouse pass (#6652)
- output: fix cursors disappearing after dpms (#6659)
- subcompositor/renderer: fixup handling of subsurfaces below the main one
- surface: add virtual destructor to surfacerole to avoid undefined behaviour (#6620)
- vrr: add option to fix mouse breaking vrr (#6483)
- xdg-shell: fixup xdg-positioner's pointForAnchor with non-corner points
- xwayland: fixup unfocus atom conditions
Other:
- Nix: don't strip in debug builds
- Nix: tidy up derivation
- compositor: bump nofile rlimits on launch
- constraints: Lock surface region when region is empty (#6627)
- core: Move to hyprutils for Math
- core: avoid bumping hard rlimits, restore on fork
- damageRing: move to hyprland impl
- data-device: abort drag on unaccepted offers
- data-device: properly abort drag on missing device
- dbus: import PATH XDG_DATA_DIRS variables into systemd and dbus session
- format: include macros for unreachable
- github: reword bug or regression (#6520)
- helpers: make shm_open() portable after 8bcccf9 (#6471)
- hyprctl: avoid using select()
- hyprctl: make recv timeout bigger and give error message if it does timeout (#6621)
- hyprland.conf: update master section (#6537)
- keybinds: ignore missing keysyms if no other methods match
- master: refine master layout new window handling (#6479)
- math: include cstring for memset
- misc: a few compiler level performance optimisations (#6559)
- output: avoid crashes when binding a defunct wl_output global
- pointer: use software rendering when monitor is mirrored (#6587)
- renderer: shrink occlusion rect if blur is used
- seat/dnd: unfocus pointer from surfaces on dnd start
- seat: track pressed pointer buttons
- window: improve swallowing functionality
- window: use effective damage for tearing re-schedules
- wl-compositor: don't send enter to defunct output globals
- wl_data_device: send drop_performed in completeDrag
- wl_seat: accomodate for apps late-binding seat resources
- wl_seat: send repeat data from current keyboard on bind
- xdg-shell: Continue transform of popup until size fits (#6521)
- xdg-shell: properly check for resource version for TILED and SUSPENDED states
- xwayland: do not set a new data source if it has no MIMEs
- xwayland: drop some spammy logs to trace
- xwayland: force default plain mime atoms on known types
- xwayland: use safeRemove for removing files
Special thanks
As always, special thanks to these chads for donating:
- Xoores
- kittyandrew
- Azelphur
- maltbeverage
- alukortti
- Wickedly
- Philipp Soldunov
- Theory_Lukas
- MasterHowToLearn
- ari-cake
- taigrr
- SomeMediocreGamer
- Crashdummy
- Tristan
- ddbnl
- NathBeLive
- atomicptr
- Nutel
- rkoten
- Marek Vospel
- radicaltray
MRs
- last bits of asan output by @gulafaran in #6470
- helpers: unbreak shm_open() on FreeBSD by @jbeich in #6471
- Fix build warnings by @phonetic112 in #6486
- layerSurface: fix layer being refocused every commit with on_demand by @outfoxxed in #6487
- feat: added --follow option to
hyprctl rollinglog
#6300 by @Truenya in #6325 - option to fix mouse breaking vrr by @UjinT34 in #6483
- flake: update xdph by @diniamo in #6497
- layout: refine master layout new window handling by @memchr in #6479
- update example hyprland.conf by @memchr in #6537
- input: add cursor:warp_on_changeworkspace by @memchr in #6480
- xdg-shell: Continue transform of popup until size fits by @DashieTM in #6521
- a few compiler level performance optimisations by @gulafaran in #6559
- github: reword bug or regression by @Aqa-Ib in #6520
- fix zsh completion in hyprctl by @random2907 in #6467
- pointer: use software rendering when monitor is mirrored by @lucasreis1 in #6587
- Expose pseudotiled state in hyprctl clients and add an optional window argument for the pseudo dispatcher by @Przegryw321 in #6583
- add virtual destructor to surfacerole to avoid undefined behaviour by @gulafaran in #6620
- increase read timeout for hyprctl by @ikalco in #6621
- Pointer constraints: Lock surface region when region is empty by @MariuszTrybus in #6627
- feat: [compositor, misc] ability to select previous workspace per monitor by @Truenya in #6598
- systemd,dbus: import PATH XDG_DATA_DIRS variables into systemd and dbus session by @JohnRTitor in #6640
- output: fix cursors disappearing after dpms by @outfoxxed in #6659
- keybinds: fix mouse pass by @Trimutex in #6652
New Contributors
- @Truenya made their first contribution in #6325
- @UjinT34 made their first contribution in #6483
- @random2907 made their first contribution in #6467
- @Przegryw321 made their first contribution in #6583
- @MariuszTrybus made their first contribution in #6627
- @JohnRTitor made their first contribution in #6640
- @Trimutex made their first contribution in #6652
Full Changelog: v0.41.1...v0.41.2
v0.41.1
Hello there! After 0.41.0's bumpy start, we're bringing 0.41.1 to you to fix a bunch of bugs and issues.
New features:
- binds: Add description to key binds (#6358)
Notes for packagers
- new dep: hyprutils >= 0.1.2
Fixes:
- compositor: update suspended states on moveworkspacetomonitor
- foreign-toplevel: fixup output resource finding
- formats: fixup for legacy_renderer builds
- groupbar: fix groupbar position rounding (#6433)
- input: fix input regions being ignored on ls-es (#6413)
- keybinds: fix bindm (#6429)
- layershell: Fix keyboard focus grabs (#4968) (#6394)
- layershell: minor fixes to re-mapping of layers
- seat: fixup touch event handling
- seatmgr: fix missing nullcheck in updateActiveKeyboardData
- session-lock: fix refocus after unlocking (#6423)
- sessionLock: fix focus not being tied to mouse (#6414)
- virtualkeyboard: check if VirtualKeyboard is valid before accessing client. (#6460)
- wayland: consistently check mmap error after 6967a31 (#6402)
Other:
- core: move to hyprutils for utils (#6385)
- datadevice: only send actions for ver >= 3
- groupbar: Don't apply monitor scale twice to groupbar text (#6411)
- hyprpm: print all types of cmake errors during configure
- input: fallback to main surface if not found on window
- layer: don't close special ws when restoring focus (#6424)
- renderer: properly software lock cursors with zoom_factor (#6434)
MRs
- wayland: consistently check MAP_FAILED by @jbeich in #6402
- Don't apply monitor scale twice to groupbar text by @zakk4223 in #6411
- layerSurface: respect input regions by @outfoxxed in #6413
- sessionLock: fix focus not being tied to mouse by @outfoxxed in #6414
- core: move to hyprutils for utils by @vaxerski in #6385
- session-lock: fix refocus after unlocking by @PaideiaDilemma in #6423
- Fix layershell keyboard focus grabs (#4968) by @outfoxxed in #6394
- Add description to key binds by @Moerliy in #6358
- layer: don't close special ws when restoring focus by @MightyPlaza in #6424
- fixed mouse dispatcher by @Moerliy in #6429
- fix groupbar position rounding by @MightyPlaza in #6433
- properly use software cursors with zoom_factor by @ikalco in #6434
- check if VirtualKeyboard is valid before accessing. by @yangyingchao in #6460
Special Thanks
Special thanks to these chads as usual for donating:
- Xoores
- taigrr
- SomeMediocreGamer
- maltbeverage
- alukortti
- Wickedly
- Philipp Soldunov
- Theory_Lukas
- MasterHowToLearn
- ari-cake
- kittyandrew
- Azelphur
- niv0se
- matjam
New Contributors
- @Moerliy made their first contribution in #6358
- @yangyingchao made their first contribution in #6460
Full Changelog: v0.41.0...v0.41.1
v0.41.0
Well, well.
The biggest Hyprland update in its history has just dropped. Almost 200 commits, over 25000 lines changed. A lot of things added, and continuing work on detaching from wlroots. Enjoy!
As with 0.40, there is a lot of internal work going on detaching from wlroots, so some bugs are to be expected. However, many from 0.40 have been ironed out, so give 0.41 a try!
New features:
- Add custom cmake target for installheaders
- CMake: use add_custom_command for generating protocols (#6104)
- Meson: add wayland.xml proto
- Reapply "CMake: use add_custom_command for generating protocols (#6104)"
- Revert "CMake: use add_custom_command for generating protocols (#6104)"
- ci: add auto labels on PR (#6369)
- config: add tag dispacther and window rule (#6211)
- debug: Add ARM GPU info (#6212)
- error: Add option to change position of HyprError bar (#3241) (#6111)
- gestures: Add gestures:workspace_swipe_min_fingers option (#6342)
- hyprctl: Add Config Flag to
hyprctl systeminfo
(#6160) - hyprctl: Add locked cmd to requests (#6042)
- hyprctl: add --quiet flag (#6380)
- hyprctl: add delimiter to hyprctl batch command (#6261)
- input: add cursor:persistent_warps to maintain relative position within a window (#6338)
- internal: Add missing errno.h include to SdDaemon.cpp (#5938)
- ipc: add togglegroup, moveintogroup and moveoutofgroup events (#5866)
- keybinds: Add option to disable window direction monitor fallback (#6182)
- keybinds: Added new dispatcher (sendshortcut) (#6174)
- keybinds: add empty on monitor and next empty flags (#5936)
- keybinds: add keybind combos and add Left and Right mod distinction. (#5966)
- meson: add more xcb-* dependencies after addd3e7
- pointer: add back nvidia hardware cursor quirks (#6220)
- protocols: add hyprland_focus_grab_v1 implementation (#5850)
- renderer: render fonts with pango, add global
font_family
config option (#6138) - seatmgr: Add a grab class
- windowrules add focusonactivate (#5976)
- wlr-foreign-toplevel: fix fullscreen failing and add output support (#6360)
Fixes:
- Fix initial xdg-decoration toplevel decoration mode negotiation
- Nix: fix pkgconfig prefix
- box: fix noNegativeSize
- build: fix non-pch build (#6337)
- cmake: fix .pc file inputs (#5946)
- compositor: fix getMonitorFromVector getting wrong monitor (#6010)
- core: fix a few asan reported issues and a coredump on exit (#6285)
- core: fix on-empty workspace being called too often (#6026)
- core: remove unused includes and fix warn
- cursor: minor fixes for unhiding surfaces
- decorations: fix groupbar input (#5963)
- groupbar: Fix window title rendering (#6392)
- groupbar: fix title scaling (#5969)
- helpers: fix misuse of syscalls in sd namespace (#6379)
- idle-inhibit: fix and cleanup visibility logic
- input: fix modifier and leds (#6062)
- input: fix virtual devices not updating capabilities (#6366)
- keybinds: Fix classic global keybinds(pass dispatcher) (#5967)
- keybinds: fix empty on monitor for new workspaces (#6089)
- keybinds: fix pass
- keybinds: fix release binds in submaps (#6025)
- keybinds: fix xkb keybind name to keysym comparison (#5917)
- layersurface: fix invalid use of std::move
- layout: Fix shrinking pseudotile windows. (#6143)
- layout: fix centering of new floating windows
- makefile: fix wlroots headers dir
- memory: fix SP/WP hierarchy templates
- pkg-config: fix wlroots dir
- popups: fix breadthfirst and at
- renderer: fix xwayland solitary rechecks (#6295)
- seat: fix pointer frame events not being sent correctly
- shadow: fix small pixel gaps between border
- socket2: fix events being reordered (#5955)
- tablet: fix mapping when mapped region is specified (#6206)
- wayland: fix invalid wl_output_mode dimensions sent
- window: fix invalid env buffer size in getEnv
- wlr-foreign-toplevel: fix fullscreen failing and add output support (#6360)
- xdg-shell: fixup positioner behavior with slide and resize
- xdg_shell: fix nested xdg_positioner calculations
Other:
- CI/Nix: build with submodules
- CMake: install files (instead of Makefile)
- Nix: use CMake for builds instead of Meson
- Tablet: move to new impl
- buffer: track asynchronous buffers and don't release them until unref
- build: ProtocolManager missing header LIstener.hpp (#6391)
- build: include missing header: "debug/Log.hpp" in Format.cpp (#6365)
- build: update meson, cmake setup
- cmake: make gprof optional for debug builds (#6120)
- cmake: make xcb-errors required
- cmake: remove forceful ffi and wayland deps for asan
- compositor: change monitor focus when no_warps is enabled (#6260)
- config: move various cursor-related vars to cursor:
- configmgr: shadow exec rules when window is unmapped
- core: chase hyprwayland-scanner
- core: cleanup environment on exit (#5941)
- core: drop unused protocol impls
- core: free more memory on destruction (#6348)
- core: remove wayland sockets on exit (#5959)
- core: verify surface roles on creation of objects
- cursor: move to a hyprland impl
- datadevice: guard surface in dnd for null
- deco-positioner: avoid infinite recalcs
- decoration: Stacked group tabs (#5886)
- deps: update wlroots
- egl: assume implicit modifiers are available for old drivers
- eventloop: don't call lost timers
- foreign-toplevel-wlr: send current class and title on map
- foreign-toplevel: bypass no activate focus checks
- github: improve the chances of the user specifying bug or regression (#6399)
- github: update issue template with new path
- hookSystem: Make needsDeadCleanup volatile (#6356)
- hyprctl: Allow setting name for custom/headless outputs (#6319)
- hyprctl: Make setcursor better (support XCursor themes, give fail message) (#6097)
- hyprctl: return exitStatus in requestHyprpaper() and request() (#6083)
- hyprpm: don't shallow clone on non-main branches
- hyprpm: force en_US locale for date calcs
- hyprpm: print and fail on missing packages during configure
- idle-inhibit: enable idle inhibitor if no hl surface is associated (#5882)
- input: find surface pos correctly when mouse drag is active
- inputmgr: send pointer motion on ffm != 1
- internal: Removed Herobrine
- internal: Replace monitor rule when disabling head. (#6136)
- internal: new shared_ptr and weak_ptr implementation (#5883)
- internal: save previous workspace before change (#6202)
- kde-server-decoration: move to new impl
- keybinds: make the keybind manager check for session lock (#5894)
- layer-shell: move to new impl
- layersurface: avoid restack on identical layers
- layersurface: reset popuphead after unmap
- log: log with local timezone (#6331)
- monitor: avoid UB on undefined auto dir
- nix: build improvements (#5952)
- output: remove wl_output globals for mirrored displays
- pointer-constraints: Remove unnecessary cursor warps (#5895)
- pointer: Include monitor scaling in HW hotspot calculation (#6283)
- pointer: damage in software mode on cursor image changes
- pointer: don't calculate hw hotspot for missing hw cursors
- pointer: don't update hw cursors on disabled displays
- pointer: remove dividing hotspot by scale
- pointermgr: ensure compositor exist on destroy (#6216)
- pointermgr: reset entered outputs when resetting surface
- popup: clip input region to surface size
- popup: minor safety improvements
- popups: avoid infinite recursion in bf
- presentation-time: move to new impl
- primary-selection: move to hyprland impl
- renderer: allow custom uv for surface no-blur passes
- renderer: avoid locking during rendering
- renderer: deny solitary during a session lock
- screencopy: don't spam sw cursor locks
- screencopy: use a simple renderer for frame passing
- seat: Send discrete event when axis source is scroll wheel (#6103)
- seat: discrete round away from zero + high res scrolling (#6317)
- seat: don't send keymap on empty device
- seat: send axis_stop events after axis events
- seat: send enter/leave events to all bound wl_seats for a client
- seat: send events to all bound seats for a client
- seat: update keymap/repeat info on keymap events from keebs
- session-lock: don't allow events from rejected locks
- tablet: avoid null deref on an empty cursor set
- toplevelexport: avoid locking software cursors during render
- virtual-keyboard: emit event before finishing keyboard
- virtual-keyboard: release keys before destroy
- wayland/core: move to new impl (#6268)
- window: avoid nullptr deref on monitor in box helpers
- window: avoid uaf on updateWindow decos
- window: guard monitor in bounding box calculations
- window: set sane default pseudo size
- window: verify suppress flags in onUpdateState
- windows: Revert "window: set config only when both props end anims" (#5904)
- windows: make new_window_takes_over_fullscreen use the new window's workspace (#6263)
- wl-data-device: move to hyprland impl
- wl_seat: move to hyprland impl
- wl_seat: send frame event after pointer leave (#6074)
- wlr-data-device: move to hyprland impl
- wlroots: bump
- xdg-activation: keep tokens after the resource is dead
- xdg-shell: move to new impl
- xdg_shell: ignore outdated ack_configure events
- xdg_shell: improve xdg_positioner resize calculations
- xdg_shell: improve xdg_positioner slide behavior
- xkb: check value correctly with xkb_state_layout_index_is_active() (#5925)
- xwayland: Remove delta for real position with xwayland zero scaling (#6057)
- xwayland: don't destroy server client
- xwayland: move to hyprland impl (#6086)
- xwayland: verify new xsurf is valid in prop reads
Special Thanks
Special thanks as always to these mega chads for donating some money to keep this ball rolling:
- Xoores
- taigrr
- SomeMediocreGamer
- ma...
v0.40.0
Happy Hyprland 0.40.0!
This is a massive update, with mostly changes under-the-hood, but also many QoL additions and fixes!
A lot of wlroots implementations have been rewritten to use Hyprland-made ones. More will come, but this release also serves as a real test to their stability.
Notes for packagers
- New dependencies: hyprwayland-scanner (build only), uuid
- Note: this release requires hw-s = 0.3.4 (0.3.5 will fail to build this release.)
Breaking changes
- The hyprland logs, sockets, etc. have moved from
/tmp/hypr
to$XDG_RUNTIME_DIR/hypr
.
New features:
- alpha-modifier: add support for protocol
- config: Add More Monitor 'Auto' Positions. (#5670)
- config: add absolute monitor workspace selectors (#5848)
- config: added option to choose the default monitor for the cursor (#5847)
- core: add libinput backend support for headless session (#5699)
- ext-foreign-toplevel: add implementation
- keybindmgr: add optional
silent
suffix tomovewindow
. (#5597) - log: Add some colors to stdout log 🔴🟡🟢🔵🟣 (#5778)
- windowrules: add subtract window option to move rule (#5770)
- windows: add misc:initial_workspace_tracking
- workspace: Add 'v' flag for workspace selector that counts only visible windows (#5628)
- workspace: Add fullscreen workspace selector (#5640)
Fixes:
- CrashReporter: fix deadlocks by making it mostly async-signal-safe (#5771)
- cursormgr: fix misscaled cursors on fractional
- foreign-toplevel: fix bad_any_cast in moveWindow
- foreign: fix no-pch builds
- format: fix clang-format
- hyprctl: add missing json string escapes (#5811)
- hyprctl: fix activewindow request not showing workspace name (#5623)
- hyprctl: fix instances path
- hyprpm: fix for multi-user + improve directory structure
- hyprpm: fix updating headers
- input: fix active keyboard for seat after destroying one (#5725)
- internal: fix a few asan reported leaks on exit of hyprland (#5852)
- keybindmgr: add optional
silent
suffix tomovewindow
. (#5597) - makefile: fix old headers only being copied
- misc: fix autocompletions for meson (hyprctl/hyprpm)
- nix: fix missing git in wlroots build
- pluginsystem: fix unhooking on exit
- pointer-constraints: remove emoji to fix clang
- protocols: fix for hyprwayland-scanner update
- relative-pointer: fix missing header for g_pCompositor (#5681)
- renderer: Fix mirrored displays when transformed and preserve aspect ratio (#5697)
- renderer: fix rounding of the size of fractionally scaled monitors (#5748)
- renderer: fix safety around sendFrameEventsToWorkspace
- scripts: fix asan patch
- sessionLock: fix incorrect protocol error raised
- socket2: fix empty activewindowv2 events
- swipe: fix crashes with invalid distance
- tokens: add more modes to initial_workspace_tracking
- tokens: fix initial workspace token ignoring special
- windowrules: Fix Floating Grouped Windows Crash and Bug. (#5826)
- workspace: Fix duplication of "special:" in special workspace name (#5729)
- workspacerule: Fix monitor settings being deleted when merging ws rules (#5864)
Other:
- CI: add no PCH build (#5708)
- CI/Nix: use hyprland cachix (#5701)
- CrashReporter: unbreak build on FreeBSD (#5786)
- Fractional-scale: move to new impl
- HookSystem: improve callback safety
- Nix: override wayland-protocols until merged
- Protocols: implement protoLog
- XDG-Output: move to hyprwayland-scanner
- compositor: more fs safety around tmp directories
- compositor: properly update workspace in moveWindowToWorkspaceSafe
- config: Allow more sensible input options for enabling animations. (#5659)
- config: Default unconfigured monitors to open to the right (#5741)
- config: Expand on window matching (#5518)
- config: merge all rules set for the same workspace selection (#5656)
- config: polish default config file (#5672)
- core: Move /tmp/hypr to $XDG_RUNTIME_DIR/hypr (#5788)
- core: Move tearing to hyprwayland-scanner (#5657)
- core: prefer mkdir over create_directory and permissions
- core: remove libsystemd dependency (#5660)
- cursor-shape: allow duplicate devices per pointer resource
- cursor-shape: move to new impl
- cursor-shape: use - instead of _ in shapes
- cursormgr: attempt using - instead of _ for failed cursors before fallback
- events: set window initial* before searching for rules
- ext-idle-notify: move to new impl
- fractional: set scale before configure
- gamma-control: move to new impl
- git: ignore wlroots dirty (#5674)
- helpers: Add new C++ Signal and Listener classes
- hid: don't access expired resources in virtual devices
- hooksystem: check for existing random outdir
- hooksystem: use a random 700 directory for assembler
- hyprctl: use XDG_RUNTIME_DIR if available
- idle-inhibit: Always recheck idle inhibitors on creation and deletion (#5738)
- idle-inhibit: don't destroy inhibitor on surface destroy
- idle-inhibit: move to new impl
- ime-v2: move to new impl
- input: Introduce basic hyprland HID classes
- input: check for focused_client being null before reading its client
- input: ignore destroyed devices in static events
- inputmgr: dont double free on hotplug (#5855)
- internal: Window storage rework - part 1 (#5762)
- internal: removed Herobrine
- internal: store matched windowrules and emit event
- keybinds: check for special workspace equality before switching
- keybinds: clear repeat source on mouse inputs
- keyboard: check for wlr() validity before accessing
- keyboard: prevent UAF in destroy events
- layerSurface: refactor/move to a memory-safe impl
- layout: Trigger layout recalcuation on deco position/size change (#5821)
- layout: limit updates when mouse animate drag is enabled (#5838)
- managers: Add a TokenManager
- output-management: move to new impl
- pluginAPI/hooks: Remove dependency on cc from the hooksystem (#5801)
- pluginapi: unregister callbacks on lost ptrs
- pluginsystem: unload entire plugin before calling dlclose()
- pointer-constraints: don't warp on entering a confined pointer
- pointer-constraints: move to new impl
- pointer-gestures: move to new impl
- props: bump version to 0.40.0
- protocols: minor style improvements to new impls
- protocols: utilize hyprwayland-scanner 0.3.3 functions
- relative-pointer: move to new impl
- renderer: avoid rendering frame if finalDamage is empty
- renderer: send frame events to apps on empty damage renders
- session-lock: move to new impl
- sessionLock: call wlr_surface_map/_unmap on the surface manually
- sessionLock: remove m_pLastFocus on destroy of surface
- sessionLock: set locked after emitting event
- shaders: Use sin-less hash for noise (#5607)
- shortcuts-inhibitor: move to new impl
- tearing-control: hyprland impl (#5655)
- tearing-control: search through all valid windows
- text-input-v3: move to new impl
- tokenmgr: separate getRandomUUID from registerNewToken
- virtual-keyboard: destroy on vdestroy event
- virtual-keyboard: move to new impl
- virtual-pointer: move to new impl
- wayland-protocol: remove unused CWaylandResource
- Window: add destroy signal
- windows: don't force workspace change on same tracked workspace
- windows: recalculate monitor after updating windows (#5647)
- windows: set fullscreen border size to 0 (#5865)
- wlr-foreign-toplevel: move to new impl
- wlr-foreign-toplevel: send done after property changes
- wlr-output-power: move to new impl
- xdg-activation: move to new impl
- xdg-decoration: move to new impl
Special thanks
Special thanks as always to those chads for donating $$$:
- Xoores
- taigrr
- SomeMediocreGamer
- alukortti
- Wickedly
- Philipp Soldunov
- MasterHowToLearn
- Theory_Lukas
- Goggi
- ari-cake
- kittyandrew
- Azelphur
- Pim West
- loxley
- Blank
- lemontus
- Pyxels
- Tristan 9
- Cromagonaut
- Jo
- CatWithCode
- Sabin
MRs
- keybindmgr: add optional
silent
suffix tomovewindow
. by @de-vri-es in #5597 - hyprctl: fix activewindow request not showing workspace name by @Treeniks in #5623
- shaders: Use sin-less hash for noise by @Epikastema in #5607
- Add 'v' flag for workspace selector: counts only visible windows by @zakk4223 in #5628
- windows: recalculate monitor after updating windows by @sungyoonc in #5647
- misc: fix autocompletions for meson (hyprctl/hyprpm) by @MrRoy in #5653
- tearing-control: hyprland impl by @vaxerski in #5655
- Apply all the workspace rules for the same workspace selector by @thejch in #5656
- Allow more sensible input options for enabling animations. by @The-Briel-Deal in #5659
- Move tearing to hyprwayland-scanner by @vaxerski in #5657
- remove libsystemd dependency by @cnt0 in #5660
- Add fullscreen workspace selector by @thejch in #5640
- nix: fix missing git in wlroots build by @andresilva in #5676
- git: ignore wlroots dirty changes by @thejch in #5674
- Expand on window matching by @SoSeDiK in #5518
- Fix CI by @vaxerski in #5679
- protocols: add missing header for g_pCompositor by @gulafaran in #5681
- polish default config file by @MQ1995 in https://github.com/hyp...
v0.39.1
A small patch to 0.39.0 to fix a few small issues and add some general hyprpm improvements.
Fixes:
- constraint: Fix xwl cursor locking for scaled monitors (#5587)
- hyprpm: minor fixes to hyprpm for shallow and versioned clones
- misc: fix autocompletions for meson (hyprctl/hyprpm)
- notifications: fix notifications on manually rotated monitor (#5599)
Other:
- CI: unshallow on checkout before sourcing the tarball
- cursor: add hyprcursor loggers
- build: Unbreak build on FreeBSD by adjusting dependencies (#5595)
- hyprpm: checkout branch and rev separately
- hyprpm: err out on missing runtime deps
- input: send an empty relative event after constraint motion events
- window: remove input ref on unmap
Special thanks
Special thanks to these chads for donating money to me:
- alukortti
- Wickedly
- Philipp Soldunov
- MasterHowToLearn
- Theory_Lukas
- Goggi
- ari-cake
- kittyandrew
- Azelphur
- taigrr
- SomeMediocreGamer
- axeo
- slash_ii
- Guillaume B.
- Leicham
- Pim West
MRs
- Fix xwl cursor locking for scaled monitors by @LivingCodeX in #5587
- Apply wlroots gitignore by @thejch in #5592
- Unbreak build on FreeBSD by adjusting dependencies by @jbeich in #5595
- notify: fix notifications visibility on manually rotated monitor by @FUFSoB in #5599
New Contributors
- @LivingCodeX made their first contribution in #5587
- @FUFSoB made their first contribution in #5599
Full Changelog: v0.39.0...v0.39.1
v0.39.0
We're interrupting the usual programme to broadcast this important update to Hyprland.
Freedesktop won't take this one away from you: the cool new stuff in hyprland :)
Notes for packagers
- We've detached from upstream wlroots, now using our fork that is statically linked (no more libwlroots.so)
- IMPORTANT: the source tarball has a bug where if a distro packages hyprland incorrectly, hyprpm will not work at all. This is fixed in git and in the
-rev1
source tarball.
New features:
- flake.nix: add hyprcursor follows (#5435)
- hyprctl: Add shell completions (#5404)
- hyprpm: add shell completions (#5423)
- hyprpm: add support for minimum versions
- layouts: add missing include
- makefile: add patch option to make asan
- monitor: add workspace null check to visible flag
- renderer: Add dimaround layer rule (#4643)
- swipe: add events
- workspace: Add count group flag in windowCount workspace selector prop (#5499)
- workspacerules: add back on-created-empty functionality (#5452)
Fixes:
- CColor: fix getAsHex
- IME: fix IME popup mouse inputs (again) (#5417)
- IME: fix blurry ime on scaled
- IME: fix crash on restarting IME (#5428)
- IME: fix incorrect popup damage (#5383)
- IME: fix race condition on closing window (#5455)
- compositor: fix ghost fadingOut windows remaining after cleanup
- configmgr: fix header priority
- constraint: fix possible uaf on double destruction
- core: fix compile without pch
- core: fix some crash conditions around workspace ptrs in CWindow
- core: fix visibility flags in moveWorkspaceToMonitor
- hooksystem: Fix miscalculation in comment (#5442)
- hooksystem: manually map trampoline addresses
- hyprctl: fix fish completions
- hyprctl: fix grammar mistakes in completions
- hyprctl: fix zsh completions
- hyprpm: fix wlroots path (#5567)
- input: fix focus on maximized bg surfaces
- input: fixup background layer checking on maximized
- keybinds: fix spammy warning
- macros: fix no pch warning
- master: fix center resizing (#5394)
- master: fix crash (#5472)
- master: fix full height when all windows master (#5549)
- master: fix swapped workspaces (#5397)
- master: fix workspace orientation not being restored after workspace rule no longer applies (#5463)
- opengl: fix modif in blur
- renderer: some fixes for renderModif
- window: fix invalid last workspace id
- workspace: fix crash on destruction of compositor (#5495)
- workspace: fix special unnamed workspace rules (#5390)
- workspacerules: fix workspace rule loops (#5433)
Other:
- Makefile: remove refs to libwlroots
- Nix & Meson: switch to wlroots-hyprland
- Workspace/core: Refactor workspace storage (#5380)
- blur: block modif only on no new optimize
- cmake: make sure that OpenGL::EGL is populated
- compositor: move wl_display_destroy_clients (#5498)
- compositor: remove windows from fadingOut properly
- config: Don't override fullscreen opacity if only two opacities are provided (#5512)
- config: verify string length in wrv2 before calling back
- core: Event loop rework (#5466)
- core: assert attempted UAFs in windowExists
- core: simplify sanityCheckWorkspaces
- cursor: Fallback to xcursor if failed to render hyprcursor (#5534)
- damageSurface: don't correct smallVec twice
- deps: move from wlroots to wlroots-hyprland
- eventloop: move timers to an event loop fd
- hooksystem: attempt allocating pages in linear order
- hyprctl: improve help pages (#5385)
- hyprctl: print monitor disabled status (#5525)
- hyprerror: align 32-bit types after 4c79668 (#5375)
- hyprpm: Improve Hyprpm Update Performance (#5530)
- hyprpm: Use proper path to update repo when processing user provided revision (#5414)
- hyprpm: ignore version checks for shallow clones
- hyprpm: install shell completions
- hyprpm: print more info on build failures
- inhibitor: always destroy on window unmap
- input: Dont set active monitor when simulating mouse movement (#5465)
- input: Option for handling off-window axis events (#4177)
- input: allow focus to bottom layers on maximized in reserved
- input: don't remove pinned focus on workspace change (#5486)
- internal: removed Herobrine
- layers: separate anim configs for open/close (#5421)
- makefile: move wlr headers dir
- master: guard window in moveWindowTo
- monitor: check for invalid workspaces in onConnect
- monitor: unset visible flag from ws on disconnect
- opengl: log framebuffer errors
- pkg-config -> pkgconf for hyprpm and cmake
- popups: more safety in damage checking
- props: Allow setting per-window fullscreen opacity (#5470)
- props: Parse border color props as gradient (#5513)
- renderer: avoid double-rendering ls-es on fadingOut
- renderer: block screen shader on screencopy
- renderer: render back layer for workspace-less passes
- scripts: switch to branch --show-current for branch in generateVersion
- style: run clang-format
- subsurface: init existing subsurfaces on children creations
- swipe: nuke numbered
- window: always unref workspace on unmap
- workspaces: add visible flag
- workspace: remove lastFocusedWindow on unmap
- workspace: remove monitor and visible flags on inert
- workspace: update windows when selector match could change (#5533)
Special Thanks
Special thanks to these people for donating money to me to keep this ball goin':
- alukortti
- Wickedly
- Philipp Soldunov
- MasterHowToLearn
- Theory_Lukas
- Goggi
- ari-cake
- kittyandrew
- Benjamin
- Thanos Apollo
- Myryk
- Party Wumpus
- EpixMan
- taigrr
- Gaetan Lepage
- SomeMediocreGamer
- port19
- numbatty
- cat
- kittyandrew
- FUFSoB
- mroote
- Azelphur
- 0xk1f0
- eternal
- vulonkaaz
- JPEG
- Arimil
- Stephen_M64
- vpavliashvili
- bog
MRs
- hyprerror: unbreak build on 32-bit architectures by @jbeich in #5375
- IME: fix incorrect popup damage by @sungyoonc in #5383
- Workspace/core: Refactor workspace storage by @vaxerski in #5380
- fix unnamed special workspace rules by @MightyPlaza in #5390
- Fix master center resizing by @thejch in #5394
- Fix master resizing by @thejch in #5397
- Improve hyprctl help pages by @Micovec in #5385
- hyprctl: Add shell completions by @LOSEARDES77 in #5404
- Use proper path to update repo when processing user provided revision by @zakk4223 in #5414
- layers: separate anim configs for open/close by @end-4 in #5421
- IME: fix crash and auto enter by @sungyoonc in #5428
- hyprpm: fix incorrect commits number parsing by @bvr-yr in #5437
- Fix miscalculation in comment by @sundhaug92 in #5442
- Fix workspace rule loops by @thejch in #5433
- workspacerules: add back on-created-empty functionality by @alyanser in #5452
- IME: fix ime on closing window by @sungyoonc in #5455
- Add missing follow to flake.nix by @fred21O4 in #5435
- Fix master workspace orientation not being restored after workspace rule no longer applies by @thejch in #5463
- Dont set active monitor when simulating mouse movement by @thejch in #5465
- Event loop rework by @vaxerski in #5466
- IME: fix IME popup mouse inputs (again) by @MikeWalrus in #5417
- Hot fix for mater layout resize crash by @thejch in #5472
- cmake: make sure that OpenGL::EGL is populated by @cnt0 in #5469
- hyprpm: add shell completions by @LOSEARDES77 in #5423
- don't remove pinned focus on workspace change by @MightyPlaza in #5486
- Allow setting per-window fullscreen opacity by @SoSeDiK in #5470
- compositor: move wl_display_destroy_clients so we dont crash on exit by @gulafaran in #5498
- workspace: fix crash on destruction of compositor by @gulafaran in #5495
- Change pkg-config -> pkgconf for hyprpm and cmake by @vaxerski in #5502
- Option for handling axis events outside window area by @dranull in #4177
- hyprctl: fix zsh completions by @postsolar in #5503
- meson: fix hyprctl fish completions & install hyprpm completions by @ErrorNoInternet in #5510
- Add count group flag in windowCount workspace selector prop by @sungyoonc in #5499
- Parse border color props as gradient by @SoSeDiK in #5513
- Don't override fullscreen opacity if only two opacities are provided by @SoSeDiK in #5512
- hyprctl: print monitor disabled status by @JManch in #5525
- workspace: update windows when selector match could change by @sungyoonc in #5533
- Fallback to xcursor if failed to ren...
v0.38.1
v0.38.1 comes with a few backports from main to v0.38.0 to fix a few issues and performance bugs.
Backports
- hyprerror: align 32-bit types after 4c79668 (#5375)
- renderer: block screen shader on screencopy
- input: allow focus to bottom layers on maximized in reserved
- renderer: avoid double-rendering ls-es on fadingOut
- CColor: fix getAsHex
- subsurface: init existing subsurfaces on children creations
- compositor: remove windows from fadingOut properly
- compositor: fix ghost fadingOut windows remaining after cleanup
Special thanks
Special thanks as always to these gigachads for donating money to me:
- alukortti
- Widkedly
- pulsar256
- Philipp Soldunov
- MasterHowToLearn
- Theory_Lukas
- Goggi
- ari-cake
- Spicy_Ommelette
- lll
- ii7mood
- kre
- senesc
Full Changelog: v0.38.0...v0.38.1
v0.38.0
A nice april update for y'all brought by the Hyprland Corporation
No backdoors added, I promise.
New features:
- config/workspace: added workspace selectors
- hyprctl: add missing commands to usage (#5211)
- input: Add options to set tablet's active area (#5199)
- input: add misc:hide_cursor_on_key_press
- keybinds: add Dispatchers for "force float" and "force tiling" (non-toggle) (#5137)
- keybinds: add binds:disable_keybind_grabbing
- layers: add animation direction overrides
- renderer: add support for gles3.2 screen shaders
- screenshader: add screen_size uniform
- socket2: add pin event
- tablet: Add left_handed option for tablets (#5178)
Fixes:
- CGradientValueData: fix toString() method (#5220)
- IME/TI: Fixes and refactoring
- IME: Fix ime popup coordinates and artifacts (#5373)
- IME: Refactor and fixup popups
- IME: don't assert on lock mismatch, just fix it
- IME: fix crashes with destroyed text-inputs
- README: Fix Preview B image (#5188)
- animations: Fix animation issue in focusworkspaceoncurrentmonitor (#5202)
- animations: Fix incorrect animation when manually moving a window when its being created (#5141)
- animations: fix layer slide with fade
- animvar: fixup update callbacks and cleanup
- avar: fix warp onEnd conditions
- avar: minor fixes
- build: fix builds without pch (#5198)
- core: Fix resizeparams (#5262)
- core: fix fullscreen + floating focus change (#5291)
- core: fix missing workspace events during swapping (#5251)
- deco: fix groupbar offset (#5364)
- dispatchers: fix swap workspaces wrong positioning of floating windows (#5328)
- format: fix format
- github: fix github issue template crash dir (#5269)
- hyprctl: fix plugin list on no plugins (#5357)
- hyprpm: add missing newline (#5207)
- ime: fix build without pch
- input: Fix incorrect keyboard focus taken when no window was present (#5337)
- input: fix crash with text-input-v1 (#5234)
- keybinds: Fix exit trigger by moving it to monitor.frame (#5240)
- layers: fix bottom slide animation (#5307)
- master: fix moving fullscreen workspace and remove duplicate code (#5131)
- reenderer: Add 1 border damage to fix number rounding issues (#5343)
- renderer/animations: Fix various inaccurate damage tracking issues and offsets (#5297)
- renderer: Fix layer and window damage sometimes missing 1 frame (#5370)
- renderer: Fix rendering when swiping workspaces (#5367)
- renderer: minor fixes to misaligned reported surface rendering
- renderer: minor fixups for misaligned surface rendering offsets
- scripts: fix asan patch
- swipe: fix nullptr in
onSwipeUpdate
(#5191) - tablet: minor focus fixes
- textinput: fix ime when opening multiple windows (#5281)
- textinput: fix typo (#5365)
- windowrules: Fix resizeparams parsing. (#5206)
- workspace: fix integer overflow in selector parser (#5177)
- workspace: fix selectors with special:
Other:
- IME: Improve handling of text-input and ime-relay (#5147)
- IME: guard unfocused TIs in leave
- Nix: match derivation to Nixpkgs
- animationmgr: use realpos and size for border damage
- animations: simplify window loop
- compositor: remove windows from fading out on destroy
- config: Config error limit/hyprctl (#5165)
- config: be a bit louder in the disabled log warning
- constraint: do not disable constraints in destroy
- constraint: set active flag before propagating props
- core: ensure m_pLastMonitor validity over unsafe state
- core: match all workspace rules instead of the first one only (#5340)
- cursormgr: don't set x theme in changeTheme
- cursormgr: initialize size to 0
- cursormgr: log theme loading failures
- cursormgr: scale hotspot with buffer
- dispatchers: open special ws on active monitor instead of mouse monitor (#5330)
- github: remove redundant instruction (#5163)
- hyprctl: output json with
--batch
if requested (#5277) - hyprpm: avoid crashes on corrupted headers
- hyprpm: log shell in build without fails
- input: Only limit drag resizes (#5164)
- input: focus window on mouse down on groupbar (#5224)
- internal: removed Herobrine
- layer-shell: render popups above everything
- layers: don't change workspace on layer restore focus (#5308)
- layershell: release all mouse buttons before focus on new ls (#5219)
- layershell: update render pos and size in arrange
- layout: improve initial size prediction for floating
- makefile: Remove old headers first (#5316)
- master: Make master workspace orientation rule dynamic (#5339)
- opengl: minor adjustment to getPreferredReadFormat
- opengl: report shader compilation errors from screen_shader (#5138)
- refactor: move window.hpp to desktop/
- renderer: allow blurring ls popups
- renderer: disable surface adjustments for misaligned reported when manual resizing
- renderer: don't render window on other mons during anim in
- renderer: don't translate surface box on interactive resizes with non-updated sizes
- renderer: dont render fullscreen special on wrong monitor (#5249)
- renderer: forward decl for b_pch=false (#5250)
- screenShader: allow camel for screensize
- socket2: sanitize data for newlines
- swipe: Touchscreen workspace swipe (#4489)
- text-input: reset lock counter on surface destroy
- textinput: send deactivate on disable ti
- window: assign surface on create
- window: set config only when both props end anims
- xwayland: assign wlr_surface on associate
Special thanks
Special thanks as always to these chads for donating:
- alukortti
- Wickedly
- pulsar256
- Philipp Soldunov
- MasterHowToLearn
- Theory_Lukas
- Goggi
- someone
- sandsquare
- Yok0ri
- C0d3Cr4f73r
- Keule2
- Bims
- yutkat
- taigrr
- Crazyroostereye
- Zerron21
- jaketompkins
- Vic
- ari-cake
- ModalDiagram
MRs
- Update LICENSE by @somerand0mcat in #5132
- Fix master moving fullscreen workspaces by @thejch in #5131
- Dispatchers for "force float" and "force tiling" (non-toggle) by @djvs in #5137
- Touchscreen workspace swipe by @earboxer in #4489
- Fix incorrect rendering when manually moving a window when its being created by @thejch in #5141
- github: remove redundant instruction by @phonetic112 in #5163
- input: Handling multiple surfaces for the text-input-v1 protocol implementation and imporve InputMethodRelay logic by @sujoshua in #5147
- Only limit drag resizes by @phonetic112 in #5164
- Fix infinite loop in workspace selector caused by integer overflow 💀 by @thejch in #5177
- Add left_handed option for tablets by @khalid151 in #5178
- Fix Preview B image by @linfindel in #5188
- swipe: fix nullptr in
onSwipeUpdate
by @horror-proton in #5191 - fixing gentoo ebuild due to lack of precompiled headrs in build env by @brettalcox in #5198
- Config error limit/hyprctl by @zakk4223 in #5165
- opengl: report shader compilation errors from screen_shader by @oatmealine in #5138
- hyprpm: add missing newline by @PraneethJain in #5207
- hyprctl: add missing commands to usage by @Ligthiago in #5211
- windowrules: Fix resizeparams parsing. by @schilkp in #5206
- fix: release all mouse buttons before focus on new surface by @drendog in #5219
- CGradientValueData: fix toString() method by @holgerschurig in #5220
- focus window on mouse down on groupbar by @MightyPlaza in #5224
- Add options to set tablet's active area by @khalid151 in #5199
- input: fix crash with text-input-v1 by @sungyoonc in #5234
- Fix animation issue in focusworkspaceoncurrentmonitor by @thejch in #5202
- forward decl for b_pch=false (CInputPopup in Renderer.hpp by @brettalcox in #5250
- Dont render fullscreen special on wrong monitor by @thejch in #5249
- Move exit trigger to monitor frame by @dmayle in #5240
- Send workspace events during swapActiveWorkspaces and focusWorkspaceOnCurrentMonitor (when swapping) by @thejch in #5251
- Fix github issue template crash dir by @thejch in #5269
- Update hyprctl to output json with
--batch
by @khalid151 in #5277 - Fix ime not able to grab a new window without unfocusing textbox by @sungyoonc in #5281
- fix fullscreen + floating on monitor focus change by @MightyPlaza in #5291
- fix bottom layer slide by @MightyPlaza in #5307
- layer: don't change workspace when restoring focus by @MightyPlaza in #5308
- Remove old headers first by @mmhobi7 in #5316
- Fix swap workspaces and moveworkspacetomonitor wrong positioning of floating windows by @thejch in #5328
- Allow openi...