diff --git a/src/compositor.rs b/src/compositor.rs index 94b63659..d5805b32 100644 --- a/src/compositor.rs +++ b/src/compositor.rs @@ -729,6 +729,7 @@ fn create_dummy_output(state: &Rc) { bar_rect: Default::default(), bar_rect_rel: Default::default(), bar_rect_with_separator: Default::default(), + bar_rect_with_separator_rel: Default::default(), bar_separator_rect: Default::default(), bar_separator_rect_rel: Default::default(), non_exclusive_rect: Default::default(), diff --git a/src/tasks/connector.rs b/src/tasks/connector.rs index 9ecf51be..fe02aaf0 100644 --- a/src/tasks/connector.rs +++ b/src/tasks/connector.rs @@ -234,6 +234,7 @@ impl ConnectorHandler { bar_rect: Default::default(), bar_rect_rel: Default::default(), bar_rect_with_separator: Default::default(), + bar_rect_with_separator_rel: Default::default(), bar_separator_rect: Default::default(), bar_separator_rect_rel: Default::default(), render_data: Default::default(), diff --git a/src/tree/output.rs b/src/tree/output.rs index b2dee56e..ac3cc924 100644 --- a/src/tree/output.rs +++ b/src/tree/output.rs @@ -96,6 +96,7 @@ pub struct OutputNode { pub bar_rect: Cell, pub bar_rect_rel: Cell, pub bar_rect_with_separator: Cell, + pub bar_rect_with_separator_rel: Cell, pub bar_separator_rect: Cell, pub bar_separator_rect_rel: Cell, pub render_data: RefCell, @@ -776,6 +777,7 @@ impl OutputNode { let mut bar_rect = Rect::default(); let mut bar_rect_rel = Rect::default(); let mut bar_rect_with_separator = Rect::default(); + let mut bar_rect_with_separator_rel = Rect::default(); let mut bar_separator_rect = Rect::default(); let mut bar_separator_rect_rel = Rect::default(); let mut workspace_rect = non_exclusive_rect; @@ -798,15 +800,19 @@ impl OutputNode { Rect::new_sized_saturating(x1, y1 + bh + bsw, width, height - bh - bsw); } } - bar_rect_rel = bar_rect.move_(-rect.x1(), -rect.y1()); - bar_separator_rect_rel = bar_separator_rect.move_(-rect.x1(), -rect.y1()); - workspace_rect_rel = workspace_rect.move_(-rect.x1(), -rect.y1()); + let to_rel = |r: Rect| r.move_(-rect.x1(), -rect.y1()); + bar_rect_rel = to_rel(bar_rect); + bar_rect_with_separator_rel = to_rel(bar_rect_with_separator); + bar_separator_rect_rel = to_rel(bar_separator_rect); + workspace_rect_rel = to_rel(workspace_rect); } self.non_exclusive_rect.set(non_exclusive_rect); self.non_exclusive_rect_rel.set(non_exclusive_rect_rel); self.bar_rect.set(bar_rect); self.bar_rect_rel.set(bar_rect_rel); self.bar_rect_with_separator.set(bar_rect_with_separator); + self.bar_rect_with_separator_rel + .set(bar_rect_with_separator_rel); self.bar_separator_rect.set(bar_separator_rect); self.bar_separator_rect_rel.set(bar_separator_rect_rel); self.workspace_rect.set(workspace_rect); @@ -1183,6 +1189,10 @@ impl OutputNode { if self.bar_button(seat, x, y) { return; } + let bar_rect_with_separator_rel = self.bar_rect_with_separator_rel.get(); + if bar_rect_with_separator_rel.contains(x, y) { + return; + } let ws = self.ensure_workspace(); seat.focus_node(ws); }