1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
use crate::{EventType, Key, KeyEvent, KeyMatch, ModifierType};
use glib::translate::*;
use std::fmt;
use std::mem;
define_event! {
KeyEvent,
ffi::GdkKeyEvent,
&[EventType::KeyPress, EventType::KeyRelease]
}
impl KeyEvent {
#[doc(alias = "gdk_key_event_get_keyval")]
#[doc(alias = "get_keyval")]
pub fn keyval(&self) -> Key {
unsafe { from_glib(ffi::gdk_key_event_get_keyval(self.to_glib_none().0)) }
}
#[doc(alias = "gdk_key_event_get_match")]
#[doc(alias = "get_match")]
pub fn match_(&self) -> Option<(Key, ModifierType)> {
unsafe {
let mut keyval = mem::MaybeUninit::uninit();
let mut modifiers = mem::MaybeUninit::uninit();
let ret = from_glib(ffi::gdk_key_event_get_match(
self.to_glib_none().0,
keyval.as_mut_ptr(),
modifiers.as_mut_ptr(),
));
if ret {
let keyval = keyval.assume_init();
let modifiers = modifiers.assume_init();
Some((from_glib(keyval), from_glib(modifiers)))
} else {
None
}
}
}
#[doc(alias = "gdk_key_event_matches")]
pub fn matches(&self, keyval: Key, modifiers: ModifierType) -> KeyMatch {
unsafe {
from_glib(ffi::gdk_key_event_matches(
self.to_glib_none().0,
keyval.into_glib(),
modifiers.into_glib(),
))
}
}
}
impl fmt::Debug for KeyEvent {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.debug_struct("KeyEvent")
.field("consumed_modifiers", &self.consumed_modifiers())
.field("keycode", &self.keycode())
.field("keyval", &self.keyval())
.field("layout", &self.layout())
.field("level", &self.level())
.field("match", &self.match_())
.field("is_modifier", &self.is_modifier())
.finish()
}
}