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

7625 Commits

Author SHA1 Message Date
36b2e0cfe0 version: bump to 0.56.0 v0.56.0 2026-07-20 09:50:48 +02:00
42b15274bc ci(codeowners-plus): fetch PR head before trying to diff against it (#15486) 2026-07-19 22:35:00 +02:00
271b0d1eb4 desktop/focusstate: restore keyboard focus after layer closed (#15419) 2026-07-19 14:14:19 +02:00
0a5aa45bc1 windowstate/layerstate: don't dynamic_cast a view's self-ptr during destruction (#15471)
* windowstate/layerstate: don't dynamic_cast a view's self-ptr during destruction

The view.destroy listeners erase_if'd their containers by evaluating
dynamicPointerCast<IView>(x->m_self). Since the event is emitted from
~IView, the matching view's derived member m_self is already destroyed
by then, so reading it is UB. Compare control-block identity via
PHLVIEWREF{x} instead, which never dereferences the dying object.

* iview: remove pointless destroy listener

CWindow/Layers calls removeSafe in their own onDestroy,
the best way to avoid buggy code is by simply not doing it at all :)
2026-07-19 12:56:43 +02:00
abc2ecf1d4 presentation: ensure feedbacks arent silently dropped (#15473)
earlier codex complaint, if empty fifo commit happend but contained
feedbacks it was silently dropped. also at the same time the only time
we should discard current feedbacks if there are any is when a new
buffer appears.

add a presentation bit flag, set it in onGetFeedback.
2026-07-19 11:59:52 +02:00
ef903b8927 [gha] Nix: update inputs 2026-07-19 08:22:22 +00:00
c3e2d14db4 input-capture: permission type not in lua config (#15481) 2026-07-19 10:20:51 +02:00
55ce25bd67 animation: dont .lock() a uniqueptr (#15470)
animationManager.hpp does makeUnique<CAnimatedVariable<VarType>>() , so
this has never worked.
2026-07-18 09:24:42 +02:00
466f6bc53f protocols/presentation: associate feedback with committed surface state, attempt 2 (#15459)
* Revert "presentation: revert "associate feedback with committed surface state (#15243)""

This reverts commit 4a753eaa03.

* presentation: fix WP locks and discard failed draws

the reason it stopped working is last change that PR
did was moving from raw ptrs to UP's with WP's but tried to .lock() the
WP, we cant lock a WP that points to a UP.

also ensure all draws that isnt visible or simply failed creating
texture or invalid sizes discard in elementrenderer. and all others
present.
2026-07-17 23:54:38 +02:00
116e636fc0 frame: fix frame scheduling being skipped or one vblank off (#15404)
* frame: fix frame scheduling being skipped or one vblank off

in renderer we need to check if we have pending damage, needsFrame can
be cleared by commits that was done while pageflip was in flight.

m_renderingActive also needs to be set after actually comitting.

add a commitTimingTarget that we check against on presentation otherwise
the committiming timer runs only on duration and might miss the upcoming
vblank period as in always being one vblank late. and use the timespec
we get from presentation.

* frame: skip early release on invalid timestamp

skip early release on invalid timestamp, and rely on the timer timeout
if missing.

makes the presented signal emit a std::optional timestamp instead.

* frame: only early release for single output

if the surface entered multiple outputs, we cant early release it
because they flip at different times and might make it release way
before the flip of the other monitor.

* frame: anchor commitTimingTarget to the client timestamp

get the absolute target directly from the requested timestamp.
reset commitTimingTarget if delay is 0, and reset it in SSurfaceState
reset.

* frame: fix codex complaints

use fromTimespec so "C++ steady-clock epoch does not exactly match
CLOCK_MONOTONIC" doesnt occur. unify the timespec code in both
monitor and commit timing protocol. always send the timespec on monitor
presented signal.
2026-07-17 23:53:09 +02:00
26c0b380f4 pointer-warp: fix forgetting enter serial (#15462)
* pointer-warp: fix forgetting enter serial

* fix 4am code
2026-07-17 23:52:23 +02:00
4afc273db2 internal: fix tokens for xdg-desktop-portals (#15433)
* tokens: expire one shot initial workspace tokens

tokens are only removed once a window maps, so things like
xdg-desktop-portal got the 1337 month duration token added and always
first launch in the wrong workspace. check PINITIALWSTRACKING and if
mode 1 just give them a 1 second token. like other code paths does.

* tokens: increase timeout to 10 seconds

increase the timeout to 10 seconds, slow launching things like krita is
above the 1 second we have now. if 10 seconds is to much it can always
be fine tuned lower later.

* tokens: add a config option for timeout

add initial_workspace_token_timeout as a config option to be able to set
the default timeout for the initial workspace tracking token.

* tokens: rename timeout to actually timeout

urgl, to much going on at the same time. TIMEOUT certainly makes more
sense for an timeout.
2026-07-17 17:54:36 +02:00
ad317198d9 init: revert "gain real-time through rtkit (#15411)"
This reverts commit 83cd85b3d5.
2026-07-17 16:41:07 +02:00
3f6055bdbf xwayland: preserve title fallback state (#15449)
Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>
2026-07-17 14:30:26 +02:00
lin
de530935a0 hyprpm: continue after repository update failures (#15391) 2026-07-17 14:28:36 +02:00
46f64d36b8 ipc/lua: rxpose tearingHint for windows (#15431)
* Expose tearingHint in hyprctl clients

* Add tearing_hint field to HL.Window
2026-07-17 14:28:18 +02:00
44d16e9bd1 config/lua: allow wildcards or absolute paths in require (#15461) 2026-07-17 14:27:54 +02:00
164aed999d desktop/view: fix IView virtual inheritance and erase_if ptr (#15421)
* desktoå/view: fix IView virtual inheritance and erase_if ptr

CSubsurface and CSessionLock inherited IView non-virtually while
CWindow/CLayerSurface/CPopup inherited it virtually.

erase_if compared event.address with the derived complete object
pointer. under virtual inheritance those addresses differ.

* desktop/view: use dynamic casting over static casting

change to dynamic casting instead of static casting.

* better

* more better

more better is more.

---------

Co-authored-by: Vaxry <vaxry@vaxry.net>
2026-07-17 14:27:15 +02:00
229bca7b1a build: link Glaze to the compositor core (#15454)
Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>
2026-07-17 11:42:56 +02:00
5663e6d129 xwayland: validate ICCCM hint replies (#15450)
Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>
2026-07-17 10:24:19 +02:00
d3e1411d94 screenshare: minor fence and copy fixes (#15429)
* screenshare: don recopy a dmabuf while fence is pending

copy is called for every pending frame on the output commit. and output
commit fires on any output commit not just buffer ones. so the fence can
easily be not signaled yet.

* screenshare: erase done frames too

erase done frames from m_pendingFrames to avoid growing to huge
numbers. a finished frame copied/failed/session gone is skipped by the
copy but was only erased once it expired. a slow client could let the
vector grow.
2026-07-17 10:22:41 +02:00
4a753eaa03 presentation: revert "associate feedback with committed surface state (#15243)"
This reverts commit 0cf705600f.
2026-07-17 10:20:20 +02:00
9d1813ad29 dmabuf: revert "ensure both create and create_immed verify v4 (#15424)"
This reverts commit 031579e722.
2026-07-16 23:44:34 +02:00
0cf705600f presentation: associate feedback with committed surface state (#15243)
* presentation: associate feedback with committed surface state

* presentation: avoid shared ownership for feedback state

* presentation: format feedback ownership declarations

* presentation: release destroyed feedback resources

* presentation: own feedbacks uniquely

* presentation: format feedback ownership update

---------

Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>
2026-07-16 20:13:52 +02:00
82baeb5e92 render: handle explicit sync fallback safely (#14986)
* render: handle explicit sync fallback safely

* render: avoid blocking explicit sync fallback

* ci: retry flaky Hyprland VM tests

* render: avoid blocking explicit sync fallback

---------

Co-authored-by: Pppp1116 <pcaiadoguerreiro@gmail.com>
Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>
2026-07-16 20:12:32 +02:00
83cd85b3d5 init: gain real-time through rtkit (#15411)
* init: gain real-time through rtkit

* init: use sdbus to talk with rtkit

* init: simplify

* ci: add sdbus-cpp dependency

* init: add HAS_RTKIT def
2026-07-16 20:11:37 +02:00
b500399878 renderer: block solitary on fadeouts (#15428)
after 254d6bae77 fadeouts now live in
fadingOutState() instead of the normal containers, so add SC_FADEOUT and
iterate the new fadingOutState() and block solitary for fadeouts.
2026-07-16 12:02:27 +02:00
ee773e85e4 renderer: fix mirror draw buffers on rotating work buffers (#15427)
glDrawBuffers is per FBO state, but it was only set when mirroring was
first enabled on whatever work buffer happened to be mainFB that frame.
since work buffers rotate other FBO's kept default single draw buffer.

move the draw buffer selection into internalAlloc so it always follows
the mirror attachment.
2026-07-16 12:01:54 +02:00
031579e722 dmabuf: ensure both create and create_immed verify v4 (#15424)
invalid_format check was only done in the create handler and missed
create_immed, move it into verify() instead so it catches both.
2026-07-16 12:00:45 +02:00
11c38d62fa algo/master: avoid nullptr dereferences (#15422)
there are a few random crashes reported with master, safeguard two
potential nullptr derefs. and remove a unusued PNODE.
2026-07-16 11:57:05 +02:00
a97a2850c8 core: fix --verify-config crash (#15418)
verify path returned early without cleanup(), which made it destruct
to late and call CWorkspaceAlgoMatcher thats already destroyed.
2026-07-16 11:50:05 +02:00
26dbbb4f69 renderer: allow blurring of the session lock surface (#15283) 2026-07-16 11:21:34 +02:00
0b0d7ede21 input-capture: impl protocol (#7919)
Co-authored-by: Gerben Meijer <infernix@gmail.com>
Co-authored-by: Emerson Matos <emegson@live.com>
Co-authored-by: Mihai Fufezan <mihai@fufexan.net>
Co-authored-by: Ashley Stonham <reddrop@reddrop.net>
Co-authored-by: extra-salad <87635414+extra-salad@users.noreply.github.com>
2026-07-15 23:56:05 +02:00
d7fc7240f4 protocols: avoid crash in lease (#15417)
when lease is destroyed the destroy listener nullptr deref m_lease, and
all it uses it for is logging the fd number. capture the fd by value to
avoid crashing.
2026-07-15 14:32:14 +02:00
338bdbb323 dwindle: avoid crashing on expired weakptr (#15415)
* dwindle: avoid crashing on expired weakptr

pTarget can be expired when toggling a tiled window to floating during a
drag move that triggers removeTarget -> recalculate -> calculateWorkspace
before the dead node has been cleaned up.

* hyprtester: wait for enabled monitor

without waiting for enabled monitor we can race the tests and call focus
on non enabled monitors.
2026-07-15 14:31:12 +02:00
0f6f2792e4 desktop/popup: fix crash on destroy (#15416)
* popup: fix crash on destroyed xdg surface resource

the xdg_surface can be destroyed before the xdg_popup, so CPopup::onDestroy
hasnt run yet and the popup is still in its parents m_children with m_wlSurface set.

if guard it in popupTreeExtents.

* popup: safe guard bad resource

popups can be fading out while the resource is dead, ifguard it and
return m_lastPos if thats the case.
2026-07-15 14:30:45 +02:00
79bc0ca16e groups: add groupbar disable_when_only option (#15009)
* groups: add groupbar disable_when_only option

* groups: improve `groups` test

`groups_disable_when_only` test fails because it checks windows sizes after
`disable_when_only` option changed. Changing option currently don't
trigger window size update.

Same problem with `groups` test, but it worked because it or:
- didn't checked window size after changing option.
- called `hl.dsp.group.toggle()`, which trigger size update
- at the begining set `enable = 1` while it `== 1` by default
Now it fails too :D

Seems it works in usual Hyprland usage because:
- `CHyprGroupBarDecoration::draw` calls
- `g_pDecorationPositioner->repositionDeco(this)`,
  which will invalidate cache and update sizes.

* groups: fix `disable_when_only` and `groups` tests

REFRESH_LAYOUTS is not required 'cause REFRESH_WINDOW_STATES will
trigger update of window position too.

* groups: fix groupbar drawing
2026-07-14 17:32:22 +02:00
f2eafdf105 hyprctl: handle partial IPC transfers (#15408)
Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>
2026-07-14 17:32:05 +02:00
6984188eb0 xwayland: guard unknown selection events (#15409)
Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>
2026-07-14 15:23:43 +02:00
e0d9283897 config: fix cycle_next using nonexist layoutmsg for prev (#15396) 2026-07-14 12:45:00 +02:00
30588bec76 protocols: fix SHM cursor partial damage copy (#15399)
use the current row and the SHM stride when calculating copy offsets,
the previous code calculated the copy offset incorrectly by always using
the first damaged row and by assuming each row as only as wide as the
damaged region.
2026-07-14 11:46:33 +02:00
d371ad2760 config: fix initial workspace tracking (#15395)
* config: fix initial workspace tracking

previous refactor over to Executor missed m_isLaunchingExecOnce meaning
any hl.exec_cmd(hyprlauncher) got the token of 1337 month duration at
the first launched workspace, so the initial launch of things gets that
token and opens on the wrong workspace.

add m_isLaunchingExecOnce back, and make getHyprlandLaunchEnv a member
of CExecutor aswell.

the needle counting also missed the final partial chunk if the read
failed to read 512 bytes but still read a chunk.

* hyprtester: fix monitor rule

ID's are unreliable. try to parse it directly from name.
2026-07-14 11:45:55 +02:00
e7996dc9bd desktop: remove using directives, move to geometric functions (#15402) 2026-07-14 11:35:26 +02:00
ed11458bbc README: update showcase 2026-07-14 11:35:12 +02:00
b348ff780c cursor: revert "transform hardware cursors within content bounds (#14988)"
This reverts commit 5033ab954b.

Bad cursor on transformed.
2026-07-14 11:10:14 +02:00
30983d6ff0 splashes: add 5th comp winner's splash 2026-07-14 08:46:14 +02:00
402eceea96 protocols: fix protocol null dereference paths (#15275)
* Fix protocol null dereference paths

* protocol: align image description state assignment

---------

Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>
2026-07-13 20:47:22 +02:00
5033ab954b cursor: transform hardware cursors within content bounds (#14988)
* cursor: transform hardware cursors within content bounds

* cursor: transform hotspot as a pixel

---------

Co-authored-by: Pppp1116 <pcaiadoguerreiro@gmail.com>
Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>
2026-07-13 20:44:34 +02:00
2c3ed5f66e window: cache process environment lookups (#15264)
Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>
2026-07-13 20:43:20 +02:00
1eebdac356 config/lua: add lua-driven custom live gestures (#15393)
fixes https://github.com/hyprwm/Hyprland/issues/15020
2026-07-13 20:42:06 +02:00