feat(input): show touchpad page only if touchpad exists on system
This commit is contained in:
parent
b75df3c35e
commit
44a333d070
3 changed files with 29 additions and 3 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -1329,6 +1329,7 @@ dependencies = [
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
|
"udev",
|
||||||
"url",
|
"url",
|
||||||
"xkb-data",
|
"xkb-data",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ clap = { version = "4.4.18", features = ["derive"] }
|
||||||
itoa = "1.0.10"
|
itoa = "1.0.10"
|
||||||
futures = { package = "futures-lite", version = "2.2.0" }
|
futures = { package = "futures-lite", version = "2.2.0" }
|
||||||
xkb-data = "0.1.0"
|
xkb-data = "0.1.0"
|
||||||
|
udev = "0.8.0"
|
||||||
|
|
||||||
[dependencies.i18n-embed]
|
[dependencies.i18n-embed]
|
||||||
version = "0.14.1"
|
version = "0.14.1"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
use crate::app;
|
use crate::app;
|
||||||
|
use clap::builder::OsStr;
|
||||||
use cosmic::{
|
use cosmic::{
|
||||||
cosmic_config::{self, ConfigGet, ConfigSet},
|
cosmic_config::{self, ConfigGet, ConfigSet},
|
||||||
iced::{self, wayland::actions::window::SctkWindowSettings, window},
|
iced::{self, wayland::actions::window::SctkWindowSettings, window},
|
||||||
|
|
@ -205,8 +206,31 @@ impl page::Page<crate::pages::Message> for Page {
|
||||||
|
|
||||||
impl page::AutoBind<crate::pages::Message> for Page {
|
impl page::AutoBind<crate::pages::Message> for Page {
|
||||||
fn sub_pages(page: page::Insert<crate::pages::Message>) -> page::Insert<crate::pages::Message> {
|
fn sub_pages(page: page::Insert<crate::pages::Message>) -> page::Insert<crate::pages::Message> {
|
||||||
page.sub_page::<keyboard::Page>()
|
let insert = page.sub_page::<keyboard::Page>().sub_page::<mouse::Page>();
|
||||||
.sub_page::<mouse::Page>()
|
|
||||||
.sub_page::<touchpad::Page>()
|
if system_has_touchpad() {
|
||||||
|
insert.sub_page::<touchpad::Page>()
|
||||||
|
} else {
|
||||||
|
insert
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Uses `udev` to check if a touchpad device exists on the system.
|
||||||
|
fn system_has_touchpad() -> bool {
|
||||||
|
let Ok(mut enumerator) = udev::Enumerator::new() else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
let _res = enumerator.match_subsystem("input");
|
||||||
|
|
||||||
|
let Ok(mut devices) = enumerator.scan_devices() else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
devices.any(|device| {
|
||||||
|
device
|
||||||
|
.property_value("ID_INPUT_TOUCHPAD")
|
||||||
|
.map_or(false, |value| value == "1")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue