Эта библиотека это что-то типа maliit-glib но написана на Rust и имеет меньше возможностей.
Warning
Возможны баги и краши, т.к. интерфейс фреймворка maliit описан очень плохо, из-за чего разработка велась наощупь.
Note
Разработка велась под ОС Аврора, работоспособность в десктопных окружениях linux не гарантируется.
- Вызов экранной клавиатуры
- Сокрытие экранной клавиатуры
- Получение событий нажатия на клавиши экранной клавиатуры
- Сброс состояния ввода
- Установка языка клавиатуры
- Отправка текста для подсказок с клавиатуры
use maliit::{InputMethod, MaliitError};
fn main() -> Result<(), MaliitError> {
let mut im = InputMethod::new()?;
// Регистрация обработчика событий (запускает фоновый поток)
im.add_event_handler(|event| {
println!("Событие: {:?}", event);
})?;
// Установка языка перед показом клавиатуры
im.set_language("ru")?;
// Показать клавиатуру
im.show()?;
// ... работа с клавиатурой ...
// Скрыть клавиатуру
im.hide()?;
// Остановить обработчики и завершить фоновый поток
im.clear_event_handlers();
Ok(())
}Все публичные методы InputMethod возвращают Result<..., MaliitError>.
| Метод | Описание |
|---|---|
InputMethod::new() |
Подключение к Maliit серверу по D-Bus |
show() |
Показать экранную клавиатуру |
hide() |
Скрыть экранную клавиатуру |
reset() |
Сбросить состояние ввода |
set_language(lang) |
Установить язык клавиатуры |
rotate(orientation) |
Повернуть клавиатуру (Orientation::Portrait / Landscape / PortraitFlipped / LandscapeFlipped) |
update_widget_information(info, focus_changed) |
Обновить состояние текстового виджета на сервере Maliit |
show_with_info(info) |
Показать клавиатуру, предварительно отправив состояние виджета |
События обрабатываются в фоновом потоке. Каждый зарегистрированный обработчик вызывается для каждого события.
// Добавить обработчик (первый вызов запускает фоновый поток)
im.add_event_handler(|event| {
match event {
InputMethodEvent::Text(text) => { /* текст введён */ }
InputMethodEvent::Key { key, pressed } => { /* нажата клавиша */ }
InputMethodEvent::AreaChanged(x, y, w, h) => { /* изменилась область клавиатуры */ }
InputMethodEvent::ImInitiatedHide => { /* пользователь нажал кнопку скрытия клавиатуры */ }
InputMethodEvent::ActivationLost => { /* контекст потерял активацию */ }
}
})?;
// Можно добавить несколько обработчиков
im.add_event_handler(|event| {
log::debug!("Second handler: {:?}", event);
})?;
// Остановить все обработчики и завершить поток
im.clear_event_handlers();Все ошибки представлены типом MaliitError:
pub enum MaliitError {
Dbus(dbus::Error),
NotAvailable,
}