From 76f51095f118a49a05f6f927b0f82b21e6e0def0 Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Mon, 29 Dec 2025 19:11:28 +0100 Subject: [PATCH] workspace: add constructor --- src/compositor.rs | 27 ++------------------------- src/tree/output.rs | 26 +------------------------- src/tree/workspace.rs | 28 ++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 50 deletions(-) diff --git a/src/compositor.rs b/src/compositor.rs index f5b61b1c..8cb3ae8b 100644 --- a/src/compositor.rs +++ b/src/compositor.rs @@ -758,31 +758,8 @@ fn create_dummy_output(state: &Rc) { 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); diff --git a/src/tree/output.rs b/src/tree/output.rs index 329b0f32..11b8b0a6 100644 --- a/src/tree/output.rs +++ b/src/tree/output.rs @@ -730,31 +730,7 @@ impl OutputNode { } pub fn create_workspace(self: &Rc, name: &str) -> Rc { - 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) { diff --git a/src/tree/workspace.rs b/src/tree/workspace.rs index df6180db..9dbc56e4 100644 --- a/src/tree/workspace.rs +++ b/src/tree/workspace.rs @@ -73,6 +73,34 @@ pub struct WorkspaceNode { } impl WorkspaceNode { + pub fn new(output: &Rc, name: &str, is_dummy: bool) -> Rc { + 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;