1
0
Fork 0
forked from wry/wry

workspace: add constructor

This commit is contained in:
Julian Orth 2025-12-29 19:11:28 +01:00
parent 3f6960e64a
commit 76f51095f1
3 changed files with 31 additions and 50 deletions

View file

@ -758,31 +758,8 @@ fn create_dummy_output(state: &Rc<State>) {
pinned: Default::default(),
tearing: Default::default(),
});
let dummy_workspace = Rc::new(WorkspaceNode {
id: state.node_ids.next(),
state: state.clone(),
is_dummy: true,
output: CloneCell::new(dummy_output.clone()),
output_id: Cell::new(dummy_output.id),
position: Default::default(),
container: Default::default(),
stacked: Default::default(),
seat_state: Default::default(),
name: "dummy".to_string(),
output_link: Default::default(),
visible: Default::default(),
fullscreen: Default::default(),
visible_on_desired_output: Default::default(),
desired_output: CloneCell::new(dummy_output.global.output_id.clone()),
jay_workspaces: Default::default(),
may_capture: Cell::new(false),
has_capture: Cell::new(false),
title_texture: Default::default(),
attention_requests: Default::default(),
render_highlight: Default::default(),
ext_workspaces: Default::default(),
opt: Default::default(),
});
let dummy_workspace = WorkspaceNode::new(&dummy_output, "dummy", true);
dummy_workspace.may_capture.set(false);
*dummy_workspace.output_link.borrow_mut() =
Some(dummy_output.workspaces.add_last(dummy_workspace.clone()));
dummy_output.show_workspace(&dummy_workspace);

View file

@ -730,31 +730,7 @@ impl OutputNode {
}
pub fn create_workspace(self: &Rc<Self>, name: &str) -> Rc<WorkspaceNode> {
let ws = Rc::new(WorkspaceNode {
id: self.state.node_ids.next(),
state: self.state.clone(),
is_dummy: false,
output: CloneCell::new(self.clone()),
output_id: Cell::new(self.id),
position: Cell::new(Default::default()),
container: Default::default(),
stacked: Default::default(),
seat_state: Default::default(),
name: name.to_string(),
output_link: Default::default(),
visible: Cell::new(false),
fullscreen: Default::default(),
visible_on_desired_output: Cell::new(false),
desired_output: CloneCell::new(self.global.output_id.clone()),
jay_workspaces: Default::default(),
may_capture: self.state.default_workspace_capture.clone(),
has_capture: Cell::new(false),
title_texture: Default::default(),
attention_requests: Default::default(),
render_highlight: Default::default(),
ext_workspaces: Default::default(),
opt: Default::default(),
});
let ws = WorkspaceNode::new(self, name, false);
ws.opt.set(Some(ws.clone()));
ws.update_has_captures();
let link = if let Some(before) = self.find_workspace_insertion_point(name) {

View file

@ -73,6 +73,34 @@ pub struct WorkspaceNode {
}
impl WorkspaceNode {
pub fn new(output: &Rc<OutputNode>, name: &str, is_dummy: bool) -> Rc<Self> {
Rc::new(Self {
id: output.state.node_ids.next(),
state: output.state.clone(),
is_dummy,
output: CloneCell::new(output.clone()),
output_id: Cell::new(output.id),
position: Default::default(),
container: Default::default(),
stacked: Default::default(),
seat_state: Default::default(),
name: name.to_string(),
output_link: Default::default(),
visible: Default::default(),
fullscreen: Default::default(),
visible_on_desired_output: Default::default(),
desired_output: CloneCell::new(output.global.output_id.clone()),
jay_workspaces: Default::default(),
may_capture: output.state.default_workspace_capture.clone(),
has_capture: Default::default(),
title_texture: Default::default(),
attention_requests: Default::default(),
render_highlight: Default::default(),
ext_workspaces: Default::default(),
opt: Default::default(),
})
}
pub fn clear(&self) {
self.container.set(None);
*self.output_link.borrow_mut() = None;