core: button: add keyboard method to insert text
This commit is contained in:
parent
8f7e9dfe7a
commit
db2a8cdeab
3 changed files with 16 additions and 5 deletions
|
|
@ -111,6 +111,7 @@ pub trait Keyboard {
|
|||
|
||||
fn press(&mut self, sym: Keysym);
|
||||
fn release(&mut self, sym: Keysym);
|
||||
fn text(&mut self, text: &str);
|
||||
fn change_layout(&mut self, layout: &Layout);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -61,8 +61,7 @@ impl Dispatcher {
|
|||
let vk_man = globals.bind(&queue, 1..=1, ())
|
||||
.expect("Compositor must implement zwp_virtual_keyboard_manager_v1");
|
||||
|
||||
let im_man: zwp_input_method_manager_v2::ZwpInputMethodManagerV2
|
||||
= globals.bind(&queue, 1..=1, ())
|
||||
let im_man = globals.bind(&queue, 1..=1, ())
|
||||
.expect("Compositor must implement zwp_input_method_manager_v2");
|
||||
|
||||
let frac_scale_man = match globals.bind(&queue, 1..=1, ()) {
|
||||
|
|
@ -75,8 +74,6 @@ impl Dispatcher {
|
|||
Err(_) => None,
|
||||
};
|
||||
|
||||
im_man.get_input_method(&seat, &queue, ());
|
||||
|
||||
let disp = Surface::new(queue.clone(),
|
||||
&shm, compositor, layer_shell,
|
||||
frac_scale_man, vper, 185)?;
|
||||
|
|
@ -84,7 +81,7 @@ impl Dispatcher {
|
|||
let gfx = Mutex::new(gfx);
|
||||
let gfx = Arc::new(gfx);
|
||||
|
||||
let vk = VirtualKeyboard::new(&queue, &vk_man, &seat);
|
||||
let vk = VirtualKeyboard::new(&queue, &vk_man, &im_man, &seat);
|
||||
|
||||
let seat = Seat::new(layout, vk, gfx.clone(), queue.clone(), seat);
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@
|
|||
use crate::core::Keyboard;
|
||||
use crate::core::Layout;
|
||||
use crate::core::Part;
|
||||
use crate::wayland::input_method_unstable_v2::zwp_input_method_manager_v2::ZwpInputMethodManagerV2;
|
||||
use crate::wayland::input_method_unstable_v2::zwp_input_method_v2::ZwpInputMethodV2;
|
||||
use crate::wayland::virtual_keyboard_unstable_v1::zwp_virtual_keyboard_manager_v1::ZwpVirtualKeyboardManagerV1;
|
||||
use crate::wayland::virtual_keyboard_unstable_v1::zwp_virtual_keyboard_v1::ZwpVirtualKeyboardV1;
|
||||
use std::collections::HashMap;
|
||||
|
|
@ -26,6 +28,7 @@ pub struct VirtualKeyboard {
|
|||
keymap: File,
|
||||
keymap_id: u8,
|
||||
|
||||
im: ZwpInputMethodV2,
|
||||
im_serial: u32,
|
||||
|
||||
keycodes: HashMap<Keysym, u8>,
|
||||
|
|
@ -35,12 +38,15 @@ pub struct VirtualKeyboard {
|
|||
|
||||
impl VirtualKeyboard {
|
||||
pub fn new<T: Dispatch<ZwpVirtualKeyboardV1, ()>
|
||||
+ Dispatch<ZwpInputMethodV2, ()>
|
||||
+ 'static>(queue: &QueueHandle<T>,
|
||||
vk_man: &ZwpVirtualKeyboardManagerV1,
|
||||
im_man: &ZwpInputMethodManagerV2,
|
||||
seat: &WlSeat)
|
||||
-> VirtualKeyboard
|
||||
{
|
||||
let vk = vk_man.create_virtual_keyboard(seat, queue, ());
|
||||
let im = im_man.get_input_method(&seat, &queue, ());
|
||||
|
||||
let path = format!("/tmp/ufkbd-keymap-pid{}-1", process::id());
|
||||
let keymap = File::create(path).unwrap();
|
||||
|
|
@ -50,6 +56,7 @@ impl VirtualKeyboard {
|
|||
keymap,
|
||||
keymap_id: 1,
|
||||
|
||||
im,
|
||||
im_serial: 0,
|
||||
|
||||
keycodes: HashMap::with_capacity(248),
|
||||
|
|
@ -151,6 +158,12 @@ impl Keyboard for VirtualKeyboard {
|
|||
self.vk.key(0, keycode as u32, 0);
|
||||
}
|
||||
|
||||
fn text(&mut self, text: &str)
|
||||
{
|
||||
self.im.commit_string(text.to_string());
|
||||
self.im.commit(self.im_serial);
|
||||
}
|
||||
|
||||
fn change_layout(&mut self, layout: &Layout)
|
||||
{
|
||||
let mut keycode = 8;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue