aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar
diff options
context:
space:
mode:
authorLibravatar D.B <thejan.2009@gmail.com>2016-11-02 18:48:43 +0100
committerLibravatar D.B <thejan.2009@gmail.com>2016-11-02 18:58:33 +0100
commitad4d21d60b36ba39e2090fa052a29bf7ea8a3395 (patch)
tree84cb01165960555dbc64cd8aa57137b43ff65655 /swaybar
parentuse urgent_ws color in swaybar if binding_mode is undefined (diff)
downloadsway-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.c23
-rw-r--r--swaybar/render.c24
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
52static void render_block(struct window *window, struct config *config, struct status_block *block, double *x, bool edge) { 52static 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 }