| Crates.io | rat-event |
| lib.rs | rat-event |
| version | 1.2.4 |
| created_at | 2024-05-08 17:46:50.85988+00 |
| updated_at | 2025-09-07 18:41:19.26785+00 |
| description | ratatui event handler trait for widgets |
| homepage | |
| repository | https://github.com/thscharler/rat-salsa |
| max_upload_size | |
| id | 1234002 |
| size | 82,247 |
This crate is a part of rat-salsa.
This crate defines the trait HandleEvent to help with composability of event-handling for ratatui widgets.
Objectives are
pub trait HandleEvent<Event, Qualifier, Return>
where
Return: ConsumedEvent
{
fn handle(
&mut self,
event: &Event,
qualifier: Qualifier
) -> Return;
}
Can be anything.
There are predefined qualifiers
Regular - Do what is considered 'normal' behaviour. Can vary depending on the actual state of the widget (e.g. focus)
MouseOnly - Splitting off mouse interaction helps when you only want to redefine the key bindings. And handling mouse events is usually more involved/complicated/specific.
DoubleClick - Double clicks are a bit special for widgets, often it requires a distinct return type and it's not as generally needed as other mouse behaviour.
Popup - Popup event-handlers are regular event-handlers, but they need processing before regular event-handlers. This is used for widgets that render popups above other widgets, and must make sure that event-handling for the popup doesn't interfere with widgets below the popup. By ensuring the order of event-handling most of the problems can be solved.
Dialog - Specialized event-handler for dialog-like popups. They want to be called first to be able to consume all events, thus blocking everything else.
The return type can be anything too.
To be useful it is required to implement ConsumedEvent to indicate if the event has been handled by the widget and further event-handling can stop.
To set a baseline for the return type this crate defines the enum Outcome which can indicate if a render is necessary or not.
For interop all return types in rat-salsa are convertible to/from Outcome.
There is one constraint for the return type: It must implement Consumed to indicate the fundamental property of an event being consumed by a widget. This lib has some control-flow constructs that use this property.