Skip to main content

Repeat

Struct Repeat 

Source
pub struct Repeat { /* private fields */ }
Expand description

Which key is repeating, and what each event does to that.

Split out from the timer so it can be reasoned about, and tested, without one. libinput deliberately does not auto-repeat – it reports what the hardware did, and the repeat rate is a user preference the compositor owns – so this is the piece that has to exist somewhere.

Implementations§

Source§

impl Repeat

Source

pub const fn new(config: RepeatConfig) -> Self

Start with nothing held.

Source

pub const fn config(&self) -> RepeatConfig

The delay and interval this was built with.

Source

pub const fn held_key(&self) -> Option<u32>

The key currently repeating.

Source

pub fn on_key(&mut self, event: &KeyEvent, repeats: bool) -> Timer

Feed a real key event.

repeats is the keymap’s answer for this key – Keyboard::should_repeat. It is passed in rather than looked up so this stays usable without a keymap, and so a caller with its own policy can impose it.

Synthesized events are ignored: feeding this its own output back would re-arm the delay on every tick and the key would never repeat.

Source

pub fn cancel(&mut self) -> Timer

Stop repeating.

For a session pause, or any point where the held-key state has stopped being trustworthy.

Source

pub fn synthesize( &self, expirations: u64, time_ms: u32, out: &mut Vec<KeyEvent>, ) -> u64

Turn a batch of timer expirations into events to deliver.

Returns how many were dropped to the burst cap, which is worth saying out loud rather than swallowing: a nonzero answer means the loop is not keeping up.

The events carry only the key. A caller that wants sym and utf8 runs them through Keyboard::resolve, which reads against the modifiers held now – so pressing Shift partway through a held key changes what the next repeat types.

Trait Implementations§

Source§

impl Clone for Repeat

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Repeat

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.