1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-06-24 03:55:23 -04:00
Files
DankMaterialShell/core/internal/keybinds/providers/scroll.go
T
2026-06-23 11:21:38 -04:00

75 lines
2.2 KiB
Go

package providers
import "strings"
// Scroll-wheel binds are captured by the shell as niri's keysym names
// (WheelScrollUp/Down/Left/Right) regardless of the active compositor. Niri
// consumes them natively; every other provider speaks a different dialect, so the
// raw niri token must be translated on write and back again on read. Without this
// the token is emitted verbatim and the compositor rejects the bind (issue #2683).
var canonicalScrollKeys = map[string]string{
"wheelscrollup": "WheelScrollUp",
"wheelscrolldown": "WheelScrollDown",
"wheelscrollleft": "WheelScrollLeft",
"wheelscrollright": "WheelScrollRight",
}
func isScrollKey(token string) bool {
_, ok := canonicalScrollKeys[strings.ToLower(token)]
return ok
}
// Hyprland binds the wheel inside a regular bind using mouse_up/down/left/right.
var hyprlandScrollNative = map[string]string{
"wheelscrollup": "mouse_up",
"wheelscrolldown": "mouse_down",
"wheelscrollleft": "mouse_left",
"wheelscrollright": "mouse_right",
}
var hyprlandScrollCanonical = map[string]string{
"mouse_up": "WheelScrollUp",
"mouse_down": "WheelScrollDown",
"mouse_left": "WheelScrollLeft",
"mouse_right": "WheelScrollRight",
}
func hyprlandScrollToNative(token string) (string, bool) {
v, ok := hyprlandScrollNative[strings.ToLower(token)]
return v, ok
}
func hyprlandScrollToCanonical(token string) (string, bool) {
v, ok := hyprlandScrollCanonical[strings.ToLower(token)]
return v, ok
}
// MangoWC binds the wheel through a dedicated axisbind directive whose key field
// is a direction (UP/DOWN/LEFT/RIGHT) rather than a keysym.
const mangowcAxisBindPrefix = "axisbind"
var mangowcScrollDirection = map[string]string{
"wheelscrollup": "UP",
"wheelscrolldown": "DOWN",
"wheelscrollleft": "LEFT",
"wheelscrollright": "RIGHT",
}
var mangowcScrollCanonical = map[string]string{
"up": "WheelScrollUp",
"down": "WheelScrollDown",
"left": "WheelScrollLeft",
"right": "WheelScrollRight",
}
func mangowcScrollToDirection(token string) (string, bool) {
v, ok := mangowcScrollDirection[strings.ToLower(token)]
return v, ok
}
func mangowcDirectionToScroll(direction string) (string, bool) {
v, ok := mangowcScrollCanonical[strings.ToLower(direction)]
return v, ok
}