mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-03-07 20:09:59 +03:00
Send ALL keyboard shortcuts
Using keyboard-shortcut-inhibit-unstable-v1.xml we can inhibit shortcuts for the server and send those to the client as well.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
port = 42069
|
||||
[client.left]
|
||||
host_name = "rubinium"
|
||||
ip = "192.168.2.182"
|
||||
|
||||
@@ -10,6 +10,10 @@ use std::{
|
||||
use wayland_protocols::wp::{
|
||||
pointer_constraints::zv1::client::{zwp_locked_pointer_v1, zwp_pointer_constraints_v1},
|
||||
relative_pointer::zv1::client::{zwp_relative_pointer_manager_v1, zwp_relative_pointer_v1},
|
||||
keyboard_shortcuts_inhibit::zv1::client::{
|
||||
zwp_keyboard_shortcuts_inhibit_manager_v1,
|
||||
zwp_keyboard_shortcuts_inhibitor_v1,
|
||||
},
|
||||
};
|
||||
|
||||
use wayland_protocols_wlr::layer_shell::v1::client::{
|
||||
@@ -38,7 +42,10 @@ struct App {
|
||||
rel_pointer_manager: Option<zwp_relative_pointer_manager_v1::ZwpRelativePointerManagerV1>,
|
||||
pointer_lock: Option<zwp_locked_pointer_v1::ZwpLockedPointerV1>,
|
||||
rel_pointer: Option<zwp_relative_pointer_v1::ZwpRelativePointerV1>,
|
||||
shortcut_inhibit_manager: Option<zwp_keyboard_shortcuts_inhibit_manager_v1::ZwpKeyboardShortcutsInhibitManagerV1>,
|
||||
shortcut_inhibitor: Option<zwp_keyboard_shortcuts_inhibitor_v1::ZwpKeyboardShortcutsInhibitorV1>,
|
||||
connection: protocol::Connection,
|
||||
seat: Option<wl_seat::WlSeat>,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
@@ -69,6 +76,9 @@ fn main() {
|
||||
pointer_lock: None,
|
||||
rel_pointer: None,
|
||||
connection,
|
||||
shortcut_inhibit_manager: None,
|
||||
shortcut_inhibitor: None,
|
||||
seat: None,
|
||||
};
|
||||
|
||||
// use roundtrip to process this event synchronously
|
||||
@@ -146,7 +156,7 @@ impl Dispatch<wl_registry::WlRegistry, ()> for App {
|
||||
app.buffer = Some(buffer);
|
||||
}
|
||||
"wl_seat" => {
|
||||
registry.bind::<wl_seat::WlSeat, _, _>(name, 8, qh, ());
|
||||
app.seat = Some(registry.bind::<wl_seat::WlSeat, _, _>(name, 8, qh, ()));
|
||||
}
|
||||
"zwp_pointer_constraints_v1" => {
|
||||
app.pointer_constraints = Some(
|
||||
@@ -174,6 +184,11 @@ impl Dispatch<wl_registry::WlRegistry, ()> for App {
|
||||
4, &qh, (),
|
||||
));
|
||||
}
|
||||
"zwp_keyboard_shortcuts_inhibit_manager_v1" => {
|
||||
app.shortcut_inhibit_manager = Some(registry.bind::<zwp_keyboard_shortcuts_inhibit_manager_v1::ZwpKeyboardShortcutsInhibitManagerV1, _, _>(
|
||||
name, 1, &qh, (),
|
||||
));
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
@@ -307,6 +322,13 @@ impl Dispatch<wl_pointer::WlPointer, ()> for App {
|
||||
.get_relative_pointer(pointer, qh, ()),
|
||||
);
|
||||
}
|
||||
if app.shortcut_inhibitor.is_none() {
|
||||
app.shortcut_inhibitor = Some(app.shortcut_inhibit_manager.as_ref().unwrap().inhibit_shortcuts(
|
||||
app.surface.as_ref().unwrap(),
|
||||
app.seat.as_ref().unwrap(),
|
||||
qh, (),
|
||||
));
|
||||
}
|
||||
}
|
||||
wl_pointer::Event::Leave {..} => {
|
||||
if let Some(s) = app.layer_surface.as_ref() {
|
||||
@@ -349,6 +371,10 @@ impl Dispatch<wl_keyboard::WlKeyboard, ()> for App {
|
||||
rel_pointer.destroy();
|
||||
app.rel_pointer = None;
|
||||
}
|
||||
if let Some(shortcut_inhibitor) = app.shortcut_inhibitor.as_ref() {
|
||||
shortcut_inhibitor.destroy();
|
||||
app.shortcut_inhibitor = None;
|
||||
}
|
||||
} else {
|
||||
app.connection.send_event(event);
|
||||
}
|
||||
@@ -465,3 +491,25 @@ impl Dispatch<wl_region::WlRegion, ()> for App {
|
||||
_: &QueueHandle<Self>,
|
||||
) { }
|
||||
}
|
||||
|
||||
impl Dispatch<zwp_keyboard_shortcuts_inhibit_manager_v1::ZwpKeyboardShortcutsInhibitManagerV1, ()> for App {
|
||||
fn event(
|
||||
_: &mut Self,
|
||||
_: &zwp_keyboard_shortcuts_inhibit_manager_v1::ZwpKeyboardShortcutsInhibitManagerV1,
|
||||
_: <zwp_keyboard_shortcuts_inhibit_manager_v1::ZwpKeyboardShortcutsInhibitManagerV1 as wayland_client::Proxy>::Event,
|
||||
_: &(),
|
||||
_: &Connection,
|
||||
_: &QueueHandle<Self>,
|
||||
) { }
|
||||
}
|
||||
|
||||
impl Dispatch<zwp_keyboard_shortcuts_inhibitor_v1::ZwpKeyboardShortcutsInhibitorV1, ()> for App {
|
||||
fn event(
|
||||
_: &mut Self,
|
||||
_: &zwp_keyboard_shortcuts_inhibitor_v1::ZwpKeyboardShortcutsInhibitorV1,
|
||||
_: <zwp_keyboard_shortcuts_inhibitor_v1::ZwpKeyboardShortcutsInhibitorV1 as wayland_client::Proxy>::Event,
|
||||
_: &(),
|
||||
_: &Connection,
|
||||
_: &QueueHandle<Self>,
|
||||
) { }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user