1
0
Fork 0
forked from wry/wry

head-management: add infrastructure

This commit is contained in:
Julian Orth 2025-07-12 09:13:14 +02:00
parent 078c59d730
commit 8356dd5d5c
28 changed files with 1791 additions and 21 deletions

View file

@ -29,6 +29,9 @@ use {
format::XRGB8888,
globals::Globals,
ifs::{
head_management::{
HeadManagers, HeadState, jay_head_manager_session_v1::handle_jay_head_manager_done,
},
jay_screencast::{perform_screencast_realloc, perform_toplevel_screencasts},
wl_output::{OutputId, PersistentOutputState, WlOutputGlobal},
wl_seat::handle_position_hint_requests,
@ -62,6 +65,7 @@ use {
numcell::NumCell,
oserror::OsError,
queue::AsyncQueue,
rc_eq::RcEq,
refcounted::RefCounted,
run_toplevel::RunToplevel,
tri::Try,
@ -339,6 +343,9 @@ fn start_compositor2(
node_at_tree: Default::default(),
position_hint_requests: Default::default(),
backend_connector_state_serials: Default::default(),
head_names: Default::default(),
head_managers: Default::default(),
head_managers_async: Default::default(),
});
state.tracker.register(ClientId::from_raw(0));
create_dummy_output(&state);
@ -523,6 +530,11 @@ fn start_global_event_handlers(state: &Rc<State>) -> Vec<SpawnedFuture<()>> {
"position hint requests",
handle_position_hint_requests(state.clone()),
),
eng.spawn2(
"jay head manager send done",
Phase::Layout,
handle_jay_head_manager_done(state.clone()),
),
]
}
@ -602,9 +614,6 @@ fn create_dummy_output(state: &Rc<State>) {
tearing_mode: Cell::new(&TearingMode::Never),
brightness: Cell::new(None),
});
let connector = Rc::new(DummyOutput {
id: state.connector_ids.next(),
}) as Rc<dyn Connector>;
let mode = backend::Mode {
width: 0,
height: 0,
@ -622,11 +631,21 @@ fn create_dummy_output(state: &Rc<State>) {
color_space: Default::default(),
transfer_function: Default::default(),
};
let id = state.connector_ids.next();
let connector = Rc::new(DummyOutput { id }) as Rc<dyn Connector>;
let name = Rc::new("Dummy".to_string());
let head_name = state.head_names.next();
let head_state = HeadState {
name: RcEq(name.clone()),
wl_output: None,
monitor_info: None,
};
let connector_data = Rc::new(ConnectorData {
id,
connector,
handler: Cell::new(None),
connected: Cell::new(true),
name: "Dummy".to_string(),
name,
drm_dev: None,
async_event: Default::default(),
damaged: Cell::new(false),
@ -634,6 +653,7 @@ fn create_dummy_output(state: &Rc<State>) {
needs_vblank_emulation: Cell::new(false),
damage_intersect: Default::default(),
state: Cell::new(backend_state),
head_managers: HeadManagers::new(head_name, head_state),
});
let schedule = Rc::new(OutputSchedule::new(
&state.ring,