pub struct Libinput { /* private fields */ }
Expand description
Libinput context
Contexts can be used to track input devices and receive events from them.
You can use either new_from_udev
to create a context tracking all devices on a specific seat,
or use new_from_path
to track input devices manually.
Either way you then have to use dispatch()
and next()
(provided by the Iterator
trait) to
receive events.
Implementations§
Source§impl Libinput
impl Libinput
Sourcepub fn new_with_udev<I: LibinputInterface + 'static>(interface: I) -> Libinput ⓘ
pub fn new_with_udev<I: LibinputInterface + 'static>(interface: I) -> Libinput ⓘ
Create a new libinput context using a udev context.
This context is inactive until udev_assign_seat
is called.
§Arguments
- interface - A
LibinputInterface
providing functions to open and close devices. - userdata - Optionally some userdata attached to the newly created context (see
Userdata
) - udev_context - Raw pointer to a valid udev context.
§Safety
This function is unsafe, because there is no way to verify that udev_context
is indeed a valid udev context or even points to valid memory.
Sourcepub fn new_from_path<I: 'static + LibinputInterface>(interface: I) -> Libinput ⓘ
pub fn new_from_path<I: 'static + LibinputInterface>(interface: I) -> Libinput ⓘ
Create a new libinput context that requires the caller to manually add or remove devices.
The returned context is active, but will not yield any events until at least one device is added.
Devices can be added and removed by calling path_add_device
and path_remove_device
respectively.
§Arguments
- interface - A
LibinputInterface
providing functions to open and close devices. - userdata - Optionally some userdata attached to the newly created context (see
Userdata
)
Sourcepub fn path_add_device(&mut self, path: &str) -> Option<Device>
pub fn path_add_device(&mut self, path: &str) -> Option<Device>
Add a device to a libinput context initialized with
new_from_context
.
If successful, the device will be added to the internal list
and re-opened on resume
. The device can be removed with
path_remove_device()
.
If the device was successfully initialized, it is returned.
§Warning
It is an application bug to call this function on a context
initialized with new_from_udev
.
Sourcepub fn path_remove_device(&mut self, device: Device)
pub fn path_remove_device(&mut self, device: Device)
Remove a device from a libinput context initialized with
new_from_path
and added to such a context with
path_add_device
.
Events already processed from this input device are kept in
the queue, the DeviceRemovedEvent
event marks the end of
events for this device.
§Warning
It is an application bug to call this function on a context
initialized with new_from_udev
.
Sourcepub fn udev_assign_seat(&mut self, seat_id: &str) -> Result<(), ()>
pub fn udev_assign_seat(&mut self, seat_id: &str) -> Result<(), ()>
Assign a seat to this libinput context.
New devices or the removal of existing devices will appear as
events during dispatch
.
udev_assign_seat
succeeds even if no input devices are
currently available on this seat, or if devices are available
but fail to open in LibinputInterface::open_restricted
.
Devices that do not have the minimum capabilities to be
recognized as pointer, keyboard or touch device are ignored. /// Such devices and those that failed to open ignored until the
next call to resume
.
§Warning
This function may only be called once per context.
Sourcepub fn suspend(&self)
pub fn suspend(&self)
Suspend monitoring for new devices and close existing devices.
This closes all open devices and terminates libinput but
does keep the context valid to be resumed with resume
.
Sourcepub fn resume(&mut self) -> Result<(), ()>
pub fn resume(&mut self) -> Result<(), ()>
Resume a suspended libinput context.
This re-enables device monitoring and adds existing devices.
Sourcepub fn dispatch(&mut self) -> IoResult<()>
pub fn dispatch(&mut self) -> IoResult<()>
Main event dispatchment function.
Reads events of the file descriptors and processes them
internally. Use next
or any other function provided by the
Iterator
trait to retrieve the events until None
is
returned.
Dispatching does not necessarily queue libinput events. This
function should be called immediately once data is available
on the file descriptor returned by fd
. libinput has a number
of timing-sensitive features (e.g. tap-to-click), any delay in
calling dispatch
may prevent these features from working
correctly.
Sourcepub unsafe fn fd(&self) -> RawFd
👎Deprecated since 0.4.1: Use the provided AsRawFd implementation
pub unsafe fn fd(&self) -> RawFd
libinput keeps a single file descriptor for all events.
Call into dispatch
if any events become available on this fd.
The most simple variant to check for available bytes is to use
nix::poll
:
use input::{Libinput, LibinputInterface};
use rustix::event::{poll, PollFlags, PollFd};
let mut input = Libinput::new_with_udev(Interface);
input.udev_assign_seat("seat0").unwrap();
while poll(&mut [PollFd::new(&input, PollFlags::IN)], -1).is_ok() {
input.dispatch().unwrap();
for event in &mut input {
// do some processing...
}
}
For more complex operations you may wish to use other approches
as event loops e.g. in the wayland-server
or the tokio
crates to wait for data to become available on this file
descriptor.
§Safety
See AsRawFd
Sourcepub unsafe fn from_raw(ffi: *mut libinput) -> Self
pub unsafe fn from_raw(ffi: *mut libinput) -> Self
Create a new instance of this type from a raw pointer.
§Warning
If you make use of Userdata
make sure you use the correct types
to allow receiving the set userdata. When dealing with raw pointers initialized by other
libraries this must be done extra carefully to select a correct representation.
If unsure using ()
is always a safe option..
§Safety
If the pointer is pointing to a different struct, invalid memory or NULL
the returned
struct may panic on use or cause other undefined behavior.
Trait Implementations§
Source§impl AsFd for Libinput
impl AsFd for Libinput
Source§fn as_fd(&self) -> BorrowedFd<'_>
fn as_fd(&self) -> BorrowedFd<'_>
Source§impl Iterator for Libinput
impl Iterator for Libinput
Source§fn next(&mut self) -> Option<Self::Item>
fn next(&mut self) -> Option<Self::Item>
Source§fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
iter_next_chunk
)N
values. Read more1.0.0 · Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
1.0.0 · Source§fn count(self) -> usizewhere
Self: Sized,
fn count(self) -> usizewhere
Self: Sized,
1.0.0 · Source§fn last(self) -> Option<Self::Item>where
Self: Sized,
fn last(self) -> Option<Self::Item>where
Self: Sized,
Source§fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by
)n
elements. Read more1.0.0 · Source§fn nth(&mut self, n: usize) -> Option<Self::Item>
fn nth(&mut self, n: usize) -> Option<Self::Item>
n
th element of the iterator. Read more1.28.0 · Source§fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
1.0.0 · Source§fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
1.0.0 · Source§fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
Source§fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
iter_intersperse
)separator
between adjacent items of the original iterator. Read more1.0.0 · Source§fn map<B, F>(self, f: F) -> Map<Self, F>
fn map<B, F>(self, f: F) -> Map<Self, F>
1.0.0 · Source§fn filter<P>(self, predicate: P) -> Filter<Self, P>
fn filter<P>(self, predicate: P) -> Filter<Self, P>
1.0.0 · Source§fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
1.0.0 · Source§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
1.0.0 · Source§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
1.0.0 · Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
1.57.0 · Source§fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
1.0.0 · Source§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n
elements. Read more1.0.0 · Source§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n
elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 · Source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
Source§fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
iter_map_windows
)f
for each contiguous window of size N
over
self
and returns an iterator over the outputs of f
. Like slice::windows()
,
the windows during mapping overlap as well. Read more1.0.0 · Source§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Iterator
. Read moreSource§fn collect_into<E>(self, collection: &mut E) -> &mut E
fn collect_into<E>(self, collection: &mut E) -> &mut E
iter_collect_into
)1.0.0 · Source§fn partition<B, F>(self, f: F) -> (B, B)
fn partition<B, F>(self, f: F) -> (B, B)
Source§fn is_partitioned<P>(self, predicate: P) -> bool
fn is_partitioned<P>(self, predicate: P) -> bool
iter_is_partitioned
)true
precede all those that return false
. Read more1.27.0 · Source§fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
1.27.0 · Source§fn try_for_each<F, R>(&mut self, f: F) -> R
fn try_for_each<F, R>(&mut self, f: F) -> R
1.0.0 · Source§fn fold<B, F>(self, init: B, f: F) -> B
fn fold<B, F>(self, init: B, f: F) -> B
1.51.0 · Source§fn reduce<F>(self, f: F) -> Option<Self::Item>
fn reduce<F>(self, f: F) -> Option<Self::Item>
Source§fn try_reduce<R>(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
iterator_try_reduce
)1.0.0 · Source§fn all<F>(&mut self, f: F) -> bool
fn all<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn any<F>(&mut self, f: F) -> bool
fn any<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
1.30.0 · Source§fn find_map<B, F>(&mut self, f: F) -> Option<B>
fn find_map<B, F>(&mut self, f: F) -> Option<B>
Source§fn try_find<R>(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
try_find
)1.0.0 · Source§fn position<P>(&mut self, predicate: P) -> Option<usize>
fn position<P>(&mut self, predicate: P) -> Option<usize>
1.6.0 · Source§fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn max_by<F>(self, compare: F) -> Option<Self::Item>
fn max_by<F>(self, compare: F) -> Option<Self::Item>
1.6.0 · Source§fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn min_by<F>(self, compare: F) -> Option<Self::Item>
fn min_by<F>(self, compare: F) -> Option<Self::Item>
1.0.0 · Source§fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
1.36.0 · Source§fn copied<'a, T>(self) -> Copied<Self>
fn copied<'a, T>(self) -> Copied<Self>
Source§fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
iter_array_chunks
)N
elements of the iterator at a time. Read more1.11.0 · Source§fn product<P>(self) -> P
fn product<P>(self) -> P
Source§fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
iter_order_by
)Iterator
with those
of another with respect to the specified comparison function. Read more1.5.0 · Source§fn partial_cmp<I>(self, other: I) -> Option<Ordering>
fn partial_cmp<I>(self, other: I) -> Option<Ordering>
PartialOrd
elements of
this Iterator
with those of another. The comparison works like short-circuit
evaluation, returning a result without comparing the remaining elements.
As soon as an order can be determined, the evaluation stops and a result is returned. Read moreSource§fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by
)Iterator
with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by<I, F>(self, other: I, eq: F) -> bool
fn eq_by<I, F>(self, other: I, eq: F) -> bool
iter_order_by
)1.5.0 · Source§fn lt<I>(self, other: I) -> bool
fn lt<I>(self, other: I) -> bool
Iterator
are lexicographically
less than those of another. Read more1.5.0 · Source§fn le<I>(self, other: I) -> bool
fn le<I>(self, other: I) -> bool
Iterator
are lexicographically
less or equal to those of another. Read more1.5.0 · Source§fn gt<I>(self, other: I) -> bool
fn gt<I>(self, other: I) -> bool
Iterator
are lexicographically
greater than those of another. Read more1.5.0 · Source§fn ge<I>(self, other: I) -> bool
fn ge<I>(self, other: I) -> bool
Iterator
are lexicographically
greater than or equal to those of another. Read more1.82.0 · Source§fn is_sorted_by<F>(self, compare: F) -> bool
fn is_sorted_by<F>(self, compare: F) -> bool
1.82.0 · Source§fn is_sorted_by_key<F, K>(self, f: F) -> bool
fn is_sorted_by_key<F, K>(self, f: F) -> bool
impl Eq for Libinput
Auto Trait Implementations§
impl Freeze for Libinput
impl !RefUnwindSafe for Libinput
impl !Send for Libinput
impl !Sync for Libinput
impl Unpin for Libinput
impl !UnwindSafe for Libinput
Blanket Implementations§
§impl<T> AsFilelike for Twhere
T: AsFd,
impl<T> AsFilelike for Twhere
T: AsFd,
§fn as_filelike(&self) -> BorrowedFd<'_>
fn as_filelike(&self) -> BorrowedFd<'_>
§fn as_filelike_view<Target>(&self) -> FilelikeView<'_, Target>where
Target: FilelikeViewType,
fn as_filelike_view<Target>(&self) -> FilelikeView<'_, Target>where
Target: FilelikeViewType,
&Target
. Read more§impl<T> AsRawFilelike for Twhere
T: AsRawFd,
impl<T> AsRawFilelike for Twhere
T: AsRawFd,
§fn as_raw_filelike(&self) -> i32
fn as_raw_filelike(&self) -> i32
§impl<T> AsRawSocketlike for Twhere
T: AsRawFd,
impl<T> AsRawSocketlike for Twhere
T: AsRawFd,
§fn as_raw_socketlike(&self) -> i32
fn as_raw_socketlike(&self) -> i32
§impl<T> AsSocketlike for Twhere
T: AsFd,
impl<T> AsSocketlike for Twhere
T: AsFd,
§fn as_socketlike(&self) -> BorrowedFd<'_>
fn as_socketlike(&self) -> BorrowedFd<'_>
§fn as_socketlike_view<Target>(&self) -> SocketlikeView<'_, Target>where
Target: SocketlikeViewType,
fn as_socketlike_view<Target>(&self) -> SocketlikeView<'_, Target>where
Target: SocketlikeViewType,
&Target
. Read more