event.rs

 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}