1use xcb::x;
2
3use crate::{Modifiers, MouseButton};
4
5pub(crate) fn button_of_key(detail: x::Button) -> Option<MouseButton> {
6 Some(match detail {
7 1 => MouseButton::Left,
8 2 => MouseButton::Middle,
9 3 => MouseButton::Right,
10 _ => return None,
11 })
12}
13
14pub(crate) fn modifiers_from_state(state: x::KeyButMask) -> Modifiers {
15 Modifiers {
16 control: state.contains(x::KeyButMask::CONTROL),
17 alt: state.contains(x::KeyButMask::MOD1),
18 shift: state.contains(x::KeyButMask::SHIFT),
19 command: state.contains(x::KeyButMask::MOD4),
20 function: false,
21 }
22}
23
24pub(crate) fn button_from_state(state: x::KeyButMask) -> Option<MouseButton> {
25 Some(if state.contains(x::KeyButMask::BUTTON1) {
26 MouseButton::Left
27 } else if state.contains(x::KeyButMask::BUTTON2) {
28 MouseButton::Middle
29 } else if state.contains(x::KeyButMask::BUTTON3) {
30 MouseButton::Right
31 } else {
32 return None;
33 })
34}