3
0
mirror of https://github.com/hyprwm/Hyprland.git synced 2026-08-18 11:02:10 +00:00
Commit Graph

7742 Commits

Author SHA1 Message Date
af0d014cb2 desktop: refactor views, major cleanups (#15779)
Tons of stuff cleaned up, etc.
2026-08-17 22:26:04 +02:00
5751911091 tests: decompose group tests into smaller units (#15875) 2026-08-16 19:56:19 +02:00
a1b9dc0e8c config: Add cursor:warp_on_monitor_change (#15844)
Allow to control cursor warping when switching to a workspace
on a different monitor.
2026-08-15 17:17:59 +02:00
fea3b3367b config/lua: make stable_id field a string, matching hyprctl (#15869) 2026-08-15 16:59:12 +02:00
a0c6946d66 config: allow exit_window_retains_fullscreen to be configurable for groups (#15731)
Co-authored-by: mugen <iorjgiodr3548769uyj@534ytgr89ui0ji.345tu>
2026-08-15 16:48:02 +02:00
6d43ce8453 input/seat: check HID caps directly for focus enters (#15841)
ref #15765
2026-08-12 20:57:58 +02:00
153df31d2c errorOverlay: fix reserved area tracking (#15839) 2026-08-12 20:57:46 +02:00
ab2d313b55 monitor: fix layer arrangement on layout changes (#15842) 2026-08-12 20:57:27 +02:00
1256bd180e scrolling/fullscreen: fix notification layer creation causing mouse flick in scrolling covering FS windows (#15795) 2026-08-12 19:25:43 +02:00
24e23ca4bb config: deprecate special_scale_factor (#15832)
workspace rules achieve the same effect
2026-08-11 19:57:59 +02:00
a269fd77b0 layout/drag: fix draggingTiled not being reset properly (#15833)
ref #15789
2026-08-11 19:57:49 +02:00
0cef51ab72 config/lua: fix empty object construction not resulting in nil (#15831) 2026-08-11 19:47:37 +02:00
8a24bb3bb6 render/cm: fix hdrMetadataEqual returning inverted result (#15825)
std::memcmp returns a nonzero value when the buffers differ, so
hdrMetadataEqual() returned true for differing metadata and false for
identical metadata. The caller in commitFrame compares
!hdrMetadataEqual(WANTED, CURRENT), which inverted this again: identical
HDR metadata was treated as changed every frame, re-sending
AQ_OUTPUT_STATE_HDR and forcing a full DRM modeset on every commit.

Fixes a per-frame modeset loop on displays with HDR metadata configured
(e.g. cm=hdredid).

Co-authored-by: neonvoidx <me@neonvoid.dev>
2026-08-11 19:06:15 +02:00
45c8510c9c flake.lock: update 2026-08-11 19:39:50 +03:00
58c22e7af4 chore: add keyboard-modifiers.txt to .gitignore (#15828) 2026-08-11 17:02:12 +02:00
814603164e tests: auto-group a new tiled window into the focused floated group (#15797) 2026-08-11 16:04:10 +02:00
b5a6d81f47 renderer: fix surface buffer transform and viewport spec compliance (#14441)
* renderer: Invert set_buffer_transform-provided transform

* viewporter/compositor: Correct wp_viewport order of operations
2026-08-10 18:09:51 +02:00
3cbff91e8e config/actions: remove redundant if condition in center (#15814) 2026-08-10 17:41:55 +02:00
c8a51d4f5b desktop/window: fix special workspace hiding on window unmap fallback (#15763) 2026-08-10 17:41:04 +02:00
963c5cf818 config/actions: fix center not saving the new pos of a floating window (#15810) 2026-08-10 16:36:14 +02:00
e3bbfe3cfa shaders: make each SRC/DST TF a variant (#15792)
* shaders: make each SRC/DST TF a variant

by making each SRC/DS transferunction a variant we reduce the branching
and instruction count by up to 60%, measured with INTEL_DEBUG=fs,gs,vs

* opengl: cache activetex, blendfunc, VBO, FBO

this was about 9% of a 10 second apitrace capture of redundant gl calls
with same things over and over. just cache it like we do with other
things. because i dont trust the driver to even act accordingly.
2026-08-10 16:25:38 +02:00
f7daeb7f79 hyprctl: random Lua-adjacent fixes (#15767)
* hyprctl(repl): go interactive if no Lua was given via args

The previous check would mess up if `-i` was provided, since it'd see
*an argument* and refuse to go interactive, even when it should've (i.e.
`hyprctl -i 0 repl`).

* ipc(socket1): new escape parsing for batch commands

Semicolons are still the command separator, so those have to be escaped
if they appear anywhere inside of commands (e.g. multi-statement Lua
code). Also, literal backslashes need to be escaped as well.

* tests(ipc): add test for hyprctl batch mode

This test case includes slightly weird stuff (semicolons in Lua code;
square brackets) that would break the old parsing logic.

* format: dang braces
2026-08-09 20:00:17 +02:00
b20621d48b layout: pinned floating windows now retain their last position (#15784)
information when changing workspaces (fixes not reverting to the last
position after exiting fullscreen)
2026-08-09 15:46:47 +02:00
5dee44a724 [gha] Nix: update inputs 2026-08-08 22:23:34 +00:00
0e98ddc9c3 render/cm: re-send HDR metadata when its content changes (#15761)
Compare the metadata we would send against what is already committed and
send if there is any difference.

Found this testing whether MaxCLL influences in-panel tonemapping.
setHDRMetadata was only called when the monitor entered or left HDR or
in some cases surrounding direct scanout. Changes to the metadata itself
while the monitor stayed in HDR was computed and stored in the image
description, but never sent.

This particularly effects mastering data and min/max/max_avg luminance
changes.

Signed-off-by: Will Temple <will@wtemple.net>
2026-08-09 00:21:00 +02:00
05819c4ad6 tests: prefer SPAWN_KITTY over Tests::spawn_kitty in tests (#15754)
* tests: Recommend using macros instead of Tests::{spawnKitty,spawnLayerKitty}

* tests: Replace `Tests::spawnKitty` with `SPAWN_KITTY` where possible
2026-08-09 00:20:47 +02:00
dcd544e422 input: no keyboard exclusivity during dnd (#15780) 2026-08-09 00:20:16 +02:00
5b1c0fda73 renderer/fp16: fix blur clear and invalidate (#15791)
the clear was scissored to m_renderData.damage while we fakeDamaged full
monitor. so in render pass when m_blurFBShouldRender is hit the FB was
cleared over partial damage but rendered over whole monitor causing
stale blur blends into the new outside damage. so save old damage,
render fakeDamage, restore old damage.

invalidate({GL_DEPTH_STENCIL_ATTACHMENT}) at end of
renderTextureWithBlurInternal cant set m_cleared = false because its not
invalidated the COLOR_ATTACHMENT, so guard invalidate.
2026-08-08 22:46:26 +02:00
006bcc69a1 config/lua: display dispatcher names in binds list and when stringifying (#15722) 2026-08-08 22:41:40 +02:00
a2636192b5 shaders: fix gradient NaN on out of gamut colors (#15793)
GLSL pow(x, y) gives undefined results for x < 0, use float
multiplication as exampled by the Oklab creator himself.
2026-08-08 14:51:54 +02:00
65be579e9c tests: fix subtest shortcutLongPress from keybinds tests (#15783)
* fix subtest shortcutLongPress from keybinds tests

* fix clang format
2026-08-07 23:17:57 +02:00
face6d144b core/fullscreen: set pos/size of all group members to the same value when FSing groups (#15577)
* Fix group members not having uniform size when FSed

* fix the same bug - but for scrolling

* format

* fix include

* ditto

* groups are evil

* format

* TEST - Default handled FS -- tested in dwindle

Co-authored-by: Aqa-Ib <16420574+Aqa-Ib@users.noreply.github.com>

* TEST - Default handled FS -- tested in scrolling

Co-authored-by: Aqa-Ib <16420574+Aqa-Ib@users.noreply.github.com>

* TEST - layout handled FS -- Scrolling

Co-authored-by: Aqa-Ib <16420574+Aqa-Ib@users.noreply.github.com>

* format and comment fix

* spelling is hard

* slight fix for posterity

* spelling is very hard

* thankyouclangdverycool

* revert change that made all windows in a group show up as FS in hyprctl clients

* change test to reflect the reversion

* mirror mirror can you tell me who forgot to revert that change after it was redundant?

* tribute to the magic mirror

* clean up includes

* format

* Hope is the first step on the road to disappointment

Fix tests failing

---------

Co-authored-by: Aqa-Ib <16420574+Aqa-Ib@users.noreply.github.com>
2026-08-07 16:53:28 +02:00
7d4a3c5768 codeowners: set erstarr to codeowners for fullscreen related stuff (#15752) 2026-08-06 15:13:29 +02:00
5bec961bb4 internal: remove duplicate call to fullscreen function (#15745) 2026-08-06 15:08:58 +02:00
4ffd88e5e6 buffer: dont drop damage until actually read (#15718)
we cant drop dmabuf damage until we have actually hit a frame that reads
it, otherwise clients like firefox attaches a buffer with damage,
eventually sends a .frame() and .commit() then we clear the damage and
the render has nothing to use.
2026-08-06 15:04:55 +02:00
64962f89e4 renderer/transformer: make window transformers adapt to viewport constraints (#15759) 2026-08-05 20:38:11 +02:00
cab296c38b protocols/bell: play a sound by default (#15502)
---------

Co-authored-by: thompty <tatthompson44@gmail.com>
2026-08-05 15:16:20 +02:00
db95de4f5b config/lua: clean up HLMonitor:set_workspace() and set_special_workspace() (#15534)
* lua: make HLMonitor:set_workspace "silent" (no focus or mouse move)

* lua: report correct function name when HLMonitor:set_special_workspace errors

* monitor: allow setting special workspace on monitor without focusing that monitor

* lua: make HLMonitor:set_special_workspace also "silent"

* workspace: support not carrying focus with us in moveWorkspaceToMonitor

This leaves focus on the same monitor, rather than carrying it along
with the moved workspace as usual.

* lua: fix HLMonitor:set_workspace placing the same WS on different monitors

I thought this was already handled for me; apparently not.

* lua: support creating new workspaces via HLMonitor:set_workspace(), set_special_workspace()

* monitor: don't send workspace events on non-focusing workspace change

* lua: better handle (non-)?special selectors in HLMonitor:set_workspace(), set_special_workspace()

Both now check that they're given a workspace of the appropriate
special-ness.

* lua: don't require a table arg for HLMonitor:set_workspace(), set_special_workspace()

Also, names given to `set_special_workspace()` no longer require a
`special:` prefix, matching the toggle_special dispatcher's behavior.

* misc: allow getting workspaces relative to a given monitor

Not just the currently focused one.

* lua: reference targeted monitor for relative WS selectors in set_workspace()

Now, e.g. `m+1` selects the next workspace on the *targeted* monitor,
rather than on the focused monitor.

* tests: HLMonitor:set_workspace() behavior

* tests: HLMonitor:set_special_workspace() behavior

* tests: don't force unnecessary refreshes in luaGetWorkspace test

* lua: return workspace name as selector for special workspaces

Previously this would be the ID, which was negative and would then be
interpreted later as a *relative* ID. Normal workspaces can still return
their (positive) IDs, that's fine.

* monitor: properly leave focus behind when stealing a special workspace
2026-08-05 14:10:45 +02:00
5aacb62147 desktop/windowRule: add no_wobble window rule and workspace rule (#15735) 2026-08-05 14:09:01 +02:00
d10194c63b keybinds: refactor, clean up code, move to new style (#15568) 2026-08-05 13:26:45 +02:00
91f29f23bb flake.lock: update, drop glaze version requirement 2026-08-05 02:10:08 +03:00
961c6df0dd desktop/rules: fix gaps_out rule overriding float_gaps (#15662)
* desktop/rules: fix gaps_out rule overriding float_gaps

* test for distinct tiled and float gaps
2026-08-04 22:16:47 +02:00
fa45db49c6 hdr: reset surface metadata on change (#15598)
if we dont reset surface metadata, the monitor is stuck in using the
surfaces metadata, and doesnt restore back ours. meaning after DS and
gaming and returning, colors stay stuck fringed until a new metadata
modeset.

however this causes a modeset on returning that isnt wanted if a
notification temporarly shows and vanishes. but a future PR in perhaps
using a timer if DS reenters in a short bit we dont care about the notif
fringing?

better then leaving the monitor permanently wrong colors.
2026-08-04 22:14:55 +02:00
10d320fde6 committiming: release for intersected monitors (#15744)
some clients never binds an output, so check for intersection like fifo
does aswell.
2026-08-04 22:14:24 +02:00
ea95499cd7 hyprctl: fix wiki strings (#15739)
do not keep raw URLs, those can change. Just direct the user.
2026-08-04 14:33:39 +02:00
1bf16447d7 config/monitorRuleManager: recheck mirrors on ensure (#15733)
ref #15695
2026-08-04 14:33:26 +02:00
901881c9f2 render: always render in normal transform (#15714)
fixes a lot of effects needing to know about the output transform, screencopy, etc.
2026-08-04 14:33:08 +02:00
ef0d600e47 algo/scrolling: fix unFSing window sticking to the left corner instead of respecting focus_fit_method (#15716)
ref #15715
2026-08-04 13:14:34 +02:00
c82ff80fde hyprctl/repl: support multiline interactive input (#15663)
* lua: include Lua's error code in eval/repl error responses

* hyprctl: let interactive repl handle multiline input

repl with a simple command (i.e. Lua code provided as a hyprctl arg)
handles multiline input just fine already, but interactive didn't. This
uses the Lua repl's own approach of trying to execute, and letting the
user continue if the exec attempt returns an "unexpected EOF"-type
syntax error. It's a little clunky, but if it's fine for them, it should
be fine for us.

Ref: 7579fc9d7e/lua.c (L569-L582)

* hyprctl: append full multiline command to repl history

* fix format :(

* lua: fix crash on print with no args

Co-authored-by: Dregu <dregu@dreg.us>

---------

Co-authored-by: Dregu <dregu@dreg.us>
2026-08-04 13:13:14 +02:00
275e27704a layout/drag: add binds:drag_center_window (#15563)
* layout/drag: add binds:drag_center_window

* drag: add m_dragHotspot and map it proportionally on size change

* tests/drag: add tests for binds:drag_center_window
2026-08-04 11:41:26 +02:00