layout: Make handling presses uniform
This commit is contained in:
@ -332,11 +332,12 @@ pub mod c {
|
|||||||
.map(|place| place.button.state.clone())
|
.map(|place| place.button.state.clone())
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(mut state) = state {
|
if let Some(state) = state {
|
||||||
layout.press_key(
|
seat::handle_press_key(
|
||||||
|
layout,
|
||||||
&VirtualKeyboard(virtual_keyboard),
|
&VirtualKeyboard(virtual_keyboard),
|
||||||
&mut state,
|
|
||||||
Timestamp(time),
|
Timestamp(time),
|
||||||
|
&state,
|
||||||
);
|
);
|
||||||
// maybe TODO: draw on the display buffer here
|
// maybe TODO: draw on the display buffer here
|
||||||
drawing::queue_redraw(ui_keyboard);
|
drawing::queue_redraw(ui_keyboard);
|
||||||
@ -379,7 +380,7 @@ pub mod c {
|
|||||||
)})
|
)})
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some((mut state, _button, _view_position)) = button_info {
|
if let Some((state, _button, _view_position)) = button_info {
|
||||||
let mut found = false;
|
let mut found = false;
|
||||||
for wrapped_key in pressed {
|
for wrapped_key in pressed {
|
||||||
let key: &Rc<RefCell<KeyState>> = wrapped_key.borrow();
|
let key: &Rc<RefCell<KeyState>> = wrapped_key.borrow();
|
||||||
@ -397,7 +398,12 @@ pub mod c {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !found {
|
if !found {
|
||||||
layout.press_key(&virtual_keyboard, &mut state, time);
|
seat::handle_press_key(
|
||||||
|
layout,
|
||||||
|
&virtual_keyboard,
|
||||||
|
time,
|
||||||
|
&state,
|
||||||
|
);
|
||||||
// maybe TODO: draw on the display buffer here
|
// maybe TODO: draw on the display buffer here
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -653,24 +659,6 @@ impl Layout {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn press_key(
|
|
||||||
&mut self,
|
|
||||||
virtual_keyboard: &VirtualKeyboard,
|
|
||||||
rckey: &mut Rc<RefCell<KeyState>>,
|
|
||||||
time: Timestamp,
|
|
||||||
) {
|
|
||||||
if !self.pressed_keys.insert(::util::Pointer(rckey.clone())) {
|
|
||||||
eprintln!("Warning: key {:?} was already pressed", rckey);
|
|
||||||
}
|
|
||||||
let mut key = rckey.borrow_mut();
|
|
||||||
virtual_keyboard.switch(
|
|
||||||
&key.keycodes,
|
|
||||||
PressType::Pressed,
|
|
||||||
time,
|
|
||||||
);
|
|
||||||
key.pressed = PressType::Pressed;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Calculates size without margins
|
/// Calculates size without margins
|
||||||
fn calculate_inner_size(&self) -> Size {
|
fn calculate_inner_size(&self) -> Size {
|
||||||
Size {
|
Size {
|
||||||
@ -864,6 +852,24 @@ mod seat {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn handle_press_key(
|
||||||
|
layout: &mut Layout,
|
||||||
|
virtual_keyboard: &VirtualKeyboard,
|
||||||
|
time: Timestamp,
|
||||||
|
rckey: &Rc<RefCell<KeyState>>,
|
||||||
|
) {
|
||||||
|
if !layout.pressed_keys.insert(::util::Pointer(rckey.clone())) {
|
||||||
|
eprintln!("Warning: key {:?} was already pressed", rckey);
|
||||||
|
}
|
||||||
|
let mut key = rckey.borrow_mut();
|
||||||
|
virtual_keyboard.switch(
|
||||||
|
&key.keycodes,
|
||||||
|
PressType::Pressed,
|
||||||
|
time,
|
||||||
|
);
|
||||||
|
key.pressed = PressType::Pressed;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn handle_release_key(
|
pub fn handle_release_key(
|
||||||
layout: &mut Layout,
|
layout: &mut Layout,
|
||||||
virtual_keyboard: &VirtualKeyboard,
|
virtual_keyboard: &VirtualKeyboard,
|
||||||
|
|||||||
Reference in New Issue
Block a user