aboutsummaryrefslogtreecommitdiffstats
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
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.
-rw-r--r--include/sway/commands.h4
-rw-r--r--include/sway/config.h7
-rw-r--r--include/swaybar/bar.h2
-rw-r--r--include/swaybar/config.h4
-rw-r--r--sway/commands.c3
-rw-r--r--sway/commands/bar/colors.c45
-rw-r--r--sway/ipc-json.c18
-rw-r--r--swaybar/ipc.c23
-rw-r--r--swaybar/render.c24
9 files changed, 124 insertions, 6 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h
index a46f41a3..db5e94d9 100644
--- a/include/sway/commands.h
+++ b/include/sway/commands.h
@@ -160,12 +160,14 @@ sway_cmd bar_cmd_workspace_buttons;
160 160
161sway_cmd bar_colors_cmd_active_workspace; 161sway_cmd bar_colors_cmd_active_workspace;
162sway_cmd bar_colors_cmd_background; 162sway_cmd bar_colors_cmd_background;
163sway_cmd bar_colors_cmd_background; 163sway_cmd bar_colors_cmd_focused_background;
164sway_cmd bar_colors_cmd_binding_mode; 164sway_cmd bar_colors_cmd_binding_mode;
165sway_cmd bar_colors_cmd_focused_workspace; 165sway_cmd bar_colors_cmd_focused_workspace;
166sway_cmd bar_colors_cmd_inactive_workspace; 166sway_cmd bar_colors_cmd_inactive_workspace;
167sway_cmd bar_colors_cmd_separator; 167sway_cmd bar_colors_cmd_separator;
168sway_cmd bar_colors_cmd_focused_separator;
168sway_cmd bar_colors_cmd_statusline; 169sway_cmd bar_colors_cmd_statusline;
170sway_cmd bar_colors_cmd_focused_statusline;
169sway_cmd bar_colors_cmd_urgent_workspace; 171sway_cmd bar_colors_cmd_urgent_workspace;
170 172
171sway_cmd input_cmd_accel_profile; 173sway_cmd input_cmd_accel_profile;
diff --git a/include/sway/config.h b/include/sway/config.h
index c41bb8b3..9b3cc60c 100644
--- a/include/sway/config.h
+++ b/include/sway/config.h
@@ -148,6 +148,9 @@ struct bar_config {
148 char background[10]; 148 char background[10];
149 char statusline[10]; 149 char statusline[10];
150 char separator[10]; 150 char separator[10];
151 char focused_background[10];
152 char focused_statusline[10];
153 char focused_separator[10];
151 char focused_workspace_border[10]; 154 char focused_workspace_border[10];
152 char focused_workspace_bg[10]; 155 char focused_workspace_bg[10];
153 char focused_workspace_text[10]; 156 char focused_workspace_text[10];
@@ -164,6 +167,10 @@ struct bar_config {
164 char binding_mode_bg[10]; 167 char binding_mode_bg[10];
165 char binding_mode_text[10]; 168 char binding_mode_text[10];
166 169
170 bool has_focused_background;
171 bool has_focused_statusline;
172 bool has_focused_separator;
173
167 bool has_binding_mode_border; 174 bool has_binding_mode_border;
168 bool has_binding_mode_bg; 175 bool has_binding_mode_bg;
169 bool has_binding_mode_text; 176 bool has_binding_mode_text;
diff --git a/include/swaybar/bar.h b/include/swaybar/bar.h
index a3c511d9..697a48c2 100644
--- a/include/swaybar/bar.h
+++ b/include/swaybar/bar.h
@@ -9,6 +9,7 @@ struct bar {
9 struct config *config; 9 struct config *config;
10 struct status_line *status; 10 struct status_line *status;
11 list_t *outputs; 11 list_t *outputs;
12 struct output *focused_output;
12 13
13 int ipc_event_socketfd; 14 int ipc_event_socketfd;
14 int ipc_socketfd; 15 int ipc_socketfd;
@@ -22,6 +23,7 @@ struct output {
22 list_t *workspaces; 23 list_t *workspaces;
23 char *name; 24 char *name;
24 int idx; 25 int idx;
26 bool focused;
25}; 27};
26 28
27struct workspace { 29struct workspace {
diff --git a/include/swaybar/config.h b/include/swaybar/config.h
index 934116ca..04b12cd4 100644
--- a/include/swaybar/config.h
+++ b/include/swaybar/config.h
@@ -40,6 +40,10 @@ struct config {
40 uint32_t statusline; 40 uint32_t statusline;
41 uint32_t separator; 41 uint32_t separator;
42 42
43 uint32_t focused_background;
44 uint32_t focused_statusline;
45 uint32_t focused_separator;
46
43 struct box_colors focused_workspace; 47 struct box_colors focused_workspace;
44 struct box_colors active_workspace; 48 struct box_colors active_workspace;
45 struct box_colors inactive_workspace; 49 struct box_colors inactive_workspace;
diff --git a/sway/commands.c b/sway/commands.c
index 3236ff6c..872e9fc3 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -277,6 +277,9 @@ static struct cmd_handler bar_colors_handlers[] = {
277 { "active_workspace", bar_colors_cmd_active_workspace }, 277 { "active_workspace", bar_colors_cmd_active_workspace },
278 { "background", bar_colors_cmd_background }, 278 { "background", bar_colors_cmd_background },
279 { "binding_mode", bar_colors_cmd_binding_mode }, 279 { "binding_mode", bar_colors_cmd_binding_mode },
280 { "focused_background", bar_colors_cmd_focused_background },
281 { "focused_separator", bar_colors_cmd_focused_separator },
282 { "focused_statusline", bar_colors_cmd_focused_statusline },
280 { "focused_workspace", bar_colors_cmd_focused_workspace }, 283 { "focused_workspace", bar_colors_cmd_focused_workspace },
281 { "inactive_workspace", bar_colors_cmd_inactive_workspace }, 284 { "inactive_workspace", bar_colors_cmd_inactive_workspace },
282 { "separator", bar_colors_cmd_separator }, 285 { "separator", bar_colors_cmd_separator },
diff --git a/sway/commands/bar/colors.c b/sway/commands/bar/colors.c
index e9180604..8fb7fe27 100644
--- a/sway/commands/bar/colors.c
+++ b/sway/commands/bar/colors.c
@@ -49,6 +49,21 @@ struct cmd_results *bar_colors_cmd_background(int argc, char **argv) {
49 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 49 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
50} 50}
51 51
52struct cmd_results *bar_colors_cmd_focused_background(int argc, char **argv) {
53 struct cmd_results *error = NULL;
54 if ((error = checkarg(argc, "focused_background", EXPECTED_EQUAL_TO, 1))) {
55 return error;
56 }
57
58 if ((error = add_color("focused_background", config->current_bar->colors.focused_background, argv[0]))) {
59 return error;
60 }else {
61 config->current_bar->colors.has_focused_background = true;
62 }
63
64 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
65}
66
52struct cmd_results *bar_colors_cmd_binding_mode(int argc, char **argv) { 67struct cmd_results *bar_colors_cmd_binding_mode(int argc, char **argv) {
53 struct cmd_results *error = NULL; 68 struct cmd_results *error = NULL;
54 if ((error = checkarg(argc, "binding_mode", EXPECTED_EQUAL_TO, 3))) { 69 if ((error = checkarg(argc, "binding_mode", EXPECTED_EQUAL_TO, 3))) {
@@ -131,6 +146,21 @@ struct cmd_results *bar_colors_cmd_separator(int argc, char **argv) {
131 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 146 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
132} 147}
133 148
149struct cmd_results *bar_colors_cmd_focused_separator(int argc, char **argv) {
150 struct cmd_results *error = NULL;
151 if ((error = checkarg(argc, "focused_separator", EXPECTED_EQUAL_TO, 1))) {
152 return error;
153 }
154
155 if ((error = add_color("focused_separator", config->current_bar->colors.focused_separator, argv[0]))) {
156 return error;
157 } else {
158 config->current_bar->colors.has_focused_separator = true;
159 }
160
161 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
162}
163
134struct cmd_results *bar_colors_cmd_statusline(int argc, char **argv) { 164struct cmd_results *bar_colors_cmd_statusline(int argc, char **argv) {
135 struct cmd_results *error = NULL; 165 struct cmd_results *error = NULL;
136 if ((error = checkarg(argc, "statusline", EXPECTED_EQUAL_TO, 1))) { 166 if ((error = checkarg(argc, "statusline", EXPECTED_EQUAL_TO, 1))) {
@@ -144,6 +174,21 @@ struct cmd_results *bar_colors_cmd_statusline(int argc, char **argv) {
144 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 174 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
145} 175}
146 176
177struct cmd_results *bar_colors_cmd_focused_statusline(int argc, char **argv) {
178 struct cmd_results *error = NULL;
179 if ((error = checkarg(argc, "focused_statusline", EXPECTED_EQUAL_TO, 1))) {
180 return error;
181 }
182
183 if ((error = add_color("focused_statusline", config->current_bar->colors.focused_statusline, argv[0]))) {
184 return error;
185 } else {
186 config->current_bar->colors.has_focused_statusline = true;
187 }
188
189 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
190}
191
147struct cmd_results *bar_colors_cmd_urgent_workspace(int argc, char **argv) { 192struct cmd_results *bar_colors_cmd_urgent_workspace(int argc, char **argv) {
148 struct cmd_results *error = NULL; 193 struct cmd_results *error = NULL;
149 if ((error = checkarg(argc, "urgent_workspace", EXPECTED_EQUAL_TO, 3))) { 194 if ((error = checkarg(argc, "urgent_workspace", EXPECTED_EQUAL_TO, 3))) {
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
index 458dc7c2..c21d28af 100644
--- a/sway/ipc-json.c
+++ b/sway/ipc-json.c
@@ -312,6 +312,24 @@ json_object *ipc_json_describe_bar_config(struct bar_config *bar) {
312 json_object_object_add(colors, "statusline", json_object_new_string(bar->colors.statusline)); 312 json_object_object_add(colors, "statusline", json_object_new_string(bar->colors.statusline));
313 json_object_object_add(colors, "separator", json_object_new_string(bar->colors.separator)); 313 json_object_object_add(colors, "separator", json_object_new_string(bar->colors.separator));
314 314
315 if (bar->colors.has_focused_background) {
316 json_object_object_add(colors, "focused_background", json_object_new_string(bar->colors.focused_background));
317 } else {
318 json_object_object_add(colors, "focused_background", json_object_new_string(bar->colors.background));
319 }
320
321 if (bar->colors.has_focused_statusline) {
322 json_object_object_add(colors, "focused_statusline", json_object_new_string(bar->colors.focused_statusline));
323 } else {
324 json_object_object_add(colors, "focused_statusline", json_object_new_string(bar->colors.statusline));
325 }
326
327 if (bar->colors.has_focused_separator) {
328 json_object_object_add(colors, "focused_separator", json_object_new_string(bar->colors.focused_separator));
329 } else {
330 json_object_object_add(colors, "focused_separator", json_object_new_string(bar->colors.separator));
331 }
332
315 json_object_object_add(colors, "focused_workspace_border", json_object_new_string(bar->colors.focused_workspace_border)); 333 json_object_object_add(colors, "focused_workspace_border", json_object_new_string(bar->colors.focused_workspace_border));
316 json_object_object_add(colors, "focused_workspace_bg", json_object_new_string(bar->colors.focused_workspace_bg)); 334 json_object_object_add(colors, "focused_workspace_bg", json_object_new_string(bar->colors.focused_workspace_bg));
317 json_object_object_add(colors, "focused_workspace_text", json_object_new_string(bar->colors.focused_workspace_text)); 335 json_object_object_add(colors, "focused_workspace_text", json_object_new_string(bar->colors.focused_workspace_text));
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 }