aboutsummaryrefslogtreecommitdiff
path: root/swaybar/ipc.c
diff options
context:
space:
mode:
Diffstat (limited to 'swaybar/ipc.c')
-rw-r--r--swaybar/ipc.c147
1 files changed, 36 insertions, 111 deletions
diff --git a/swaybar/ipc.c b/swaybar/ipc.c
index afaffb04..cca510c6 100644
--- a/swaybar/ipc.c
+++ b/swaybar/ipc.c
@@ -55,117 +55,42 @@ char *parse_font(const char *font) {
static void ipc_parse_colors(
struct swaybar_config *config, json_object *colors) {
- json_object *background, *statusline, *separator;
- json_object *focused_background, *focused_statusline, *focused_separator;
- json_object *focused_workspace_border, *focused_workspace_bg, *focused_workspace_text;
- json_object *inactive_workspace_border, *inactive_workspace_bg, *inactive_workspace_text;
- json_object *active_workspace_border, *active_workspace_bg, *active_workspace_text;
- json_object *urgent_workspace_border, *urgent_workspace_bg, *urgent_workspace_text;
- json_object *binding_mode_border, *binding_mode_bg, *binding_mode_text;
- json_object_object_get_ex(colors, "background", &background);
- json_object_object_get_ex(colors, "statusline", &statusline);
- json_object_object_get_ex(colors, "separator", &separator);
- json_object_object_get_ex(colors, "focused_background", &focused_background);
- json_object_object_get_ex(colors, "focused_statusline", &focused_statusline);
- json_object_object_get_ex(colors, "focused_separator", &focused_separator);
- json_object_object_get_ex(colors, "focused_workspace_border", &focused_workspace_border);
- json_object_object_get_ex(colors, "focused_workspace_bg", &focused_workspace_bg);
- json_object_object_get_ex(colors, "focused_workspace_text", &focused_workspace_text);
- json_object_object_get_ex(colors, "active_workspace_border", &active_workspace_border);
- json_object_object_get_ex(colors, "active_workspace_bg", &active_workspace_bg);
- json_object_object_get_ex(colors, "active_workspace_text", &active_workspace_text);
- json_object_object_get_ex(colors, "inactive_workspace_border", &inactive_workspace_border);
- json_object_object_get_ex(colors, "inactive_workspace_bg", &inactive_workspace_bg);
- json_object_object_get_ex(colors, "inactive_workspace_text", &inactive_workspace_text);
- json_object_object_get_ex(colors, "urgent_workspace_border", &urgent_workspace_border);
- json_object_object_get_ex(colors, "urgent_workspace_bg", &urgent_workspace_bg);
- json_object_object_get_ex(colors, "urgent_workspace_text", &urgent_workspace_text);
- json_object_object_get_ex(colors, "binding_mode_border", &binding_mode_border);
- json_object_object_get_ex(colors, "binding_mode_bg", &binding_mode_bg);
- json_object_object_get_ex(colors, "binding_mode_text", &binding_mode_text);
- if (background) {
- config->colors.background = parse_color(
- json_object_get_string(background));
- }
- if (statusline) {
- config->colors.statusline = parse_color(
- json_object_get_string(statusline));
- }
- if (separator) {
- config->colors.separator = parse_color(
- json_object_get_string(separator));
- }
- if (focused_background) {
- config->colors.focused_background = parse_color(
- json_object_get_string(focused_background));
- }
- if (focused_statusline) {
- config->colors.focused_statusline = parse_color(
- json_object_get_string(focused_statusline));
- }
- if (focused_separator) {
- config->colors.focused_separator = parse_color(
- json_object_get_string(focused_separator));
- }
- if (focused_workspace_border) {
- config->colors.focused_workspace.border = parse_color(
- json_object_get_string(focused_workspace_border));
- }
- if (focused_workspace_bg) {
- config->colors.focused_workspace.background = parse_color(
- json_object_get_string(focused_workspace_bg));
- }
- if (focused_workspace_text) {
- config->colors.focused_workspace.text = parse_color(
- json_object_get_string(focused_workspace_text));
- }
- if (active_workspace_border) {
- config->colors.active_workspace.border = parse_color(
- json_object_get_string(active_workspace_border));
- }
- if (active_workspace_bg) {
- config->colors.active_workspace.background = parse_color(
- json_object_get_string(active_workspace_bg));
- }
- if (active_workspace_text) {
- config->colors.active_workspace.text = parse_color(
- json_object_get_string(active_workspace_text));
- }
- if (inactive_workspace_border) {
- config->colors.inactive_workspace.border = parse_color(
- json_object_get_string(inactive_workspace_border));
- }
- if (inactive_workspace_bg) {
- config->colors.inactive_workspace.background = parse_color(
- json_object_get_string(inactive_workspace_bg));
- }
- if (inactive_workspace_text) {
- config->colors.inactive_workspace.text = parse_color(
- json_object_get_string(inactive_workspace_text));
- }
- if (urgent_workspace_border) {
- config->colors.urgent_workspace.border = parse_color(
- json_object_get_string(urgent_workspace_border));
- }
- if (urgent_workspace_bg) {
- config->colors.urgent_workspace.background = parse_color(
- json_object_get_string(urgent_workspace_bg));
- }
- if (urgent_workspace_text) {
- config->colors.urgent_workspace.text = parse_color(
- json_object_get_string(urgent_workspace_text));
- }
- if (binding_mode_border) {
- config->colors.binding_mode.border = parse_color(
- json_object_get_string(binding_mode_border));
- }
- if (binding_mode_bg) {
- config->colors.binding_mode.background = parse_color(
- json_object_get_string(binding_mode_bg));
- }
- if (binding_mode_text) {
- config->colors.binding_mode.text = parse_color(
- json_object_get_string(binding_mode_text));
+ struct {
+ const char *name;
+ uint32_t *color;
+ } properties[] = {
+ { "background", &config->colors.background },
+ { "statusline", &config->colors.statusline },
+ { "separator", &config->colors.separator },
+ { "focused_background", &config->colors.focused_background },
+ { "focused_statusline", &config->colors.focused_statusline },
+ { "focused_separator", &config->colors.focused_separator },
+ { "focused_workspace_border", &config->colors.focused_workspace.border },
+ { "focused_workspace_bg", &config->colors.focused_workspace.background },
+ { "focused_workspace_text", &config->colors.focused_workspace.text },
+ { "active_workspace_border", &config->colors.active_workspace.border },
+ { "active_workspace_bg", &config->colors.active_workspace.background },
+ { "active_workspace_text", &config->colors.active_workspace.text },
+ { "inactive_workspace_border", &config->colors.inactive_workspace.border },
+ { "inactive_workspace_bg", &config->colors.inactive_workspace.background },
+ { "inactive_workspace_text", &config->colors.inactive_workspace.text },
+ { "urgent_workspace_border", &config->colors.urgent_workspace.border },
+ { "urgent_workspace_bg", &config->colors.urgent_workspace.background },
+ { "urgent_workspace_text", &config->colors.urgent_workspace.text },
+ { "binding_mode_border", &config->colors.binding_mode.border },
+ { "binding_mode_bg", &config->colors.binding_mode.background },
+ { "binding_mode_text", &config->colors.binding_mode.text },
+ };
+
+ for (size_t i = 0; i < sizeof(properties) / sizeof(properties[i]); i++) {
+ json_object *object;
+ if (json_object_object_get_ex(colors, properties[i].name, &object)) {
+ const char *hexstring = json_object_get_string(object);
+ if (!parse_color(hexstring, properties[i].color)) {
+ sway_log(SWAY_ERROR, "Ignoring invalid %s: %s",
+ properties[i].name, hexstring);
+ }
+ }
}
}