1
0
Fork 0
forked from wry/wry

input: add a default seat

This commit is contained in:
Julian Orth 2024-03-13 14:16:26 +01:00
parent 8a73779cbd
commit 355a9eb240
10 changed files with 58 additions and 14 deletions

View file

@ -39,7 +39,7 @@ use {
},
ahash::AHashSet,
forker::ForkerProxy,
jay_config::video::GfxApi,
jay_config::{_private::DEFAULT_SEAT_NAME, video::GfxApi},
std::{cell::Cell, env, future::Future, ops::Deref, rc::Rc, sync::Arc, time::Duration},
thiserror::Error,
uapi::c,
@ -207,6 +207,7 @@ fn start_compositor2(
output_transforms: Default::default(),
double_click_interval_usec: Cell::new(400 * 1000),
double_click_distance: Cell::new(5),
create_default_seat: Cell::new(true),
});
state.tracker.register(ClientId::from_raw(0));
create_dummy_output(&state);
@ -254,6 +255,10 @@ async fn start_compositor3(state: Rc<State>, test_future: Option<TestFuture>) {
config.configure(false);
state.config.set(Some(Rc::new(config)));
if state.create_default_seat.get() && state.globals.seats.is_empty() {
state.create_seat(DEFAULT_SEAT_NAME);
}
let _geh = start_global_event_handlers(&state, &backend);
state.start_xwayland();

View file

@ -164,9 +164,7 @@ impl ConfigProxyHandler {
return;
}
}
let global_name = self.state.globals.name();
let seat = WlSeatGlobal::new(global_name, name, &self.state);
self.state.globals.add_global(&self.state, &seat);
let seat = self.state.create_seat(name);
self.respond(Response::GetSeat {
seat: Seat(seat.id().raw() as _),
});
@ -1516,6 +1514,7 @@ impl ConfigProxyHandler {
env,
fds,
} => self.handle_run(prog, args, env, fds).wrn("run")?,
ClientMessage::DisableDefaultSeat => self.state.create_default_seat.set(false),
}
Ok(())
}

View file

@ -12,13 +12,13 @@ testcase!();
async fn test(run: Rc<TestRun>) -> Result<(), TestError> {
let client = run.create_client().await?;
tassert!(client.registry.seats.is_empty());
tassert_eq!(client.registry.seats.len(), 1);
let seat = run.get_seat("default")?;
let seat = run.get_seat("new-seat")?;
client.sync().await;
tassert_eq!(client.registry.seats.len(), 1);
tassert_eq!(client.registry.seats.len(), 2);
let client_seat = client.registry.seats.get(&seat.name());
tassert!(client_seat.is_some());

View file

@ -156,6 +156,7 @@ pub struct State {
pub output_transforms: RefCell<AHashMap<Rc<OutputId>, Transform>>,
pub double_click_interval_usec: Cell<u64>,
pub double_click_distance: Cell<i32>,
pub create_default_seat: Cell<bool>,
}
// impl Drop for State {
@ -924,4 +925,11 @@ impl State {
capture.send_failed();
}
}
pub fn create_seat(self: &Rc<Self>, name: &str) -> Rc<WlSeatGlobal> {
let global_name = self.globals.name();
let seat = WlSeatGlobal::new(global_name, name, self);
self.globals.add_global(self, &seat);
seat
}
}

View file

@ -6,6 +6,7 @@ use {
tasks::udev_utils::{udev_props, UdevProps},
utils::asyncevent::AsyncEvent,
},
jay_config::_private::DEFAULT_SEAT_NAME,
std::{cell::Cell, rc::Rc},
};
@ -53,6 +54,12 @@ impl DeviceHandler {
let ae = self.ae.clone();
self.dev.on_change(Rc::new(move || ae.trigger()));
}
for seat in self.state.globals.seats.lock().values() {
if seat.seat_name() == DEFAULT_SEAT_NAME {
self.data.seat.set(Some(seat.clone()));
break;
}
}
if let Some(config) = self.state.config.get() {
config.new_input_device(self.dev.id());
}