git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit3373e4870fc6c6e4dbc05e939496513eaab765ce
parentfbee581642
authorIsaac Freund <[email protected]>
date2026-04-13 17:59
TabletTool: ignore inconsistent tip down/up events

There has been a report of libinput sometimes emitting an up event
without prior matching down on tty switch for example.

Don't assert that libinput's tip down/up events are consistent.

 river/TabletTool.zig | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/river/TabletTool.zig b/river/TabletTool.zig
index 0a8ab2d..56977e6 100644
--- a/river/TabletTool.zig
+++ b/river/TabletTool.zig
@@ -201,7 +201,8 @@ pub fn proximity(tool: *TabletTool, tablet: *Tablet, event: *wlr.Tablet.event.Pr
 pub fn tip(tool: *TabletTool, tablet: *Tablet, event: *wlr.Tablet.event.Tip) void {
     switch (event.state) {
         .down => {
-            assert(!tool.wp_tool.is_down);
+            // There have been reports of libinput emitting inconsistent down/up events.
+            if (tool.wp_tool.is_down) return;
 
             tool.wp_tool.notifyDown();
 
@@ -219,7 +220,8 @@ pub fn tip(tool: *TabletTool, tablet: *Tablet, event: *wlr.Tablet.event.Tip) voi
             }
         },
         .up => {
-            assert(tool.wp_tool.is_down);
+            // There have been reports of libinput emitting inconsistent down/up events.
+            if (!tool.wp_tool.is_down) return;
 
             tool.wp_tool.notifyUp();
             tool.maybeExitDown(tablet);