(conn *xgb.Conn)
| 331 | |
| 332 | |
| 333 | func getNumLockMask(conn *xgb.Conn) uint16 { |
| 334 | numLockSym := uint32(0xff7f) // XK_Num_Lock |
| 335 | numLockKeycode := getKeycodeForKeysym(conn, numLockSym) |
| 336 | if numLockKeycode == 0 { |
| 337 | slog.Info("Num Lock keycode not found") |
| 338 | return 0 |
| 339 | } |
| 340 | |
| 341 | modMap, err := xproto.GetModifierMapping(conn).Reply() |
| 342 | if err != nil { |
| 343 | slog.Error("failed to get modifier mapping: %v","error: " ,err) |
| 344 | } |
| 345 | |
| 346 | // Each modifier (Shift, Lock, Control, Mod1-Mod5) has modMap.KeycodesPerModifier keycodes |
| 347 | for modIndex := 0; modIndex < 8; modIndex++ { |
| 348 | for i := 0; i < int(modMap.KeycodesPerModifier); i++ { |
| 349 | index := modIndex*int(modMap.KeycodesPerModifier) + i |
| 350 | if modMap.Keycodes[index] == numLockKeycode { |
| 351 | return 1 << uint(modIndex) |
| 352 | } |
| 353 | } |
| 354 | } |
| 355 | |
| 356 | return 0 |
| 357 | } |
| 358 | |
| 359 | |
| 360 | func getKeycodeForKeysym(conn *xgb.Conn, keysym uint32) xproto.Keycode { |
no test coverage detected