Skip to content

Commit e22e668

Browse files
authored
Merge pull request #638 from sday-ssc/master
Remove titlebar separator if title_height is 0.
2 parents 796269d + daafb98 commit e22e668

File tree

19 files changed

+222
-74
lines changed

19 files changed

+222
-74
lines changed

jay-config/src/_private/client.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,6 +1006,16 @@ impl ConfigClient {
10061006
show
10071007
}
10081008

1009+
pub fn set_show_titles(&self, show: bool) {
1010+
self.send(&ClientMessage::SetShowTitles { show });
1011+
}
1012+
1013+
pub fn get_show_titles(&self) -> bool {
1014+
let res = self.send_with_response(&ClientMessage::GetShowTitles);
1015+
get_response!(res, true, GetShowTitles { show });
1016+
show
1017+
}
1018+
10091019
pub fn set_middle_click_paste_enabled(&self, enabled: bool) {
10101020
self.send(&ClientMessage::SetMiddleClickPasteEnabled { enabled });
10111021
}

jay-config/src/_private/ipc.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,10 @@ pub enum ClientMessage<'a> {
801801
SeatEnableUnicodeInput {
802802
seat: Seat,
803803
},
804+
SetShowTitles {
805+
show: bool,
806+
},
807+
GetShowTitles,
804808
}
805809

806810
#[derive(Serialize, Deserialize, Debug)]
@@ -1036,6 +1040,9 @@ pub enum Response {
10361040
SeatGetSimpleImEnabled {
10371041
enabled: bool,
10381042
},
1043+
GetShowTitles {
1044+
show: bool,
1045+
},
10391046
}
10401047

10411048
#[derive(Serialize, Deserialize, Debug)]

jay-config/src/lib.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,24 @@ pub fn toggle_show_bar() {
336336
get.set_show_bar(!get.get_show_bar());
337337
}
338338

339+
/// Sets whether title bars on windows are shown.
340+
///
341+
/// The default is `true`.
342+
pub fn set_show_titles(show: bool) {
343+
get!().set_show_titles(show)
344+
}
345+
346+
/// Returns whether title bars on windows are shown.
347+
pub fn get_show_titles() -> bool {
348+
get!(true).get_show_titles()
349+
}
350+
351+
/// Toggles whether title bars on windows are shown.
352+
pub fn toggle_show_titles() {
353+
let get = get!();
354+
get.set_show_titles(!get.get_show_titles());
355+
}
356+
339357
/// Sets a callback to run when this config is unloaded.
340358
///
341359
/// Only one callback can be set at a time. If another callback is already set, it will be

src/config/handler.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,17 @@ impl ConfigProxyHandler {
13811381
});
13821382
}
13831383

1384+
fn handle_set_show_titles(&self, show: bool) {
1385+
self.state.theme.show_titles.set(show);
1386+
self.spaces_change();
1387+
}
1388+
1389+
fn handle_get_show_titles(&self) {
1390+
self.respond(Response::GetShowTitles {
1391+
show: self.state.theme.show_titles.get(),
1392+
});
1393+
}
1394+
13841395
fn handle_set_show_float_pin_icon(&self, show: bool) {
13851396
self.state.show_pin_icon.set(show);
13861397
for stacked in self.state.root.stacked.iter() {
@@ -3188,6 +3199,8 @@ impl ConfigProxyHandler {
31883199
.wrn("get_content_type")?,
31893200
ClientMessage::SetShowBar { show } => self.handle_set_show_bar(show),
31903201
ClientMessage::GetShowBar => self.handle_get_show_bar(),
3202+
ClientMessage::SetShowTitles { show } => self.handle_set_show_titles(show),
3203+
ClientMessage::GetShowTitles => self.handle_get_show_titles(),
31913204
ClientMessage::SeatFocusHistory { seat, timeline } => self
31923205
.handle_seat_focus_history(seat, timeline)
31933206
.wrn("seat_focus_history")?,

src/icons.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ pub enum IconsError {
4949
impl Icons {
5050
pub fn update_sizes(&self, state: &State) {
5151
let mut sizes = AHashSet::new();
52-
let height = state.theme.sizes.title_height.get();
52+
let height = state.theme.title_height();
5353
for &(scale, _) in &*state.scales.lock() {
5454
let [size] = scale.pixel_size([height]);
5555
if size > 0 {
@@ -64,7 +64,7 @@ impl Icons {
6464
}
6565

6666
pub fn get(&self, state: &State, scale: Scale) -> Option<Rc<SizedIcons>> {
67-
let [size] = scale.pixel_size([state.theme.sizes.title_height.get()]);
67+
let [size] = scale.pixel_size([state.theme.title_height()]);
6868
if let Some(icons) = self.icons.get(&size) {
6969
return icons;
7070
}

src/it/tests/t0002_window.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ async fn test(run: Rc<TestRun>) -> Result<(), TestError> {
2121
tassert_eq!(window.tl.core.width.get(), 800);
2222
tassert_eq!(
2323
window.tl.core.height.get(),
24-
600 - 2 * (run.state.theme.sizes.title_height.get() + 1)
24+
600 - 2 * run.state.theme.title_plus_underline_height()
2525
);
2626

2727
tassert_eq!(
2828
window.tl.server.node_absolute_position(),
2929
Rect::new_sized(
3030
0,
31-
2 * (run.state.theme.sizes.title_height.get() + 1),
31+
2 * run.state.theme.title_plus_underline_height(),
3232
window.tl.core.width.get(),
3333
window.tl.core.height.get(),
3434
)

src/it/tests/t0003_multi_window.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ async fn test(run: Rc<TestRun>) -> Result<(), TestError> {
2121
let window2 = client.create_window().await?;
2222
window2.map().await?;
2323

24-
let otop = 2 * (run.state.theme.sizes.title_height.get() + 1);
24+
let otop = 2 * run.state.theme.title_plus_underline_height();
2525
let bw = run.state.theme.sizes.border_width.get();
2626

2727
tassert_eq!(

src/renderer.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,9 @@ impl Renderer<'_> {
501501
};
502502
let pos = floating.position.get();
503503
let theme = &self.state.theme;
504-
let th = theme.sizes.title_height.get();
504+
let th = theme.title_height();
505+
let tpuh = theme.title_plus_underline_height();
506+
let tuh = theme.title_underline_height();
505507
let bw = theme.sizes.border_width.get();
506508
let bc = theme.colors.border.get();
507509
let tc = if floating.active.get() {
@@ -524,7 +526,7 @@ impl Renderer<'_> {
524526
let title = [Rect::new_sized(x + bw, y + bw, pos.width() - 2 * bw, th).unwrap()];
525527
self.base.fill_boxes(&title, &tc, srgb);
526528
let title_underline =
527-
[Rect::new_sized(x + bw, y + bw + th, pos.width() - 2 * bw, 1).unwrap()];
529+
[Rect::new_sized(x + bw, y + bw + th, pos.width() - 2 * bw, tuh).unwrap()];
528530
self.base.fill_boxes(&title_underline, &uc, srgb);
529531
let rect = floating.title_rect.get().move_(x, y);
530532
let bounds = self.base.scale_rect(rect);
@@ -584,9 +586,9 @@ impl Renderer<'_> {
584586
}
585587
let body = Rect::new_sized(
586588
x + bw,
587-
y + bw + th + 1,
589+
y + bw + tpuh,
588590
pos.width() - 2 * bw,
589-
pos.height() - 2 * bw - th - 1,
591+
pos.height() - 2 * bw - tpuh,
590592
)
591593
.unwrap();
592594
let scissor_body = self.base.scale_rect(body);

src/state.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,8 @@ impl State {
826826
abs_pos: Option<(i32, i32)>,
827827
) {
828828
width += 2 * self.theme.sizes.border_width.get();
829-
height += 2 * self.theme.sizes.border_width.get() + self.theme.sizes.title_height.get() + 1;
829+
height +=
830+
2 * self.theme.sizes.border_width.get() + self.theme.title_plus_underline_height();
830831
let output = workspace.output.get();
831832
let output_rect = output.global.pos.get();
832833
let position = if let Some((mut x1, mut y1)) = abs_pos {
@@ -836,7 +837,7 @@ impl State {
836837
if y1 > output_rect.y2() {
837838
y1 = output_rect.y2();
838839
}
839-
y1 -= self.theme.sizes.border_width.get() + self.theme.sizes.title_height.get() + 1;
840+
y1 -= self.theme.sizes.border_width.get() + self.theme.title_plus_underline_height();
840841
x1 -= self.theme.sizes.border_width.get();
841842
Rect::new_sized(x1, y1, width, height).unwrap()
842843
} else {

src/theme.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,7 @@ pub struct Theme {
466466
pub bar_font: CloneCell<Option<Arc<String>>>,
467467
pub title_font: CloneCell<Option<Arc<String>>>,
468468
pub default_font: Arc<String>,
469+
pub show_titles: Cell<bool>,
469470
}
470471

471472
impl Default for Theme {
@@ -478,6 +479,7 @@ impl Default for Theme {
478479
bar_font: Default::default(),
479480
title_font: Default::default(),
480481
default_font,
482+
show_titles: Cell::new(true),
481483
}
482484
}
483485
}
@@ -490,4 +492,24 @@ impl Theme {
490492
pub fn bar_font(&self) -> Arc<String> {
491493
self.bar_font.get().unwrap_or_else(|| self.font.get())
492494
}
495+
496+
pub fn title_height(&self) -> i32 {
497+
if self.show_titles.get() {
498+
self.sizes.title_height.get()
499+
} else {
500+
0
501+
}
502+
}
503+
504+
pub fn title_underline_height(&self) -> i32 {
505+
if self.show_titles.get() { 1 } else { 0 }
506+
}
507+
508+
pub fn title_plus_underline_height(&self) -> i32 {
509+
if self.show_titles.get() {
510+
self.sizes.title_height.get() + 1
511+
} else {
512+
0
513+
}
514+
}
493515
}

0 commit comments

Comments
 (0)