diff options
author | D.B <thejan.2009@gmail.com> | 2016-11-02 18:48:43 +0100 |
---|---|---|
committer | D.B <thejan.2009@gmail.com> | 2016-11-02 18:58:33 +0100 |
commit | ad4d21d60b36ba39e2090fa052a29bf7ea8a3395 (patch) | |
tree | 84cb01165960555dbc64cd8aa57137b43ff65655 /swaybar | |
parent | use urgent_ws color in swaybar if binding_mode is undefined (diff) | |
download | sway-ad4d21d60b36ba39e2090fa052a29bf7ea8a3395.tar.gz sway-ad4d21d60b36ba39e2090fa052a29bf7ea8a3395.tar.zst sway-ad4d21d60b36ba39e2090fa052a29bf7ea8a3395.zip |
add bar colours for focused_(workspace|statusline|separator)
If these aren't defined in config, color settings without 'focused_'
prefix are used as a fallback.
Diffstat (limited to 'swaybar')
-rw-r--r-- | swaybar/ipc.c | 23 | ||||
-rw-r--r-- | swaybar/render.c | 24 |
2 files changed, 42 insertions, 5 deletions
diff --git a/swaybar/ipc.c b/swaybar/ipc.c index 2c092853..8d2f4e9a 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c | |||
@@ -108,6 +108,7 @@ static void ipc_parse_config(struct config *config, const char *payload) { | |||
108 | 108 | ||
109 | if (colors) { | 109 | if (colors) { |
110 | json_object *background, *statusline, *separator; | 110 | json_object *background, *statusline, *separator; |
111 | json_object *focused_background, *focused_statusline, *focused_separator; | ||
111 | json_object *focused_workspace_border, *focused_workspace_bg, *focused_workspace_text; | 112 | json_object *focused_workspace_border, *focused_workspace_bg, *focused_workspace_text; |
112 | json_object *inactive_workspace_border, *inactive_workspace_bg, *inactive_workspace_text; | 113 | json_object *inactive_workspace_border, *inactive_workspace_bg, *inactive_workspace_text; |
113 | json_object *active_workspace_border, *active_workspace_bg, *active_workspace_text; | 114 | json_object *active_workspace_border, *active_workspace_bg, *active_workspace_text; |
@@ -116,6 +117,9 @@ static void ipc_parse_config(struct config *config, const char *payload) { | |||
116 | json_object_object_get_ex(colors, "background", &background); | 117 | json_object_object_get_ex(colors, "background", &background); |
117 | json_object_object_get_ex(colors, "statusline", &statusline); | 118 | json_object_object_get_ex(colors, "statusline", &statusline); |
118 | json_object_object_get_ex(colors, "separator", &separator); | 119 | json_object_object_get_ex(colors, "separator", &separator); |
120 | json_object_object_get_ex(colors, "focused_background", &focused_background); | ||
121 | json_object_object_get_ex(colors, "focused_statusline", &focused_statusline); | ||
122 | json_object_object_get_ex(colors, "focused_separator", &focused_separator); | ||
119 | json_object_object_get_ex(colors, "focused_workspace_border", &focused_workspace_border); | 123 | json_object_object_get_ex(colors, "focused_workspace_border", &focused_workspace_border); |
120 | json_object_object_get_ex(colors, "focused_workspace_bg", &focused_workspace_bg); | 124 | json_object_object_get_ex(colors, "focused_workspace_bg", &focused_workspace_bg); |
121 | json_object_object_get_ex(colors, "focused_workspace_text", &focused_workspace_text); | 125 | json_object_object_get_ex(colors, "focused_workspace_text", &focused_workspace_text); |
@@ -143,6 +147,18 @@ static void ipc_parse_config(struct config *config, const char *payload) { | |||
143 | config->colors.separator = parse_color(json_object_get_string(separator)); | 147 | config->colors.separator = parse_color(json_object_get_string(separator)); |
144 | } | 148 | } |
145 | 149 | ||
150 | if (focused_background) { | ||
151 | config->colors.focused_background = parse_color(json_object_get_string(focused_background)); | ||
152 | } | ||
153 | |||
154 | if (focused_statusline) { | ||
155 | config->colors.focused_statusline = parse_color(json_object_get_string(focused_statusline)); | ||
156 | } | ||
157 | |||
158 | if (focused_separator) { | ||
159 | config->colors.focused_separator = parse_color(json_object_get_string(focused_separator)); | ||
160 | } | ||
161 | |||
146 | if (focused_workspace_border) { | 162 | if (focused_workspace_border) { |
147 | config->colors.focused_workspace.border = parse_color(json_object_get_string(focused_workspace_border)); | 163 | config->colors.focused_workspace.border = parse_color(json_object_get_string(focused_workspace_border)); |
148 | } | 164 | } |
@@ -235,6 +251,13 @@ static void ipc_update_workspaces(struct bar *bar) { | |||
235 | ws->name = strdup(json_object_get_string(name)); | 251 | ws->name = strdup(json_object_get_string(name)); |
236 | ws->visible = json_object_get_boolean(visible); | 252 | ws->visible = json_object_get_boolean(visible); |
237 | ws->focused = json_object_get_boolean(focused); | 253 | ws->focused = json_object_get_boolean(focused); |
254 | if (ws->focused) { | ||
255 | if (bar->focused_output) { | ||
256 | bar->focused_output->focused = false; | ||
257 | } | ||
258 | bar->focused_output = output; | ||
259 | output->focused = true; | ||
260 | } | ||
238 | ws->urgent = json_object_get_boolean(urgent); | 261 | ws->urgent = json_object_get_boolean(urgent); |
239 | list_add(output->workspaces, ws); | 262 | list_add(output->workspaces, ws); |
240 | } | 263 | } |
diff --git a/swaybar/render.c b/swaybar/render.c index a9f1991d..2eae997f 100644 --- a/swaybar/render.c +++ b/swaybar/render.c | |||
@@ -49,7 +49,7 @@ static void render_sharp_line(cairo_t *cairo, uint32_t color, double x, double y | |||
49 | } | 49 | } |
50 | } | 50 | } |
51 | 51 | ||
52 | static void render_block(struct window *window, struct config *config, struct status_block *block, double *x, bool edge) { | 52 | static void render_block(struct window *window, struct config *config, struct status_block *block, double *x, bool edge, bool is_focused) { |
53 | int width, height, sep_width; | 53 | int width, height, sep_width; |
54 | get_text_size(window->cairo, window->font, &width, &height, | 54 | get_text_size(window->cairo, window->font, &width, &height, |
55 | window->scale, block->markup, "%s", block->full_text); | 55 | window->scale, block->markup, "%s", block->full_text); |
@@ -159,7 +159,11 @@ static void render_block(struct window *window, struct config *config, struct st | |||
159 | 159 | ||
160 | // render separator | 160 | // render separator |
161 | if (!edge && block->separator) { | 161 | if (!edge && block->separator) { |
162 | cairo_set_source_u32(window->cairo, config->colors.separator); | 162 | if (is_focused) { |
163 | cairo_set_source_u32(window->cairo, config->colors.focused_separator); | ||
164 | } else { | ||
165 | cairo_set_source_u32(window->cairo, config->colors.separator); | ||
166 | } | ||
163 | if (config->sep_symbol) { | 167 | if (config->sep_symbol) { |
164 | offset = pos + (block->separator_block_width - sep_width) / 2; | 168 | offset = pos + (block->separator_block_width - sep_width) / 2; |
165 | cairo_move_to(window->cairo, offset, margin); | 169 | cairo_move_to(window->cairo, offset, margin); |
@@ -275,6 +279,7 @@ void render(struct output *output, struct config *config, struct status_line *li | |||
275 | 279 | ||
276 | struct window *window = output->window; | 280 | struct window *window = output->window; |
277 | cairo_t *cairo = window->cairo; | 281 | cairo_t *cairo = window->cairo; |
282 | bool is_focused = output->focused; | ||
278 | 283 | ||
279 | // Clear | 284 | // Clear |
280 | cairo_save(cairo); | 285 | cairo_save(cairo); |
@@ -285,11 +290,20 @@ void render(struct output *output, struct config *config, struct status_line *li | |||
285 | cairo_set_operator(cairo, CAIRO_OPERATOR_SOURCE); | 290 | cairo_set_operator(cairo, CAIRO_OPERATOR_SOURCE); |
286 | 291 | ||
287 | // Background | 292 | // Background |
288 | cairo_set_source_u32(cairo, config->colors.background); | 293 | if (is_focused) { |
294 | cairo_set_source_u32(cairo, config->colors.focused_background); | ||
295 | } else { | ||
296 | cairo_set_source_u32(cairo, config->colors.background); | ||
297 | } | ||
289 | cairo_paint(cairo); | 298 | cairo_paint(cairo); |
290 | 299 | ||
291 | // Command output | 300 | // Command output |
292 | cairo_set_source_u32(cairo, config->colors.statusline); | 301 | if (is_focused) { |
302 | cairo_set_source_u32(cairo, config->colors.focused_statusline); | ||
303 | } else { | ||
304 | cairo_set_source_u32(cairo, config->colors.statusline); | ||
305 | } | ||
306 | |||
293 | int width, height; | 307 | int width, height; |
294 | 308 | ||
295 | if (line->protocol == TEXT) { | 309 | if (line->protocol == TEXT) { |
@@ -305,7 +319,7 @@ void render(struct output *output, struct config *config, struct status_line *li | |||
305 | for (i = line->block_line->length - 1; i >= 0; --i) { | 319 | for (i = line->block_line->length - 1; i >= 0; --i) { |
306 | struct status_block *block = line->block_line->items[i]; | 320 | struct status_block *block = line->block_line->items[i]; |
307 | if (block->full_text && block->full_text[0]) { | 321 | if (block->full_text && block->full_text[0]) { |
308 | render_block(window, config, block, &pos, edge); | 322 | render_block(window, config, block, &pos, edge, is_focused); |
309 | edge = false; | 323 | edge = false; |
310 | } | 324 | } |
311 | } | 325 | } |