diff options
author | D.B <thejan.2009@gmail.com> | 2016-07-30 15:12:34 +0200 |
---|---|---|
committer | D.B <thejan.2009@gmail.com> | 2016-07-30 15:12:34 +0200 |
commit | 8d0048c8d5b3774f79fcb0711d63bcc226b78631 (patch) | |
tree | adf1c6948b3dab471484d579e24abde013476ed1 | |
parent | Fix swaybg sizing on hidpi outputs (diff) | |
download | sway-8d0048c8d5b3774f79fcb0711d63bcc226b78631.tar.gz sway-8d0048c8d5b3774f79fcb0711d63bcc226b78631.tar.zst sway-8d0048c8d5b3774f79fcb0711d63bcc226b78631.zip |
properly hide top border inside tabbed/stacked
When titlebar is hidden, top border of the topmost view inside
tabbed/stacked container will not be drawn. This is changed in layout.c
On the other hand, top border should be drawn sometimes, for example
when titlebar is hidden on a view that is not the topmost inside
tabbed/stacked container. This is changed in border.c
-rw-r--r-- | include/border.h | 1 | ||||
-rw-r--r-- | sway/border.c | 20 | ||||
-rw-r--r-- | sway/layout.c | 2 |
3 files changed, 20 insertions, 3 deletions
diff --git a/include/border.h b/include/border.h index eb7fc656..b629ba46 100644 --- a/include/border.h +++ b/include/border.h | |||
@@ -20,5 +20,6 @@ void render_view_borders(wlc_handle view); | |||
20 | void update_view_border(swayc_t *view); | 20 | void update_view_border(swayc_t *view); |
21 | void map_update_view_border(swayc_t *view, void *data); | 21 | void map_update_view_border(swayc_t *view, void *data); |
22 | int get_font_text_height(const char *font); | 22 | int get_font_text_height(const char *font); |
23 | bool should_hide_top_border(swayc_t *con, double y); | ||
23 | 24 | ||
24 | #endif | 25 | #endif |
diff --git a/sway/border.c b/sway/border.c index d17d8d0c..c1a62bc6 100644 --- a/sway/border.c +++ b/sway/border.c | |||
@@ -332,10 +332,12 @@ void update_view_border(swayc_t *view) { | |||
332 | } | 332 | } |
333 | }; | 333 | }; |
334 | cr = create_border_buffer(view, g, &surface); | 334 | cr = create_border_buffer(view, g, &surface); |
335 | |||
336 | bool render_top = !should_hide_top_border(view, view->y); | ||
335 | if (view == focused) { | 337 | if (view == focused) { |
336 | render_borders(view, cr, &config->border_colors.focused, false); | 338 | render_borders(view, cr, &config->border_colors.focused, render_top); |
337 | } else { | 339 | } else { |
338 | render_borders(view, cr, &config->border_colors.focused_inactive, false); | 340 | render_borders(view, cr, &config->border_colors.focused_inactive, render_top); |
339 | } | 341 | } |
340 | 342 | ||
341 | // generate container titles | 343 | // generate container titles |
@@ -418,3 +420,17 @@ void render_view_borders(wlc_handle view) { | |||
418 | wlc_pixels_write(WLC_RGBA8888, &c->border->geometry, c->border->buffer); | 420 | wlc_pixels_write(WLC_RGBA8888, &c->border->geometry, c->border->buffer); |
419 | } | 421 | } |
420 | } | 422 | } |
423 | |||
424 | bool should_hide_top_border(swayc_t *con, double y) { | ||
425 | // returns true if container is child of tabbed/stacked layout and is | ||
426 | // sharing top border with tabbed titlebar | ||
427 | swayc_t *par = con->parent; | ||
428 | while (par->type != C_WORKSPACE) { | ||
429 | if (par->layout == L_TABBED || par->layout == L_STACKED) { | ||
430 | return con->y == y; | ||
431 | } | ||
432 | con = par; | ||
433 | par = par->parent; | ||
434 | } | ||
435 | return false; | ||
436 | } | ||
diff --git a/sway/layout.c b/sway/layout.c index db9787f3..ba9a8864 100644 --- a/sway/layout.c +++ b/sway/layout.c | |||
@@ -587,7 +587,7 @@ void update_geometry(swayc_t *container) { | |||
587 | } | 587 | } |
588 | 588 | ||
589 | if (config->hide_edge_borders == E_VERTICAL || config->hide_edge_borders == E_BOTH) { | 589 | if (config->hide_edge_borders == E_VERTICAL || config->hide_edge_borders == E_BOTH) { |
590 | if (geometry.origin.y == workspace->y) { | 590 | if (geometry.origin.y == workspace->y || should_hide_top_border(container, geometry.origin.y)) { |
591 | border_top = 0; | 591 | border_top = 0; |
592 | } | 592 | } |
593 | 593 | ||