1
0
Fork 0
forked from wry/wry

config: allow disabling the built-in bar

This commit is contained in:
Julian Orth 2025-07-17 22:31:16 +02:00
parent 224f5380fe
commit 08e7e01d0e
16 changed files with 156 additions and 14 deletions

View file

@ -351,6 +351,7 @@ fn start_compositor2(
head_names: Default::default(),
head_managers: Default::default(),
head_managers_async: Default::default(),
show_bar: Cell::new(true),
});
state.tracker.register(ClientId::from_raw(0));
create_dummy_output(&state);

View file

@ -1330,6 +1330,19 @@ impl ConfigProxyHandler {
});
}
fn handle_set_show_bar(&self, show: bool) {
self.state.show_bar.set(show);
for output in self.state.root.outputs.lock().values() {
output.on_spaces_changed();
}
}
fn handle_get_show_bar(&self) {
self.respond(Response::GetShowBar {
show: self.state.show_bar.get(),
});
}
fn handle_set_show_float_pin_icon(&self, show: bool) {
self.state.show_pin_icon.set(show);
for stacked in self.state.root.stacked.iter() {
@ -2982,6 +2995,8 @@ impl ConfigProxyHandler {
ClientMessage::GetContentType { window } => self
.handle_get_content_type(window)
.wrn("get_content_type")?,
ClientMessage::SetShowBar { show } => self.handle_set_show_bar(show),
ClientMessage::GetShowBar => self.handle_get_show_bar(),
}
Ok(())
}

View file

@ -87,8 +87,8 @@ impl Renderer<'_> {
render_layer!(output.layers[0]);
render_layer!(output.layers[1]);
let non_exclusive_rect = output.non_exclusive_rect_rel.get();
let (x, y) = non_exclusive_rect.translate_inv(x, y);
{
let (x, mut y) = non_exclusive_rect.translate_inv(x, y);
if self.state.show_bar.get() {
let bar_bg = Rect::new_sized(0, 0, non_exclusive_rect.width(), th).unwrap();
let bar_bg = self.base.scale_rect(bar_bg);
let bar_bg_abs = {
@ -166,9 +166,10 @@ impl Renderer<'_> {
self.render_surface(&data.surface, rect.x1(), rect.y1(), Some(&bounds));
}
}
y += th + 1;
}
if let Some(ws) = output.workspace.get() {
self.render_workspace(&ws, x, y + th + 1);
self.render_workspace(&ws, x, y);
}
}
macro_rules! render_stacked {

View file

@ -271,6 +271,7 @@ pub struct State {
pub head_managers:
CopyHashMap<(ClientId, JayHeadManagerSessionV1Id), Rc<JayHeadManagerSessionV1>>,
pub head_managers_async: AsyncQueue<HeadManagerEvent>,
pub show_bar: Cell<bool>,
}
// impl Drop for State {
@ -1474,6 +1475,9 @@ impl State {
}
pub fn tray_icon_size(&self) -> i32 {
if !self.show_bar.get() {
return 0;
}
(self.theme.sizes.title_height.get() - 2).max(0)
}

View file

@ -814,8 +814,13 @@ impl ContainerNode {
let abs_y = self.abs_y1.get();
for (i, child) in self.children.iter().enumerate() {
let rect = child.title_rect.get();
if self.toplevel_data.visible.get() {
self.state.damage(rect.move_(abs_x, abs_y));
if self.toplevel_data.visible.get() && !mono && split != ContainerSplit::Horizontal {
self.state.damage(Rect::new_sized_unchecked(
abs_x,
abs_y + rect.y1(),
cwidth,
rect.height() + 1,
));
}
if i > 0 {
let rect = if mono {
@ -852,6 +857,10 @@ impl ContainerNode {
rd.underline_rects
.push(Rect::new_sized(0, th, cwidth, 1).unwrap());
}
if self.toplevel_data.visible.get() && (mono || split == ContainerSplit::Horizontal) {
self.state
.damage(Rect::new_sized_unchecked(abs_x, abs_y, cwidth, th + 1));
}
rd.titles.remove_if(|_, v| v.is_empty());
}

View file

@ -496,6 +496,9 @@ impl OutputNode {
fn update_render_data_phase1(self: &Rc<Self>) -> Rc<AsyncEvent> {
let on_completed = Rc::new(OnDropEvent::default());
if !self.state.show_bar.get() {
return on_completed.event();
}
let Some(ctx) = self.state.render_ctx.get() else {
return on_completed.event();
};
@ -556,6 +559,10 @@ impl OutputNode {
rd.attention_requested_workspaces.clear();
rd.captured_inactive_workspaces.clear();
rd.active_workspace = None;
if !self.state.show_bar.get() {
self.state.damage(rd.full_area);
return;
}
let mut pos = 0;
let theme = &self.state.theme;
let th = theme.sizes.title_height.get();
@ -766,7 +773,10 @@ impl OutputNode {
width,
height,
));
let y1 = y1 + th + 1;
let mut y1 = y1;
if self.state.show_bar.get() {
y1 += th + 1;
}
let height = (y2 - y1).max(0);
self.workspace_rect
.set(Rect::new_sized_unchecked(x1, y1, width, height));
@ -1068,6 +1078,9 @@ impl OutputNode {
}
fn button(self: Rc<Self>, id: PointerType) {
if !self.state.show_bar.get() {
return;
}
let (x, y) = match self.pointer_positions.get(&id) {
Some(p) => p,
_ => return,
@ -1208,8 +1221,9 @@ impl OutputNode {
if ws.fullscreen.is_some() {
return None;
}
let show_bar = self.state.show_bar.get();
let th = self.state.theme.sizes.title_height.get();
if y_abs < rect.y1() + th + 1 {
if show_bar && y_abs < rect.y1() + th + 1 {
let rd = &*self.render_data.borrow();
let (x, _) = rect.translate(x_abs, y_abs);
let mut last_x2 = 0;
@ -1236,8 +1250,11 @@ impl OutputNode {
},
});
}
let thp1 = self.state.theme.sizes.title_height.get() + 1;
let rect = Rect::new(rect.x1(), rect.y1() + thp1, rect.x2(), rect.y2())?;
let bar_height = match show_bar {
true => th + 1,
false => 0,
};
let rect = Rect::new(rect.x1(), rect.y1() + bar_height, rect.x2(), rect.y2())?;
if !rect.contains(x_abs, y_abs) {
return None;
}
@ -1256,6 +1273,9 @@ impl OutputNode {
x_abs: i32,
y_abs: i32,
) -> Option<WorkspaceDragDestination> {
if !self.state.show_bar.get() {
return None;
}
let rect = self.non_exclusive_rect.get();
if !rect.contains(x_abs, y_abs) {
return None;
@ -1478,7 +1498,10 @@ impl Node for OutputNode {
}
return FindTreeResult::AcceptsInput;
}
let bar_height = self.state.theme.sizes.title_height.get() + 1;
let bar_height = match self.state.show_bar.get() {
true => self.state.theme.sizes.title_height.get() + 1,
false => 0,
};
if usecase == FindTreeUsecase::SelectWorkspace {
if y >= bar_height {
y -= bar_height;