Skip to content

Commit ae3594a

Browse files
committed
fix: set control modifier before xinput scroll dispatch
Branch on UseInputDriver to avoid dummy driver log spam while ensuring the Ctrl modifier is set before xf86-input-neko posts the motion event. The XTest fallback still handles controlKey atomically under a single lock. Made-with: Cursor
1 parent 469c711 commit ae3594a

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

server/internal/desktop/xorg.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,21 @@ func (manager *DesktopManagerCtx) GetCursorPosition() (int, int) {
1919
}
2020

2121
func (manager *DesktopManagerCtx) Scroll(deltaX, deltaY int, controlKey bool) {
22-
// Try xinput driver first (XI2.1 smooth scrolling via xf86-input-neko)
23-
if err := manager.input.Scroll(int32(deltaX), int32(deltaY)); err == nil {
22+
if manager.config.UseInputDriver {
23+
// XI2.1 smooth scrolling via xf86-input-neko: set modifier before the
24+
// driver posts the motion event so the X server sees Ctrl held.
2425
if controlKey {
2526
xorg.SetKeyboardModifier(xorg.KbdModControl, true)
2627
defer xorg.SetKeyboardModifier(xorg.KbdModControl, false)
2728
}
28-
return
29+
if err := manager.input.Scroll(int32(deltaX), int32(deltaY)); err != nil {
30+
manager.logger.Warn().Err(err).Msg("xinput scroll failed, falling back to XTest")
31+
xorg.Scroll(deltaX, deltaY, false)
32+
}
33+
} else {
34+
// XTest fallback — handles controlKey atomically under a single X11 lock
35+
xorg.Scroll(deltaX, deltaY, controlKey)
2936
}
30-
31-
// XTest fallback — handles controlKey atomically under a single X11 lock
32-
xorg.Scroll(deltaX, deltaY, controlKey)
3337
}
3438

3539
func (manager *DesktopManagerCtx) ButtonDown(code uint32) error {

0 commit comments

Comments
 (0)