summaryrefslogtreecommitdiffstats
path: root/swaynag/types.c
diff options
context:
space:
mode:
Diffstat (limited to 'swaynag/types.c')
-rw-r--r--swaynag/types.c156
1 files changed, 156 insertions, 0 deletions
diff --git a/swaynag/types.c b/swaynag/types.c
new file mode 100644
index 00000000..1e0a138b
--- /dev/null
+++ b/swaynag/types.c
@@ -0,0 +1,156 @@
1#define _XOPEN_SOURCE 500
2#include <getopt.h>
3#include <stdbool.h>
4#include <stdlib.h>
5#include <stdint.h>
6#include <string.h>
7#include <strings.h>
8#include "list.h"
9#include "swaynag/config.h"
10#include "swaynag/types.h"
11#include "util.h"
12#include "wlr-layer-shell-unstable-v1-client-protocol.h"
13
14void swaynag_types_add_default(list_t *types) {
15 struct swaynag_type *type_defaults;
16 type_defaults = calloc(1, sizeof(struct swaynag_type));
17 type_defaults->name = strdup("<defaults>");
18 type_defaults->font = strdup("pango:Monospace 10");
19 type_defaults->anchors = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP
20 | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT
21 | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT;
22 type_defaults->button_background = 0x333333FF;
23 type_defaults->background = 0x323232FF;
24 type_defaults->text = 0xFFFFFFFF;
25 type_defaults->border = 0x222222FF;
26 type_defaults->border_bottom = 0x444444FF;
27 type_defaults->bar_border_thickness = 2;
28 type_defaults->message_padding = 8;
29 type_defaults->details_border_thickness = 3;
30 type_defaults->button_border_thickness = 3;
31 type_defaults->button_gap = 20;
32 type_defaults->button_gap_close = 15;
33 type_defaults->button_margin_right = 2;
34 type_defaults->button_padding = 3;
35 list_add(types, type_defaults);
36
37 struct swaynag_type *type_error;
38 type_error = calloc(1, sizeof(struct swaynag_type));
39 type_error->button_background = 0x680A0AFF;
40 type_error->background = 0x900000FF;
41 type_error->text = 0xFFFFFFFF;
42 type_error->border = 0xD92424FF;
43 type_error->border_bottom = 0x470909FF;
44 type_error->name = strdup("error");
45 list_add(types, type_error);
46
47 struct swaynag_type *type_warning;
48 type_warning = calloc(1, sizeof(struct swaynag_type));
49 type_warning->name = strdup("warning");
50 type_warning->button_background = 0xFFC100FF;
51 type_warning->background = 0xFFA800FF;
52 type_warning->text = 0x000000FF;
53 type_warning->border = 0xAB7100FF;
54 type_warning->border_bottom = 0xAB7100FF;
55 list_add(types, type_warning);
56}
57
58struct swaynag_type *swaynag_type_get(list_t *types, char *name) {
59 for (int i = 0; i < types->length; i++) {
60 struct swaynag_type *type = types->items[i];
61 if (strcasecmp(type->name, name) == 0) {
62 return type;
63 }
64 }
65 return NULL;
66}
67
68void swaynag_type_merge(struct swaynag_type *dest, struct swaynag_type *src) {
69 if (!dest || !src) {
70 return;
71 }
72
73 if (!dest->font && src->font) {
74 dest->font = strdup(src->font);
75 }
76
77 if (!dest->output && src->output) {
78 dest->output = strdup(src->output);
79 }
80
81 if (dest->anchors == 0 && src->anchors > 0) {
82 dest->anchors = src->anchors;
83 }
84
85 // Colors
86 if (dest->button_background == 0 && src->button_background > 0) {
87 dest->button_background = src->button_background;
88 }
89
90 if (dest->background == 0 && src->background > 0) {
91 dest->background = src->background;
92 }
93
94 if (dest->text == 0 && src->text > 0) {
95 dest->text = src->text;
96 }
97
98 if (dest->border == 0 && src->border > 0) {
99 dest->border = src->border;
100 }
101
102 if (dest->border_bottom == 0 && src->border_bottom > 0) {
103 dest->border_bottom = src->border_bottom;
104 }
105
106 // Sizing
107 if (dest->bar_border_thickness == 0 && src->bar_border_thickness > 0) {
108 dest->bar_border_thickness = src->bar_border_thickness;
109 }
110
111 if (dest->message_padding == 0 && src->message_padding > 0) {
112 dest->message_padding = src->message_padding;
113 }
114
115 if (dest->details_border_thickness == 0
116 && src->details_border_thickness > 0) {
117 dest->details_border_thickness = src->details_border_thickness;
118 }
119
120 if (dest->button_border_thickness == 0
121 && src->button_border_thickness > 0) {
122 dest->button_border_thickness = src->button_border_thickness;
123 }
124
125 if (dest->button_gap == 0 && src->button_gap > 0) {
126 dest->button_gap = src->button_gap;
127 }
128
129 if (dest->button_gap_close == 0 && src->button_gap_close > 0) {
130 dest->button_gap_close = src->button_gap_close;
131 }
132
133 if (dest->button_margin_right == 0 && src->button_margin_right > 0) {
134 dest->button_margin_right = src->button_margin_right;
135 }
136
137 if (dest->button_padding == 0 && src->button_padding > 0) {
138 dest->button_padding = src->button_padding;
139 }
140}
141
142void swaynag_type_free(struct swaynag_type *type) {
143 free(type->name);
144 free(type->font);
145 free(type->output);
146 free(type);
147}
148
149void swaynag_types_free(list_t *types) {
150 while (types->length) {
151 struct swaynag_type *type = types->items[0];
152 swaynag_type_free(type);
153 list_del(types, 0);
154 }
155 list_free(types);
156}