Releases: hyprwm/Hyprland
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...
v0.37.1
A massive (not) update to fix rendering of half of your apps, oops.
New features:
- renderer: add better multi monitor animations (#5126)
Fixes:
- renderer: fix non-reported sizes window box calculations
MRs
Special Thanks
Special thanks as always to these people for donating moolah to me:
- alukortti
- Wickedly
- pulsar256
- Philipp Soldunov
- MasterHowToLearn
- Theory_Lukas
- Goggi
- gigo
- BW Drop-Ins!
- UNH Grad Student
- ismd
- abihf
- drweissbrot
- FrothyMarrow
- tootwrangler / brettalcox
- JustasPolis
- dek
- Igor Ramazanov
- CosmixFrost
- matthewp
- Sheepmilk
Full Changelog: v0.37.0...v0.37.1
v0.37.0
Happy 2 years of Hyprland!! Thanks to everyone who has supported Hyprland in any way shape or form, couldn't have done it without yall. <3
A chonker update for y'all for this occasion.
Notes for packagers
- New dependency: hyprcursor
New features:
- config: Add input:scroll_factor configuration (#4980)
- cursormgr: add fallbacks for unknown cursors
- hyprpm: Add support for specifying exact git revisions for plugin repo (#4983)
- input: add general:resize_corner for manual resizing (#5090)
- input: fix window move stutter by introducing additional checks for low-hz monitors (#4553)
- keybinds: Add the 'catchall' keyword that matches all keys (#4930)
- layers: add fully featured animations
- makefile: add make asan
- notify: Add custom fontsize support for notifications (#4981)
- socket2: Add 5 IPC event with support for workspace ID (#5022)
- subsurface/popup: expand on map/unmap to add buffering
Fixes:
- CI/Nix: attempt to fix broken cache (#4963)
- CrashReporter: Fix compilation with musl libc (#4805)
- animations: fix m_Goal not being set after #4911 (#4992)
- build: fix libc++/clang build (#4886)
- configmgr: fix compile on 32-bit archs
- core: add additional headers for Popup.cpp and InputMethodRelay.hpp (#4909)
- core: Fix typo and check grandchild PID in spawn() (#5070)
- core: fix crashes on access of deleted wlr_ surface
- cursormgr: fix invalid access to hyprcursor in xwayland init
- cursormgr: fix memory leak with cursor buffers
- hyprctl: Fix incorrect invalid fontsize kwarg response (#5013)
- input: fix minor default cursor reset conditions
- input: fix window move stutter by introducing additional checks for low-hz monitors (#4553)
- internal: minor fixups for fading out xwayland windows
- keybinds: Fix typo (#5081)
- layers: minor fixes for new animations
- layout: Fix toggling fullscreen special workspace on different monitor (#5000)
- lock: fix red screen issues with multiple monitors (#5100)
- master: Fix animate resize (#4942)
- master: Fix master layout window focus and scroll (#5074)
- master: fix invalid config usage
- opengl: fix compilation on legacy renderer (#4928)
- popup: minor fixes to xdg geometries
- renderer: fix invalid access on non-assigned surfaces
- renderer: minor fixes to transformations
- subsurface: fix visibility check
- surface: fix damage tearing feedback
- windowrules: fix center
- xwayland: fix no_xwayland compiles
Other:
- Nix: remove hyprland-unwrapped leftover
- Nix: use propagatedBuildInputs instead of wrapping
- animations: Refactor AnimatedVariable (#4911)
- ci: pack hyprpm to the release tar
- compositor: ignore grab extend behind special workspaces (#4944)
- compositor: reject focus to noFocus OR xwayland windows
- compositor: update state after moving to workspace
- config: improve config value infrastructure
- config: more safety around monitor keyword
- config: report errors from sourced files
- config: update per device input configs link (#4951)
- constraints: only warp cursor on deactivate if constraint is locked. (#5056)
- cursormgr: use XCURSOR_THEME for x themes
- drag: check min size for reisze drags
- dwindle: preserve fs state on switchWindows
- events: apply monitor state on sessionActive
- events: don't switch to active workspace on workspace rule
- events: ignore setTitle when title didn't change
- events: update render data after workspace window rule (#4931)
- hyprctl: hide unmapped windows without -a
- hyprctl: parse custom types in getoption
- hyprctl: print format and modes
- hyprpm: don't copy .so if file doesn't exist
- input: Rewritten pointer constraints (#4889)
- input: only override dragging corner on floating (#5092)
- input: scale local coords in constraints
- input: send motion to confined cursors
- internal: Support libhyprcursor (#5009)
- internal: Removed Herobrine
- keybinds: Allow fullscreen/maximize in special workspace (#4921)
- keybinds: Better handling of workspace_back_and_forth (#4952)
- keybinds: better follow xkb translation state
- keybinds: track submap at press for keypresses
- keybinds: unconstrain mouse on focusmonitor and cyclenext (#4863)
- layer-shell: allow for popup creation before map
- layout: unfullscreen on toggle into tiled fullscreen
- layout: warp the cursor when focusing windows (#4982)
- master: change active monitor when moving windows around (#5001)
- monitor: remove commas from short description (#4970)
- notifs: Implement notification dimissing (#4790)
- popup: send scale on map
- props: bump ver to 0.37.0
- refactor: move a few things to desktop/
- renderer: Allow headless mode in hyprland (#4794)
- renderer: adjust surface dimensions for oversized not-yet ackd surface sizes
- renderer: force a few render frames on init anim end
- renderer: respect forceNoBlur when rendering small surface windows (#4932)
- sessionlock: refocus after destroy focused surface (#5117)
- splashes: add 2ya splash
- subsurface: Rewrite the subsurface tree (#4877)
- subsurface: don't update transform on unmap
- subsurfaceTree: assign surfaces to a CWLSurface
- surface: unify owners
- surfacetree: Revert "subsurfaceTree: assign surfaces to a CWLSurface"
- window: ignore surface updates in unsafe / on invalid monitors
- window: prevent vector modification segfault while iterating
- window: remove unused list
- windowrules: Make min/maxsize rules dynamic (#4775)
- windowrules: check if floating when resizing from maxsize (#5019)
- windowrules: minor improvements to min/max size
- xdg: check for floating conditions before sending tiled size hint
- xdg: minor improvements to initial size reporting
- xdg: rewrite entire popup implementation
- xkb: handle invalid keymaps in updateXKBTranslationState
- xwayland: Set xwayland's name prop (#4924)
- xwayland: disable initial focus for xwayland dialogs (#4936)
- xwayland: set scaledBy for unmanaged windows in map
- xwaylandmgr: don't read xwayland surface from unmapped xwayland
Special Thanks
Special thanks as always to these people for donating moolah to me:
- alukortti
- Wickedly
- pulsar256
- Philipp Soldunov
- MasterHowToLearn
- Theory_Lukas
- Goggi
- gigo
- BW Drop-Ins!
- UNH Grad Student
- ismd
- abihf
- drweissbrot
- FrothyMarrow
- tootwrangler / brettalcox
- JustasPolis
- dek
- Igor Ramazanov
- CosmixFrost
- matthewp
- Sheepmilk
MRs
- keybinds: unconstrain mouse on focusmonitor and cyclenext by @JManch in #4863
- Rewrite the subsurface tree by @vaxerski in #4877
- fix libc++/clang build by @pg83 in #4886
- add additional headers for Popup.cpp and InputMethodRelay.hpp by @brettalcox in #4909
- animation: Refactor AnimatedVariable by @GartoxFR in #4911
- Add missing nix devshell dependencies for make asan by @vesdev in #4919
- Implement notification dimissing by @ItsDrike in #4790
- Rewritten pointer constraints by @vaxerski in #4889
- events: update render data after workspace window rule by @JManch in #4931
- Add the 'catchall' keyword that matches all keys by @Cu3PO42 in #4930
- renderer: respect forceNoBlur when rendering small surface windows by @JManch in #4932
- disable initial focus for xwayland dialogs by @phonetic112 in #4936
- opengl: fix compilation on legacy renderer by @MrRoy in #4928
- Fix master layout animate resize by @thejch in #4942
- compositor: ignore grab extend behind special workspaces by @JManch in #4944
- Update per device input config link in the default config file by @Isaiah-Hamilton in #4951
- Better handling of workspace_back_and_forth when using focusworkspaceoncurrentmonitor dispatcher by @tomben13 in #4952
- build: attempt to fix broken cache by @musjj in #4963
- Allow fullscreen/maximize in special workspace by @thejch in #4921
- monitor: remove commas from short description by @MikeWalrus in #4970
- layout: warp the cursor when focusing windows by @MikeWalrus in #4982
- Allow for input:scroll_factor configuration by @gammons in #4980
- CrashReporter: Fix compilation with musl libc by @earboxer in #4805
- resize-limiter: add additional check for low-hz monitors by @bvr-yr in #4553
- animations: fix m_Goal not being set after #4911 by @outfoxxed in #4992
- hyprpm(feat): Support specifying exact git revisions for plugin repo by @ItsDrike in #4983
- Add custom fontsize support for notifications by @ItsDrike in #4981
- Master layout: fix issue of active monitor not changing when moving windows around by @thejch in #5001
- Fix toggling fullscreen special workspace on different monitor by @thejch in #5000
- Fix incorrect invalid fontsize kwarg response by @ItsDrike in https://github.com/hyprwm/Hyprland/pul...
v0.36.0
New Hyprland update brought to you by Yours Truly, the CEO of Hyprland Corp.
A lot of fixes and changes, enjoy! Thanks for all the contributions :)
CPU and GPU usage should be considerably down from 0.35.*
Notes for packagers
- new dep: hyprlang>=0.4.0
Breaking changes
- config:
- migrated to hyprlang. Some nice additions include
rgba(123, 123, 69, 0.5)
, dynamic variables updating, and more. - all
device:XYZ
sections are nowdevice { name = XYZ ...
, see the wiki ##
is now properly treated as an escaped#
.
- migrated to hyprlang. Some nice additions include
- windowrules:
- no*request rules have been nuked in favor of the new
suppressevent
rule.
- no*request rules have been nuked in favor of the new
New features:
- config: Add option to resolve keybinds by sym instead of code (#4851)
- config: add defaultName for workspace rules
- config: add opengl:force_introspection
- core: add env to disable crash reporter
- dispatchers: add Fullscreen without sending fullscreen to application (#4720)
- dwindle: add swapsplit dispatcher (#4702)
- feat: Add css style gaps (#4723)
- hyprctl: add -r argument
- internal: add
forcenofocus
prop (#4672) - keybinds: Add an option to pass a window argument to moveoutofgroup (#4724)
- renderer: add more logging for fails in beginRender
- socket2:
monitoraddedv2
IPC event for monitor description and id (#4646) - windowrules: add suppressevent
Fixes:
- config: fix errors in default config
- config: fix layout invalidation for keyword commands (#4826)
- config: fix tiny typo in defaultConfig.hpp (#4693)
- core: Fix SEGV/ABRT core dump when exiting (#4823)
- core: Fix building plugins (#4783)
- core: Try to fix the exit hang (#4811)
- crashreporter: fix logging of function data (#4632)
- format: fix formatting
- hyprctl: fix dispatchBatch() treating empty curitem as last request (#4681)
- hyprctl: fix showing invalid instances
- input: fix follow_focus
- input: fix vectorToWindowUnified with floating over fs
- keybinds: Fix focus not moving along when moving workspace (#4660)
- keybinds: fix focuswindow for fullscreen (#4840)
- keybinds: fix keys without keysyms triggering random binds (#4739)
- keybinds: fix movewindoworgroup onto empy workspace on next monitor (#4486)
- keybinds: fix swapactiveworkspaces not moving focus
- layout: Fixed ghost window when opened while fullscreen on a different workspace (#4822)
- monitors: fix outputmgr nullptr crash (#4738)
- renderer: fix invalid damage accumulation with invalid buffer_age
- renderer: fixup damage_ring rotation
- renderer: minor fixes for introspection detection
- screencopy: fix invalid damage being used for final copy in dma
- screencopy: fix ~dtor being in monitorRenderResources map
- shadow: fix missed invalid use of cfg val ptr
- surface: fix damage calcs with a viewport src
- surface: fix invalid damage tracking in damageSurface
- surface: minor fixes for last logicalDamage calc fix
- xdgpopup: fix UAF because of an invalid listener connection
Other:
- IME: don't set modifiers on grab destroy
- Migrate the config to hyprlang (#4656)
- animationmgr: expand layer box for damage
- assets: update tetrahedra by honkadaloonga
- avar: return curve value of 1 when not animated
- compositor: allow source monitor to be provided to
getMonitorInDirection
(#4837) - compositor: check for pworkspace validity in setActiveMonitor
- config: adjust default splash col
- config: remove usages of nomaximizerequest from default cfg
- config: update default config for hyprlang migration
- core: nullcheck for old monitor in moveWorkspaceToMonitor
- crashreporter: Use ~/.cache as cache dir (#4719)
- dwindle: round wbox before setting
- events: bring back accidentally nuked preConfigReload
- flake.nix: override inputs for xdph and hyprlang
- groupbar: scale groupbar text according to monitor scale (#4640)
- hyprctl: ignore non-lock files for instances
- hyprctl: jsonify new gaps
- hyprctl: more safety around stoull
- hyprctl: reload everything on dynamic source keywords
- hyprctl: remove hardcoded hyprctl commands. (#4671)
- input: Map touch devices and tablets bound to an output (#3544)
- input: avoid rampant refocuses on popups
- input: avoid reassigns of unchanged surfaces in processMouseRequest
- input: don't schedule frame on cursor move on hw cursors
- input: focus monitor on mouse down
- input: log cursor image requests
- input: partially revert #4514
- input: refocus on completed drags
- internal: removed Herobrine
- keybinds: focus floating on top of fs
- keybinds: focusWorkspaceOnCurrentMonitor: use focused monitor instead (#4625)
- misc: remove unused var
- misc: you're the best for reading this :)
- monitor: don't damage twice (#4727)
- nix: overlay polish for prev parameter (#4558)
- opengl: check bottom/bg layers for required introspection
- renderer: Update splash text properties to be configurable (#4707)
- renderer: accept custom state requests for fake outputs
- renderer: don't calculate mirror damage without mirrors present
- renderer: don't set solitary on present notifications
- renderer: ignore set cursor surface if cursor should be hidden (#4780)
- renderer: nuke lastFrameDamage and rework finalDamage
- renderer: take into account fading out windows in solitary recheck
- renderer: update cursor also when hostpot only changes
- rules: ignore static tile/float rules in dynamic gets
- screencopy/toplevelexport: sanitize pointers in ::copyFrame
- screencopy: attempt binding framebuffer before gathering format
- screencopy: avoid dangling client ptrs on client destroy
- screencopy: damage entire screen on a no-damage request
- screencopy: move monitor verif check to the proper place
- screencopy: send full frame damage
- sessionLock: send preferred fractional scale
- shaders: use highp for fragments
- socket2: move to the wayland event loop
- surface: ensure global pointers valid before using in destructor (#4844)
- toplevelexport: set last damage for dmabuf copy
- vector: avoid min0 clamps without a max being invalid
- wayland: implement keyboard_shortcuts_inhibit_v1
- windowrules: nuke no*request
- xdg: manually schedule initial configures
- xwayland: ignore OR activate requests if surface doesn't want focus
- xwaylandmgr: clamp size in setWindowSize
- xwaylandmgr: proper clamping for setWindowSize
Special thanks
Special thanks as always to these humans (hopefully) who donated some euros to me:
- alukortti
- Wickedly
- pulsar256
- Philipp Soldunov
- MasterHowToLearn
- Theory_Lukas
- Goggi
- toni
- MPDarkGuy
- RandomLegend
- The Linux Cast
- dmayle
- Frank
- andreas.maier.de
- Christian D. Storgaard
- Host-in-the-Shell
- sgt
- David Aguiló
- knikkinen
- Mike H
- M1K3
- crashbit
- Danix
- UnclePsymon
- gshood
- junecat
- jodd
- kai-tub
- NachaktiverHalbaffe
- Nicholas Romero
MRs
- use focused monitor for
focusWorkspaceOnCurrentMonitor
by @phonetic112 in #4625 - Fix crash reporter backtrace by @thejch in #4632
- groupbar: scale groupbar text according to monitor scale by @https123456789 in #4640
- Fix focus not moving along when moving workspace by @Scrumplex in #4660
- fix: remove hardcoded hyprctl commands. by @levnikmyskin in #4671
- Fix hyprctl --batch treating empty curitem as last request by @ComycSans in #4681
- nix: overlay polish for prev parameter by @GrizzlT in #4558
- fix: typo on defaultConfig.hpp by @lpnh in #4693
- add
forcenofocus
prop by @phonetic112 in #4672 - dwindle: add swapsplit dispatcher by @haasn in #4702
- Feature:
monitoraddedv2
IPC event for monitor description by @spikespaz in #4646 - monitor: don't damage twice by @abmantis in #4727
- Fullscreen without sending fullscreen to application, fixes #1817 by @epicgamer256705 in #4720
- feat: Allow passing a window argument to the moveoutofgroup dispatcher by @morr0ne in #4724
- Fix outputmgr nullptr crash (kanshi/shikane like tools) by @levnikmyskin in #4738
- Migrate the config to hyprlang by @vaxerski in #4656
- fix: keys without keysyms triggering random binds by @rszyma in #4739
- Change cache dir by @thejch in #4719
- feat: Add css style gaps by @DashieTM in #4723
- renderer: ignore set cursor surface if cursor should be hidden by @andresilva in #4780
- Fix building plugins by @q234rty in #4783
- Update splash text properties to be configurable by @Stock44 in #4707
- Try to fix the exit hang by @thejch in #4811
- Nix: override inputs for xdph and hyprlang by @fufexan in #4814
- Fix SEGV/ABRT core dump when exiting by @thejch in #4823
- config: fix layout invalidation for keyword commands by @JManch in #4826
- hyprctl: add missing newline in error case of missing `HYPRLAND_INSTA… by @trofi in https://g...
v0.35.0
New hyprland release? No way. I think we got some new stuff and fixes.
This release was brought to you by the Hyprland Corp.
Notes for packagers
- wallpaper paths have changed. See
assets/
or theMakefile
.
New features:
- config: Add border gradients to windowrulev2 (#4335)
- hyprctl: add systeminfo
- hyprpm: add --force for update
- input: add special_fallthrough
- keybinds: Add dispatcher for xmonad/qtile-style workspace switching (#4439)
- master: Add more null checks for rollnext (#4343)
- renderer: Add new background infrastructure
Fixes:
- Meson: fix wallpaper installation
- cmakelists: fix wlroots patch sed
- dwindle: fix windows being created at incorrect position when cursor is over reserved area (#4520)
- hyprctl: screen_shader config fixes (#4102)
- hyprpm: fix crash on add plugin
- hyprpm: fix invalid pkg-config path env in build
- keybinds: fix ignoremods with release
- keybinds: fix keys getting stuck + minor refactor & optimizations to keybind handling (#4304)
- keybinds: fix tracking of sent key states
- layershell: Fix greedy mouse grab from keyboard_interactive layer (#4401)
- main: Fix typo in std::cerr (#4359)
- meson: fix wlroots patch (#4324)
- nix: fix overlay composition
- pluginapi: fix hooks with negative rip offsets
- renderer: fixup misaligned fsv1 surfaces with uv
- subsurfaceTree: Fix nullptr crash when disconnecting a monitor (#4577)
Other:
- HookSystem: rename PAGESIZE_VAR from PAGESIZE to avoid conflict (#4321)
- Makefile: force ln command to overwrite symlink (#4347)
- Makefile: pass PREFIX to CMake
- Makefile: remove hyprland symlink on uninstall
- Nix: disable fortify for devshell (#4463)
- build: protocols: require wayland-protocols >= 1.32
- cmake: Propagate NO_XWAYLAND to wlroots building setup (#4385)
- compositor: clarify common errors at launch
- compositor: don't close special on focus on pinned (#4533)
- config: variables update their value when set again (#4263)
- core: improve cleanup logic
- crashreporter: skip first possibly cut off line in log tail
- damage: use buffer_damage instead of effective_damage
- dwindle: avoid sending negative sizes to wlr
- events: ignore sending mouse enter to focused if a constraint is active
- examples: remove example plugin
- fractional: Set preferred scale on monitor config reload (#4406)
- groupbar: Drag single window instead of destroying group (#4327)
- groupbar: improve gradient handling (#4390)
- groupbar: separate gradients from title (#4444)
- hyprctl: move to a class and unify commands
- hyprpm: don't update headers if they are up-to-date, only recompile
- hyprpm: handle failed compilations gracefully
- hyprpm: install headers locally (#4585)
- hyprpm: log verbose return of cmake and meson in update
- hyprpm: update global state on plugin recompile not header update
- hyprpm: verify headersHashCompiled as well in headersValid()
- input: Allow disabling touchscreen input (#4517)
- input: allow focusSurface when locked if surfase is sessionLock
- input: focus window on mouse down on decoration (#4514)
- input: leave special on focus (#4358)
- input: partially revert #4401
- input: remove animate checks on resize limiter (#4480)
- input: track exclusive LSes
- internal: minor header cleanup
- internal: removed Herobrine
- issue templates: make versions spoiler'd
- keybinds: Refocus only if the silently moved window had the focus (#4328)
- keybinds: avoid duplicated held keys, only use last, remove all
- layout: Round window pos and size on togglefloating (#4407)
- layout: save float props before setting fs state (#4537)
- layout: update rules before applying fullscreen nodes in layouts
- make: unbreak with non-GNU ln(1) after 78f9ba9
- master: guard PNODE in roll*
- monitor: clear output state after usage
- monitor: don't call output_state_finish on buffer-less state clears
- monitor: wrap usage of wlr_output_state
- opengl: apply box rot to projections
- opengl: rassert false on lost context
- opengl: use texBox for rendering background texture
- pluginapi: allow registering hyprctl commands
- renderer: Only force nearest neighbor when the sizes are off by one or two (#4325)
- renderer: allow rendering multiple fullscreen windows in third fs pass
- renderer: avoid unnecessary gpu resource deletions
- renderer: ignore box offsets for fullscreen windows
- renderer: overhaul renderModifData
- renderer: reset fb pointers after render pass
- screenshader: rename output uniform to wl_output (#4606)
- subprojects: remove wlroots.wrap
- subsurfaceTree: update surface tree protocol feedback on map
- surface: avoid spam of window surfaces with scale and transform events
- swipe: Prevent hiding current workspace when swiping (#4417)
- tearing-control: handle unmapped surfaces for hints
- wlroots: update version patches
- xwayland: remove delta from pos sets in configureX11
- xwayland: remove reportedsize set in unmanagedSetGeometry (#4539)
Special thanks
Special thanks as always to these gigachads for throwing some money at me:
- Brodie Robertson
- maxhbr
- pulsar256
- alukortti
- Wickedly
- Philipp Soldunov
- blepabyte
- Adam Szegedi
- garypippi
- ewb
- Motschen
- orbitaldrop
- Seb
- frank
- MasterHowToLearn
- MR_POOR
- Dustee
MRs
- fix keys getting stuck + minor refactor & optimizations to keybind handling by @rszyma in #4304
- Update wlroots-meson-build.patch by @bvr-yr in #4324
- Only force nearest neighbor when the sizes are off by one or two by @q234rty in #4325
- HookSystem: rename PAGESIZE_VAR from PAGESIZE to avoid conflict by @earboxer in #4321
- Drag single window instead of destroying group by @dranull in #4327
- Refocus only if the silently moved window had the focus by @dranull in #4328
- variables update their value when set again by @flick0 in #4263
- Makefile: force ln command to overwrite symlink by @rszyma in #4347
- Add more null checks for rollnext by @thejch in #4343
- Fixed a typo by @naksudev in #4359
- Unbreak install with CMake on FreeBSD by @jbeich in #4361
- leave special on focus by @phonetic112 in #4358
- Propagate
NO_XWAYLAND
on cmake to meson building wlroots by @Piroro-hs in #4385 - groupbar: improve gradient handling by @MightyPlaza in #4390
- Round window pos and size on togglefloating by @Clyybber in #4407
- Prevent hiding current workspace when swiping by @scorpion-26 in #4417
- Fix greedy mouse grab from keyboard_interactive layer by @earboxer in #4401
- Set preferred scale on monitor config reload by @1over137 in #4406
- screen_shader config fixes by @dranull in #4102
- Add border gradients to windowrulev2 by @IdmFoundInHim in #4335
- groupbar: separate gradients from title by @MightyPlaza in #4444
- Implement a dispatcher for xmonad/qtile-style workspace switching by @virchau13 in #4439
- Disable fortify for devshell by @huynguyen in #4463
- remove PANIMATE checks on tick thing by @phonetic112 in #4480
- build: protocols: require wayland-protocols >= 1.32 by @SeanMcG in #4488
- Allow disabling touchscreen input by @earboxer in #4517
- Check if pinned window is focused on special by @phonetic112 in #4533
- layout: save float props before setting fs state by @bvr-yr in #4537
- dwindle: fix windows being created at incorrect position when cursor is over reserved area by @rszyma in #4520
- remove m_vReportedSize set for xwayland by @phonetic112 in #4539
- nix: fix overlay composition by @GrizzlT in #4555
- subprojects: remove wlroots.wrap by @fufexan in #4572
- Makefile: remove hyprland symlink on uninstall by @Roger-Roger-debug in #4574
- Fix nullptr crash when disconnecting a monitor by @abmantis in #4577
- hyprpm: install headers locally by @vaxerski in #4585
- screenshader: rename output uniform to monitor by @JManch in #4606
- focus window on mouse down on decoration by @MightyPlaza in #4514
New Contributors
v0.34.0
Hey, haven't seen you in a year! New year, new hyprland update.
The longest commit gap to date ends with this plentiful one :D
New tools
- hyprpm: a hyprland plugin manager. See the wiki or
hyprpm --help
for usage.
Notes for packagers
- New dep: tomlplusplus
- New tool: hyprpm (build/hyprpm/hyprpm, executable)
New features:
- config: add debug:disable_scale_checks
- config: add qt env to default config
- dispatchers: add tiled/floating to cyclenext
- groupbar: add egl context to refreshGroupBarGradients() (#4238)
- groupbar: add enabling groupbar and setting priority (#4299)
- hyprctl: add decorations (#4275)
- hyprpm: Add hyprpm, a Hyprland Plugin Manager (#4072)
- hyprpm: add duplicate header error and log more verbose in install fails
- input: Add scroll_points option for device (#4101)
- input: add relative_input for tablets
- makefile: add rm hyprpm for uninstall (#4086)
- makefile: add symbolic link for lowercase binary name
- master: add dispatchers rollnext and rollprev (#4209)
- opengl: add toggleable nvidia_anti_flicker
- renderer: add decoration:blur:popups_ignorealpha
- renderer: add occlusion for special workspaces
- renderer: add option to blur popups
- systemd: add HYPRLAND_NO_SD_NOTIFY
- windowrules: add focus param
- windowrules: add initialTitle and initialClass (#4259)
- windowrules: add onworkspace
Fixes:
- border: fix failed assert on small windows
- border: fix missed translate by offset
- deco: fix missing border on togglefloating (#4305)
- functionHooks: fix incorrect protlen calcs
- hyprpm: fix with system headers
- internal: fix interactions with fakefullscreen (#4113)
- internal: minor include fixes and missed format
- nix: fix wlroots build
- renderer: double lookup fix, input: double conversion fix (#4124)
- renderer: fix auto scale detection with fractional
- renderer: fix null cursor surface sets being ignored
- signal: fix invalid pointer access (#4207)
- toplevelexport: fix missed pmonitor set for opengl
- toplevelexport: fix missing GL_READ_FRAMEBUFFER set in shm copy
- windowrules: minor fixes to onworkspace
- xdg-shell: fix sending of suspended state
Other:
- Nix: expose legacyRenderer package
- Nix: remove duplicate options from modules (#4012)
- Nix: remove libdrm override
- Nix: wrap with gcc
- ci: use composite action to minimize code duplication (#4112)
- compositor: don't block focus if there is no keyboard
- compositor: spawn environment setup with keybind manager (#3722)
- config: Avoid regenerating config if --config is used (#4103)
- config: Use canonical instead of read_symlink (#4136)
- config: don't emit reloaded event before eventManager is created
- config: improve layoutopt handling for workspacerules
- configmanager: set a limit to config variable substitutions
- crashreporter: don't explicitly set 777 on crash report directory
- deco-positioner: include sticky in sent geometry
- dwindle: Use window->middle() when cursor is on reserved area (#4253)
- filesystem: Set the sticky bit on
/tmp/hypr
(#4199) - flake.lock: update
- flake.lock: update nixpkgs
- focus: prefer sendMotionEventsToFocused for ensuring cursor image
- groupbar: Middle click on groupbar to close tab (#4297)
- groupbar: remove extra border size from groupbars (#4262)
- hyprctl: allow instances without HIS
- hyprctl: check only ISDEBUG in version (#3702)
- hyprpm: Link against tomlplusplus when using cmake (#4145)
- hyprpm: Make sure we're in git repo before getting new hash (#4303)
- hyprpm: cast std::clamp args to be of the same type (#4116)
- hyprpm: clone plugins recursively
- hyprpm: guard empty command
- hyprpm: trim paths in PATH
- idle: notify idle on tablet inputs (#4201)
- input: Activate resize_on_border only when key is pressed (#4170)
- input: Ignore some input events when focus is on a layer surface (#4306)
- input: Prevent crash with invalid keyboard layout (#4157)
- input: allow setting cursor even if it's hidden
- input: don't steal mouseDown from LS (#4260)
- input: unset resize cursor on empty focus
- internal: Remake borders as window decorations (#4104)
- internal: Unify input handling on decorations (#4280)
- internal: convert uname fields to strings before logging
- internal: import qt env to dbus
- internal: nuke CWindow::m_bMappedX11
- internal: removed Herobrine
- keybinds: Keep focus on special when switching workspaces (#4084)
- keybinds: check for null last monitor in changeworkspace (#4077)
- layout: Focus a floating window after closing the last tiled (#4137)
- pluginapi: Trampoline hooks %rip patching improvements (#4256)
- pluginapi: better wording for plugin function hook errors
- pluginapi: log assembler return
- pluginapi: manually detect endbr64 opcodes in function hooks
- renderer: Allocate background texture only if required (#4111)
- renderer: apply scale to wlr after checks
- renderer: cursor hiding logic improvements (#4184)
- renderer: deny invalid scales and suggest a replacement
- renderer: don't render decorations on renderdata.decorate false
- renderer: don't set surfaces on cursor timeout
- renderer: don't use clipBox for pinned window occlusion during animations
- renderer: ignore windowRequestedCursorHide
- renderer: improve cursor hiding infra
- renderer: improve fullscreen workspace client rendering
- renderer: reject non-clean scales, find nearest clean
- renderer: staticize local functions
- renderer: use 120 as the denominator in scale checks
- renderer: use nearest_neighbor for misaligned fractional-scale surfaces
- renderer: use xray for background blur on small() surfaces
- shadow: Avoid rounded shadows when rounding is 0 (#4230)
- shadow: correctly scale boxes
- socket2: emit configreloaded event
- special: move floating windows along with the workspace
- style/ci: apply clang-format and verify it in ci (#4039)
- toplevel-export: commence render pass before reading
- xdg: use better min/max size checks for floating resizes
- xdgshell: bump to 6, send suspended states
- xwayland: don't change workspace on configure for invisible windows
- xwayland: set reported and pending size/pos on geometry sets
- xwaylandmgr: allow resizes without a monitor
MRs
- style: apply clang-format by @zephvr in #4039
- Fix crash in changeworkspace by @ddmetz in #4077
- Add hyprpm, a Hyprland Plugin Manager by @vaxerski in #4072
- Keep focus on active special workspace when switching workspaces by @dranull in #4084
- Add rm hyprpm for uninstall by @thejch in #4086
- Avoid messing with --config by @dranull in #4103
- Remake borders as window decorations by @vaxerski in #4104
- Add scroll_points option for device by @fufexan in #4101
- Fix memory allocation for the background texture by @Nmzik in #4111
- ci: use composite action to minimize code duplication by @zephvr in #4112
- renderer: double lookup fix, input: double conversion fix by @Nmzik in #4124
- hyprpm: unbreak on 32-bit archs via static_cast by @jbeich in #4116
- layout: fix interactions with fakefullscreen by @zephvr in #4113
- Use canonical instead of read_symlink by @dranull in #4136
- Focus a floating window after closing the last tiled by @dranull in #4137
- Link against tomlplusplus when using cmake by @MikeWalrus in #4145
- Nix: remove duplicate options from modules by @fufexan in #4012
- Prevent crash with invalid keyboard layout by @dranull in #4157
- Activate resize_on_border only when key is pressed by @dranull in #4170
- add commit date to "hyprctl version" by @MightyPlaza in #4171
- fixing cursor show/hide logic, #3698 by @dusanx in #4184
- filesystem: Set the sticky bit on
/tmp/hypr
by @Harazi in #4199 - notify idle on tablet inputs by @MikeWalrus in #4201
- bug: fix invalid pointer access by @AhmedYasser5 in #4207
- Master layout: add dispatchers rollnext and rollprev by @thejch in #4209
- Avoid rounded shadows when rounding is 0 by @dranull in #4230
- add egl context to refreshGroupBarGradients() by @MightyPlaza in #4238
- debug: check only ISDEBUG by @andresilva in #3702
- Use window->middle() when cursor is on reserved area by @dranull in #4253
- compositor: spawn environment setup with keybind manager by @andresilva in #3722
- implement support for initialTitle and initialClass, closes #2311 by @zjeffer in #4259
- Trampoline hooks %rip patching improvements by @vaxerski in #4256
- groupbar: remove extra border size by @MightyPlaza in #4262
- deco: don't steal mouseDown from LS by @MightyPlaza in #4260
- nix: fix wlroots build by @andresilva in #4...