1325 Commits

Author SHA1 Message Date
Isaac Freund
037314823e
build: update to wlroots 0.19 2025-06-18 12:22:17 +02:00
Isaac Freund
ecd2a396d3
Seat: put all keyboards in a single group
Deprecate and ignore the riverctl commands for creating explicit
keyboard groups.

In my mind, the only reason to have more than one keyboard group is if
different keyboard devices are assigned different keymaps or repeat
rates. River does not currently allow such things to be configured
however.

When river eventually makes it possible to configure different keymaps
and repeat rates per keyboard device, there is no reason we can't 100%
automatically group keyboards based on the keymap/repeat rate.

Exposing this keyboard group abstraction to the user is just bad UX.

Failing to group keyboards automatically also creates confusing/buggy
behavior for the user if the hardware, for example, exposes some of the
the XF86 buttons on a laptop as a separate keyboard device from the main
keyboard. Creating keybindings for these XF86 buttons that use modifiers
doesn't work by default, but there's no reason it shouldn't just work.

Closes: https://codeberg.org/river/river/issues/1138

(cherry picked from commit 46f77f30dcce06b7af0ec8dff5ae3e4fbc73176f)
2025-03-29 15:54:45 +01:00
Isaac Freund
f482b9ddaa
Cursor: restore previous image on unhide
If client A has an xdg_popup open and the user moves the cursor over a
surface of client B and waits for the cursor to be hidden after a
timeout, the cursor will not be shown on movement until the (invisible)
cursor is moved back into a surface of client A or somewhere the
compositor is responsible for rendering the cursor.

This is due to the (flawed) xdg popup grab interface of wlroots which
prevents wlr_seat_pointer_notify_enter() from sending events to clients
other than the one with the active xdg popup.

Closes: https://codeberg.org/river/river/issues/1192
2025-03-16 13:37:57 +01:00
Isaac Freund
f1904d4e6f
build: bump version to 0.3.10-dev 2025-03-16 12:14:07 +01:00
Isaac Freund
bdc3c0ccf9
build: bump version to 0.3.9 2025-03-10 08:20:10 +01:00
Isaac Freund
60f954c2b0
build: eliminate duplicate version string
There is now a single source of truth for river's version. It is no
longer possible for the versions in build.zig and build.zig.zon to get
out of sync as build.zig now parses the version from build.zig.zon.
2025-03-10 08:17:17 +01:00
Isaac Freund
8f4a746da0
security-context: fix assertion failure
This regression was caused by turning my brain off a bit too much during
the zig 0.14 upgrade.
2025-03-10 07:55:56 +01:00
Isaac Freund
00ab4910e0
build: bump version to 0.3.9-dev 2025-03-07 12:52:50 +01:00
Isaac Freund
23ad9aa412
build: bump version to 0.3.8 2025-03-07 12:50:31 +01:00
Isaac Freund
933701d7f9
build: update to zig 0.14.0 2025-03-07 12:44:28 +01:00
Isaac Freund
0eb478b06a
Xwayland: don't inherit rlimit changes from river
(cherry picked from commit 543697847f2167152ae25f775f39541591b8d020)
2025-03-02 10:21:00 +01:00
Isaac Freund
295bbb241a
build: bump version to 0.3.8-dev 2025-01-04 11:39:28 -06:00
Isaac Freund
189cf6e68b
build: bump version to 0.3.7 2025-01-04 11:35:17 -06:00
Isaac Freund
840eacae62
river: wrap monotonic time > 2^32-1 milliseconds
Fixes: https://codeberg.org/river/river/issues/1176
(cherry picked from commit 6abcc68a198d0246077aaaed8af08db224f16775)
2025-01-04 11:34:16 -06:00
Isaac Freund
a5f94268e6
Output: check scene damage before rendering
This should fix adaptive sync/VRR, which was regressed by db7de8151.

(cherry picked from commit ab879e245cbc317e3a2f5ec0379143d4b25b3cfe)
2025-01-04 11:34:06 -06:00
Isaac Freund
6254211a26
build: bump version to 0.3.7-dev 2024-12-09 15:07:58 +01:00
Isaac Freund
4b24287da7
build: bump version to 0.3.6 2024-12-09 15:01:53 +01:00
Isaac Freund
59f0fb2882
docs: mention key repeat defaults
(cherry picked from commit 5ca829bd5acea4c68abcf16332ccfe6202da4aeb)
2024-12-09 15:01:03 +01:00
tesselslate
be0e372fbc
alpha-modifier-v1: implement protocol
Implement the alpha-modifier-v1 protocol, which allows clients to
offload alpha blending operations to the compositor.

wlroots' scene graph code takes care of updating the opacity of
wlr_scene_buffers with an associated wp_alpha_modifier_surface_v1.

(cherry picked from commit a2a5e8f4632374b4b322c0520b7e30e35e0d753a)
2024-12-09 15:00:34 +01:00
Isaac Freund
f0798f7536
layer-surface: fix clip box coordinates
The clip box must be relative to the layer surface, not the output.

(cherry picked from commit 1b5dd21ee610b30d13c9165dfde23989c5e97e8d)
2024-12-09 15:00:08 +01:00
Isaac Freund
08cc135ebd
Output: workaround wlroots headless output bug
(cherry picked from commit 3529463569d4e7f8f9a7510ab11292e91b1c9a4a)
2024-12-09 15:00:02 +01:00
Aviva Ruben
42b339fbb8
input: support scroll button lock config
(cherry picked from commit fd55f51ba1b53af95fe3a24611490d42a895ef98)
2024-12-09 14:59:53 +01:00
Isaac Freund
fd58a84f18
docs: fix broken repology link
(cherry picked from commit 26f599b56b8f73dc13be055f6730edafd6c30401)
2024-12-09 14:59:45 +01:00
tiosgz
b281d196e4
build: load tablet-v2 protocol from its new location
(cherry picked from commit fbb9cc0f76da5e19f25ef2bc32f4e89febc95435)
2024-12-09 14:59:39 +01:00
Isaac Freund
a50573082b
tearing-control: fix security-context related assert
(cherry picked from commit 55974987b6a09d4208af09a07ecccd4656b660b6)
2024-12-09 14:59:34 +01:00
Isaac Freund
c691396448
tearing-control: minor cleanups/style improvements
This commit also tweaks the riverctl interface to make the global
allow-tearing option apply only to tearing-control-v1 hints from
clients. The global option no longer affects tearing/no-tearing rules
explicitly created by the user.

(cherry picked from commit f82b2f58163eb092941d7d2e05e1d0eeaa9f50fe)
2024-12-09 14:59:22 +01:00
Violet Purcell
aa1ef64448
tearing-control-v1: implement
Implement the wp-tearing-control-v1 protocol allowing window to hint
the compositor that they prefer async "tearing" page flips.

Add tearing/no-tearing rules to allow the user to manually
enabled/disable tearing for a window.

Use async "tearing" page flips when a window that should be allowed to
tear is fullscreen.

This still requires several kernel patches to work with the wlroots
atomic DRM backend. For now, either set WLR_DRM_NO_ATOMIC=1 or use a
custom kernel that includes the unmerged patches (such as CachyOS).

Closes: https://codeberg.org/river/river/issues/1094
(cherry picked from commit 066baa575340a1926bc300cbeebba8ee735839a0)
2024-12-09 14:59:09 +01:00
Isaac Freund
993bdf96d1
Root: simplify scene tree reparenting
Making these reparent() calls unconditional avoids inconsistent state.
It's also simpler and less error-prone and the wlroots function returns
immediately if the parent doesn't change anyways.

(cherry picked from commit db7de8151cf1491bc6e3b664d8ab1df0c23a93a7)
2024-12-09 14:49:55 +01:00
akawama
4d11cd97e0
docs: clarify input device name description
The word "numerical" suggests both decimal and hexadecimal, so changed
it to decimal.

(cherry picked from commit f5d37f9b4d70a20adb1825fb9d8e6d3f743b270c)
2024-12-09 14:49:50 +01:00
tiosgz
379f25fb3b
Output: don't configure uninitialized layer surfaces
It is possible for a layer surface to notably delay its initial commit;
for example shotman[1] creates two layer surfaces and uses one of them
to get enough information for a screenshot and initializing the other.
River could also have sent a configure before initial commit if two
clients raced against each other.

Fixes https://codeberg.org/river/river/issues/1123

[1]:https://sr.ht/~whynothugo/shotman/

(cherry picked from commit 93863b132eb7a32e296d5f224181b04e161b1c58)
2024-12-09 14:49:29 +01:00
Isaac Freund
dcc8e5cb9d
build: bump version to 0.3.6-dev 2024-07-22 17:25:15 +02:00
Isaac Freund
0e1b1862ca
build: bump version to 0.3.5 2024-07-22 17:21:01 +02:00
Isaac Freund
510268d83a
river: attempt to recover from GPU resets
(cherry picked from commit 85a1673a9e8bece59467a0107b79f9a5330c0f15)
2024-07-22 17:20:08 +02:00
Isaac Freund
62576d792c
LayerSurface: minor style/naming tweaks
No functional changes

(cherry picked from commit 2cc1d1cef3aa5adf621f82475b30b19ae9aecff5)
2024-07-22 17:20:02 +02:00
tiosgz
2a75d51eec
LayerSurface: focus on_demand-interactive surfaces on map
This is done specifically for lxqt-runner and qterminal to work as
expected, consistently among (almost) all compositors with layer-shell.
The most prominent drawback of this is that top- and overlay-layer
status bars with on_demand interactivity also get focus on map.

See https://codeberg.org/river/river/issues/1111 for more details.

(cherry picked from commit f27bbf03f1173c9f148c5343dc0fc168c4fcb982)
2024-07-22 17:19:59 +02:00
Isaac Freund
eb32deaf76
build: update to wlroots 0.18.0
(cherry picked from commit 99ef96a389eb3e350a7fd3294d1033263751b1a1)
2024-07-22 17:19:44 +02:00
Felix Bowman
4e2a1a12f8
completions: zsh click-method option fix
"button-areas" seems to be the argument this command expects instead of
"button-area" -- other shells also have the option as "button-areas".

(cherry picked from commit ccd676e5a939aabafd297fcec1db3058c651a91b)
2024-07-22 17:12:24 +02:00
Isaac Freund
dc0d8112a6
build: bump version to 0.3.5-dev 2024-07-10 12:58:47 +02:00
Isaac Freund
4f39ce79e9
build: bump version to 0.3.4 2024-07-10 12:55:32 +02:00
Isaac Freund
6849176e25
PointerConstraint: fix assertion failure
The assertion in PointerConstraint.confine() can currently still be
triggered if the input region of a surface is changed and the pointer is
moved outside of the new intersection of input region and constraint
region before PointerConstraint.updateState() is called.

This can happen, for example, when a client is made non-fullscreen at
the same time as the pointer is moved across the boundary of the new,
post-fullscreen, input region. If the pointer crosses the boundary
before the transaction completes and updateState() is called, the
assertion in PointerConstraint.confine() will fail.

To fix this, listen for the surface commit event rather than the
set_region event to handle possible deactivation on region changes.

(cherry picked from commit a7411ef2a6e0ec38fc4931a142bd33bc8b618d01)
2024-07-10 12:55:02 +02:00
Palanix
667b047cdf
docs: mention zig build -h in readme
(cherry picked from commit 1f5bf1d972816a4c61f28e4b3601582355a98931)
2024-07-10 12:55:02 +02:00
Isaac Freund
eab893c481
layer-shell: fix on_demand keyboard focus
Currently keyboard focus is stolen from layer surfaces with
on_demand keyboard interactivity any time Root.applyPending() is called.

This commit fixes the behavior to only steal focus when explicitly
focusing a different window/layer surface.

(cherry picked from commit 4232d6b99f2eeede9f318aa6043128530597cc4e)
2024-07-10 12:55:02 +02:00
Isaac Freund
cf63d16846
XdgPopup: send configure after initial commit
Currently we send the first configure for xdg popups before the popup
has made its initial commit. This is incorrect according to the protocol
and may confuse clients.

(cherry picked from commit ec16f1c3753d51feb7dfc6d406dd508f4513a106)
2024-07-10 12:55:02 +02:00
Isaac Freund
6e0c103705
Output: fix Wayland backend support
The wlroots Wayland backend does not support gamma LUT application and
will currently fail to render anything if river commits a gamma LUT.

To fix this, test the state when applying a gamma LUT and fall back to a
state with no gamma LUT set if that fails.

This problem was revealed by 2e09b66 which flags gamma as dirty on all
outputs when they are enabled.

(cherry picked from commit a80e0f7322b1f9f8b091a327aaea366b615042c8)
2024-07-10 12:55:02 +02:00
Isaac Freund
5cfa1fc8f5
docs: tweak repology link wording in readme
(cherry picked from commit 0997fde28e1aad90a983d28061deed9fdcb972f3)
2024-07-10 12:29:14 +02:00
Isaac Freund
6564db22df
Xwayland: fix unsound cast
The X11 protocol uses 16 bit integers for width/height but we use
32 bit integers everywhere else in river. Make sure that values outside
the range of a 16 bit integer don't cause river to crash with an
assertion failure.

I think that coordinates outside the range of a 16 bit integer could
theoretically be reasonable with tiled high resolution displays in the
future. I doubt they ever get used in practice today but at the same
time we can't allow an errant layout generator to crash river.

(cherry picked from commit ae7f4b8fcbb323e68b07eebf8dc8cca38b582940)
2024-07-10 12:29:06 +02:00
Isaac Freund
b85da67886
Output: flag gamma as dirty on enable
We can end up with stale gamma settings if we don't re-check the
current gamma settings for the output on enable.

(cherry picked from commit 2e09b66963805caccfe8534d69f2f35dd4a4c3f7)
2024-07-10 12:28:57 +02:00
Isaac Freund
99b31c39f3
input: apply map-to-output on output activation
Currently a map-to-output input config setting loses effect when an
output is disabled and re-enabled for example.

(cherry picked from commit de3035563ccd5ea9f4fe0b843618e4265c880e30)
2024-07-10 12:28:49 +02:00
Isaac Freund
36cdbbc087
SceneNodeData: fix fromSurface() use after free
We must clean up the user data of the wlr_surface for layer surfaces and
lock surfaces as fromSurface() may be called (e.g. by the idle inhibit
implementation) after the scene node has been destroyed but before the
wlr_surface is destroyed.

(cherry picked from commit 28a14c6794ddc21a23d2e14d41761007d15569e8)
2024-07-10 12:28:44 +02:00
Isaac Freund
4653a7730e
ci: log build summaries
(cherry picked from commit e2f3cd82521ba94bfb6907a05a3022fdc514a355)
2024-07-10 12:28:33 +02:00