From 8463a2896a932cd99f3dc93608b03cb4aba93293 Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Sat, 28 Jul 2018 09:34:25 -0400 Subject: swaynag: implement config file support --- swaynag/types.c | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 swaynag/types.c (limited to 'swaynag/types.c') diff --git a/swaynag/types.c b/swaynag/types.c new file mode 100644 index 00000000..8dd99d2a --- /dev/null +++ b/swaynag/types.c @@ -0,0 +1,116 @@ +#define _XOPEN_SOURCE 500 +#include +#include +#include +#include +#include +#include +#include "list.h" +#include "swaynag/types.h" +#include "util.h" + +void nagbar_types_add_default(list_t *types) { + struct sway_nagbar_type *type_error; + type_error = calloc(1, sizeof(struct sway_nagbar_type)); + type_error->name = strdup("error"); + type_error->button_background = 0x680A0AFF; + type_error->background = 0x900000FF; + type_error->text = 0xFFFFFFFF; + type_error->border = 0xD92424FF; + type_error->border_bottom = 0x470909FF; + list_add(types, type_error); + + struct sway_nagbar_type *type_warning; + type_warning = calloc(1, sizeof(struct sway_nagbar_type)); + type_warning->name = strdup("warning"); + type_warning->button_background = 0xFFC100FF; + type_warning->background = 0xFFA800FF; + type_warning->text = 0x000000FF; + type_warning->border = 0xAB7100FF; + type_warning->border_bottom = 0xAB7100FF; + list_add(types, type_warning); +} + +struct sway_nagbar_type *nagbar_type_get(list_t *types, char *name) { + for (int i = 0; i < types->length; i++) { + struct sway_nagbar_type *type = types->items[i]; + if (strcasecmp(type->name, name) == 0) { + return type; + } + } + return NULL; +} + +struct sway_nagbar_type *nagbar_type_clone(struct sway_nagbar_type *type) { + struct sway_nagbar_type *clone; + clone = calloc(1, sizeof(struct sway_nagbar_type)); + clone->name = strdup(type->name); + clone->button_background = type->button_background; + clone->background = type->background; + clone->text = type->text; + clone->border = type->border; + clone->border_bottom = type->border_bottom; + return clone; +} + +void nagbar_type_free(struct sway_nagbar_type *type) { + free(type->name); + free(type); +} + +void nagbar_types_free(list_t *types) { + while (types->length) { + struct sway_nagbar_type *type = types->items[0]; + nagbar_type_free(type); + list_del(types, 0); + } + list_free(types); +} + +int nagbar_parse_type(int argc, char **argv, struct sway_nagbar_type *type) { + enum color_option { + COLOR_BACKGROUND, + COLOR_BORDER, + COLOR_BORDER_BOTTOM, + COLOR_BUTTON, + COLOR_TEXT, + }; + + static struct option opts[] = { + {"background", required_argument, NULL, COLOR_BACKGROUND}, + {"border", required_argument, NULL, COLOR_BORDER}, + {"border-bottom", required_argument, NULL, COLOR_BORDER_BOTTOM}, + {"button-background", required_argument, NULL, COLOR_BUTTON}, + {"text", required_argument, NULL, COLOR_TEXT}, + {0, 0, 0, 0} + }; + + optind = 1; + while (1) { + int c = getopt_long(argc, argv, "", opts, NULL); + if (c == -1) { + break; + } + switch (c) { + case COLOR_BACKGROUND: + type->background = parse_color(optarg); + break; + case COLOR_BORDER: + type->border = parse_color(optarg); + break; + case COLOR_BORDER_BOTTOM: + type->border_bottom = parse_color(optarg); + break; + case COLOR_BUTTON: + type->button_background = parse_color(optarg); + break; + case COLOR_TEXT: + type->text = parse_color(optarg); + break; + default: + break; + } + } + return 0; +} + -- cgit v1.2.3 From 6124d0f9a202ba2f39125602a35bb47d3742022b Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Sat, 28 Jul 2018 22:56:12 -0400 Subject: swaynag: split config into own file and fix optind --- swaynag/types.c | 1 + 1 file changed, 1 insertion(+) (limited to 'swaynag/types.c') diff --git a/swaynag/types.c b/swaynag/types.c index 8dd99d2a..dbc841f7 100644 --- a/swaynag/types.c +++ b/swaynag/types.c @@ -6,6 +6,7 @@ #include #include #include "list.h" +#include "swaynag/config.h" #include "swaynag/types.h" #include "util.h" -- cgit v1.2.3 From a6145914c60351d8e541192c7fe35556f8e02507 Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Sat, 28 Jul 2018 23:15:12 -0400 Subject: swaynag: refactor {sway_,}nagbar to swaynag --- swaynag/types.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'swaynag/types.c') diff --git a/swaynag/types.c b/swaynag/types.c index dbc841f7..c92d0e89 100644 --- a/swaynag/types.c +++ b/swaynag/types.c @@ -10,9 +10,9 @@ #include "swaynag/types.h" #include "util.h" -void nagbar_types_add_default(list_t *types) { - struct sway_nagbar_type *type_error; - type_error = calloc(1, sizeof(struct sway_nagbar_type)); +void swaynag_types_add_default(list_t *types) { + struct swaynag_type *type_error; + type_error = calloc(1, sizeof(struct swaynag_type)); type_error->name = strdup("error"); type_error->button_background = 0x680A0AFF; type_error->background = 0x900000FF; @@ -21,8 +21,8 @@ void nagbar_types_add_default(list_t *types) { type_error->border_bottom = 0x470909FF; list_add(types, type_error); - struct sway_nagbar_type *type_warning; - type_warning = calloc(1, sizeof(struct sway_nagbar_type)); + struct swaynag_type *type_warning; + type_warning = calloc(1, sizeof(struct swaynag_type)); type_warning->name = strdup("warning"); type_warning->button_background = 0xFFC100FF; type_warning->background = 0xFFA800FF; @@ -32,9 +32,9 @@ void nagbar_types_add_default(list_t *types) { list_add(types, type_warning); } -struct sway_nagbar_type *nagbar_type_get(list_t *types, char *name) { +struct swaynag_type *swaynag_type_get(list_t *types, char *name) { for (int i = 0; i < types->length; i++) { - struct sway_nagbar_type *type = types->items[i]; + struct swaynag_type *type = types->items[i]; if (strcasecmp(type->name, name) == 0) { return type; } @@ -42,9 +42,9 @@ struct sway_nagbar_type *nagbar_type_get(list_t *types, char *name) { return NULL; } -struct sway_nagbar_type *nagbar_type_clone(struct sway_nagbar_type *type) { - struct sway_nagbar_type *clone; - clone = calloc(1, sizeof(struct sway_nagbar_type)); +struct swaynag_type *swaynag_type_clone(struct swaynag_type *type) { + struct swaynag_type *clone; + clone = calloc(1, sizeof(struct swaynag_type)); clone->name = strdup(type->name); clone->button_background = type->button_background; clone->background = type->background; @@ -54,21 +54,21 @@ struct sway_nagbar_type *nagbar_type_clone(struct sway_nagbar_type *type) { return clone; } -void nagbar_type_free(struct sway_nagbar_type *type) { +void swaynag_type_free(struct swaynag_type *type) { free(type->name); free(type); } -void nagbar_types_free(list_t *types) { +void swaynag_types_free(list_t *types) { while (types->length) { - struct sway_nagbar_type *type = types->items[0]; - nagbar_type_free(type); + struct swaynag_type *type = types->items[0]; + swaynag_type_free(type); list_del(types, 0); } list_free(types); } -int nagbar_parse_type(int argc, char **argv, struct sway_nagbar_type *type) { +int swaynag_parse_type(int argc, char **argv, struct swaynag_type *type) { enum color_option { COLOR_BACKGROUND, COLOR_BORDER, -- cgit v1.2.3 From e01acb6097b583fcf2f6d0e0afe1bd878dd9b683 Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Sun, 29 Jul 2018 22:42:03 -0400 Subject: swaynag: allow more config options --- swaynag/types.c | 150 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 92 insertions(+), 58 deletions(-) (limited to 'swaynag/types.c') diff --git a/swaynag/types.c b/swaynag/types.c index c92d0e89..f429baf0 100644 --- a/swaynag/types.c +++ b/swaynag/types.c @@ -9,8 +9,26 @@ #include "swaynag/config.h" #include "swaynag/types.h" #include "util.h" +#include "wlr-layer-shell-unstable-v1-client-protocol.h" void swaynag_types_add_default(list_t *types) { + struct swaynag_type *type_defaults; + type_defaults = calloc(1, sizeof(struct swaynag_type)); + type_defaults->name = strdup(""); + type_defaults->font = strdup("pango:Monospace 10"); + type_defaults->anchors = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP + | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT + | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; + type_defaults->bar_border_thickness = 2; + type_defaults->message_padding = 8; + type_defaults->details_border_thickness = 3; + type_defaults->button_border_thickness = 3; + type_defaults->button_gap = 20; + type_defaults->button_gap_close = 15; + type_defaults->button_margin_right = 2; + type_defaults->button_padding = 3; + list_add(types, type_defaults); + struct swaynag_type *type_error; type_error = calloc(1, sizeof(struct swaynag_type)); type_error->name = strdup("error"); @@ -42,20 +60,84 @@ struct swaynag_type *swaynag_type_get(list_t *types, char *name) { return NULL; } -struct swaynag_type *swaynag_type_clone(struct swaynag_type *type) { - struct swaynag_type *clone; - clone = calloc(1, sizeof(struct swaynag_type)); - clone->name = strdup(type->name); - clone->button_background = type->button_background; - clone->background = type->background; - clone->text = type->text; - clone->border = type->border; - clone->border_bottom = type->border_bottom; - return clone; +void swaynag_type_merge(struct swaynag_type *dest, struct swaynag_type *src) { + if (!dest || !src) { + return; + } + + if (!dest->font && src->font) { + dest->font = strdup(src->font); + } + + if (!dest->output && src->output) { + dest->output = strdup(src->output); + } + + if (dest->anchors == 0 && src->anchors > 0) { + dest->anchors = src->anchors; + } + + // Colors + if (dest->button_background == 0 && src->button_background > 0) { + dest->button_background = src->button_background; + } + + if (dest->background == 0 && src->background > 0) { + dest->background = src->background; + } + + if (dest->text == 0 && src->text > 0) { + dest->text = src->text; + } + + if (dest->border == 0 && src->border > 0) { + dest->border = src->border; + } + + if (dest->border_bottom == 0 && src->border_bottom > 0) { + dest->border_bottom = src->border_bottom; + } + + // Sizing + if (dest->bar_border_thickness == 0 && src->bar_border_thickness > 0) { + dest->bar_border_thickness = src->bar_border_thickness; + } + + if (dest->message_padding == 0 && src->message_padding > 0) { + dest->message_padding = src->message_padding; + } + + if (dest->details_border_thickness == 0 + && src->details_border_thickness > 0) { + dest->details_border_thickness = src->details_border_thickness; + } + + if (dest->button_border_thickness == 0 + && src->button_border_thickness > 0) { + dest->button_border_thickness = src->button_border_thickness; + } + + if (dest->button_gap == 0 && src->button_gap > 0) { + dest->button_gap = src->button_gap; + } + + if (dest->button_gap_close == 0 && src->button_gap_close > 0) { + dest->button_gap_close = src->button_gap_close; + } + + if (dest->button_margin_right == 0 && src->button_margin_right > 0) { + dest->button_margin_right = src->button_margin_right; + } + + if (dest->button_padding == 0 && src->button_padding > 0) { + dest->button_padding = src->button_padding; + } } void swaynag_type_free(struct swaynag_type *type) { free(type->name); + free(type->font); + free(type->output); free(type); } @@ -67,51 +149,3 @@ void swaynag_types_free(list_t *types) { } list_free(types); } - -int swaynag_parse_type(int argc, char **argv, struct swaynag_type *type) { - enum color_option { - COLOR_BACKGROUND, - COLOR_BORDER, - COLOR_BORDER_BOTTOM, - COLOR_BUTTON, - COLOR_TEXT, - }; - - static struct option opts[] = { - {"background", required_argument, NULL, COLOR_BACKGROUND}, - {"border", required_argument, NULL, COLOR_BORDER}, - {"border-bottom", required_argument, NULL, COLOR_BORDER_BOTTOM}, - {"button-background", required_argument, NULL, COLOR_BUTTON}, - {"text", required_argument, NULL, COLOR_TEXT}, - {0, 0, 0, 0} - }; - - optind = 1; - while (1) { - int c = getopt_long(argc, argv, "", opts, NULL); - if (c == -1) { - break; - } - switch (c) { - case COLOR_BACKGROUND: - type->background = parse_color(optarg); - break; - case COLOR_BORDER: - type->border = parse_color(optarg); - break; - case COLOR_BORDER_BOTTOM: - type->border_bottom = parse_color(optarg); - break; - case COLOR_BUTTON: - type->button_background = parse_color(optarg); - break; - case COLOR_TEXT: - type->text = parse_color(optarg); - break; - default: - break; - } - } - return 0; -} - -- cgit v1.2.3 From 4f5cf330c8643a154215cbae5758b86022d6edb3 Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Mon, 30 Jul 2018 13:52:02 -0400 Subject: swaynag: address some more of sircmpwn's comments Fixes segfauls for any case where swaynag->outputs was not inititalized including -h/--help, -v/--version, and invalid arguments. Sets sane defaults for colors not given. Any color not given will fallback to the default color values for type error. Adds support for a hidpi cursor --- swaynag/types.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'swaynag/types.c') diff --git a/swaynag/types.c b/swaynag/types.c index f429baf0..66b802cd 100644 --- a/swaynag/types.c +++ b/swaynag/types.c @@ -19,6 +19,11 @@ void swaynag_types_add_default(list_t *types) { type_defaults->anchors = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; + type_defaults->button_background = 0x680A0AFF; + type_defaults->background = 0x900000FF; + type_defaults->text = 0xFFFFFFFF; + type_defaults->border = 0xD92424FF; + type_defaults->border_bottom = 0x470909FF; type_defaults->bar_border_thickness = 2; type_defaults->message_padding = 8; type_defaults->details_border_thickness = 3; @@ -32,11 +37,6 @@ void swaynag_types_add_default(list_t *types) { struct swaynag_type *type_error; type_error = calloc(1, sizeof(struct swaynag_type)); type_error->name = strdup("error"); - type_error->button_background = 0x680A0AFF; - type_error->background = 0x900000FF; - type_error->text = 0xFFFFFFFF; - type_error->border = 0xD92424FF; - type_error->border_bottom = 0x470909FF; list_add(types, type_error); struct swaynag_type *type_warning; -- cgit v1.2.3 From 1e7fbe493eadc32531bc2aae69d75e5ffbf214c5 Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Mon, 30 Jul 2018 14:14:16 -0400 Subject: swaynag: swaybar like default colors --- swaynag/types.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'swaynag/types.c') diff --git a/swaynag/types.c b/swaynag/types.c index 66b802cd..1e0a138b 100644 --- a/swaynag/types.c +++ b/swaynag/types.c @@ -19,11 +19,11 @@ void swaynag_types_add_default(list_t *types) { type_defaults->anchors = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; - type_defaults->button_background = 0x680A0AFF; - type_defaults->background = 0x900000FF; + type_defaults->button_background = 0x333333FF; + type_defaults->background = 0x323232FF; type_defaults->text = 0xFFFFFFFF; - type_defaults->border = 0xD92424FF; - type_defaults->border_bottom = 0x470909FF; + type_defaults->border = 0x222222FF; + type_defaults->border_bottom = 0x444444FF; type_defaults->bar_border_thickness = 2; type_defaults->message_padding = 8; type_defaults->details_border_thickness = 3; @@ -36,6 +36,11 @@ void swaynag_types_add_default(list_t *types) { struct swaynag_type *type_error; type_error = calloc(1, sizeof(struct swaynag_type)); + type_error->button_background = 0x680A0AFF; + type_error->background = 0x900000FF; + type_error->text = 0xFFFFFFFF; + type_error->border = 0xD92424FF; + type_error->border_bottom = 0x470909FF; type_error->name = strdup("error"); list_add(types, type_error); -- cgit v1.2.3