keyboard: Add keyrepeat handling

This commit is contained in:
Kenny Levinsen
2023-02-13 17:39:54 +01:00
parent 9e48eb053d
commit 8826cab89d
4 changed files with 206 additions and 13 deletions
+14
View File
@@ -25,6 +25,7 @@ use event::{Event, Events};
use fonts::{FontMap, MaybeFontMap};
use state::State;
use widgets::{Geometry, Widget};
use keyboard::{KeyRepeatSource, RepeatMessage};
use std::{env, rc::Rc, thread};
@@ -64,6 +65,7 @@ fn main() {
display.get_registry(&qhandle, ());
let (ping_sender, ping_source) = calloop::ping::make_ping().unwrap();
let (keyrepeat_sender, keyrepeat_channel) = calloop::channel::channel::<RepeatMessage>();
let mut event_loop: EventLoop<State> =
EventLoop::try_new().expect("Failed to initialize the event loop!");
@@ -109,6 +111,17 @@ fn main() {
})
.expect("Failed to insert event source!");
let keyrepeat_source = KeyRepeatSource::new(keyrepeat_channel);
handle
.insert_source(keyrepeat_source, |event, _metadata, state| {
let ev = Event::KeyEvent(event);
for widget in state.widgets.iter_mut() {
widget.event(&ev);
}
state.dirty = true;
})
.expect("Failed to insert keyrepeat source!");
let events = Events::new(ping_sender);
let mut fm = FontMap::new();
@@ -143,6 +156,7 @@ fn main() {
layout,
MaybeFontMap::Waiting(font_thread),
events,
keyrepeat_sender,
);
let mut damage = Vec::new();