Skip to content
This repository was archived by the owner on Aug 3, 2024. It is now read-only.

Commit c3692c1

Browse files
committed
Added libinput backend
1 parent a705073 commit c3692c1

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

src/backend/backend.rs

+8-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@
1414
1515
use libc;
1616
use wlroots_sys::{self, wlr_backend, wlr_backend_is_wl, wlr_backend_is_x11,
17-
wlr_backend_is_drm, wlr_backend_is_headless, wlr_backend_is_multi};
17+
wlr_backend_is_drm, wlr_backend_is_headless, wlr_backend_is_multi,
18+
wlr_backend_is_libinput};
1819

19-
use super::{WaylandBackend, X11Backend, DRMBackend, HeadlessBackend, MultiBackend};
20+
use super::{WaylandBackend, X11Backend, DRMBackend, HeadlessBackend, MultiBackend, LibInputBackend};
2021

2122
/// A custom function to set up the renderer.
2223
pub type UnsafeRenderSetupFunction = unsafe extern "C" fn(*mut wlroots_sys::wlr_egl,
@@ -32,6 +33,7 @@ pub enum Backend {
3233
X11(X11Backend),
3334
DRM(DRMBackend),
3435
Headless(HeadlessBackend),
36+
LibInput(LibInputBackend),
3537
Multi(MultiBackend)
3638
}
3739

@@ -48,6 +50,8 @@ impl Backend {
4850
Backend::Headless(HeadlessBackend{ backend })
4951
} else if wlr_backend_is_multi(backend) {
5052
Backend::Multi(MultiBackend{ backend })
53+
} else if wlr_backend_is_libinput(backend) {
54+
Backend::LibInput(LibInputBackend { backend })
5155
} else {
5256
panic!("Unknown backend {:p}", backend)
5357
}
@@ -59,7 +63,8 @@ impl Backend {
5963
Backend::X11(X11Backend { backend }) |
6064
Backend::DRM(DRMBackend { backend }) |
6165
Backend::Headless(HeadlessBackend { backend }) |
62-
Backend::Multi(MultiBackend { backend }) => backend
66+
Backend::Multi(MultiBackend { backend }) |
67+
Backend::LibInput(LibInputBackend { backend }) => backend
6368
}
6469
}
6570
}

src/backend/libinput.rs

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
use wlroots_sys::{wlr_backend, wl_display, wlr_libinput_backend_create, libinput_device,
2+
wlr_libinput_get_device_handle, wlr_input_device_is_libinput};
3+
4+
use super::Session;
5+
use InputDevice;
6+
7+
#[derive(Debug, Hash, Eq, PartialEq)]
8+
pub struct LibInputBackend {
9+
pub(crate) backend: *mut wlr_backend
10+
}
11+
12+
impl LibInputBackend {
13+
pub unsafe fn new(display: *mut wl_display, session: Session) -> Self {
14+
let backend = wlr_libinput_backend_create(display, session.as_ptr());
15+
if backend.is_null() {
16+
panic!("Could not construct Wayland backend");
17+
}
18+
LibInputBackend { backend }
19+
}
20+
21+
/// Get the underlying libinput_device handle for the given input device.
22+
pub unsafe fn device_handle(input_device: &InputDevice) -> *mut libinput_device {
23+
wlr_libinput_get_device_handle(input_device.as_ptr())
24+
}
25+
26+
pub fn is_libinput_input_device(&self, input_device: &InputDevice) -> bool {
27+
unsafe { wlr_input_device_is_libinput(input_device.as_ptr()) }
28+
}
29+
}

src/backend/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ mod wayland;
33
mod x11;
44
mod headless;
55
mod drm;
6+
mod libinput;
67
mod multi;
78
mod session;
89

@@ -11,5 +12,6 @@ pub use self::wayland::*;
1112
pub use self::x11::*;
1213
pub use self::headless::*;
1314
pub use self::drm::*;
15+
pub use self::libinput::*;
1416
pub use self::multi::*;
1517
pub use self::session::*;

0 commit comments

Comments
 (0)