diff options
Diffstat (limited to 'swaynag/main.c')
-rw-r--r-- | swaynag/main.c | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/swaynag/main.c b/swaynag/main.c index 0493c1f0..20d03c31 100644 --- a/swaynag/main.c +++ b/swaynag/main.c | |||
@@ -5,7 +5,6 @@ | |||
5 | #include "swaynag/config.h" | 5 | #include "swaynag/config.h" |
6 | #include "swaynag/swaynag.h" | 6 | #include "swaynag/swaynag.h" |
7 | #include "swaynag/types.h" | 7 | #include "swaynag/types.h" |
8 | #include "wlr-layer-shell-unstable-v1-client-protocol.h" | ||
9 | 8 | ||
10 | static struct swaynag swaynag; | 9 | static struct swaynag swaynag; |
11 | 10 | ||
@@ -26,10 +25,6 @@ int main(int argc, char **argv) { | |||
26 | swaynag_types_add_default(types); | 25 | swaynag_types_add_default(types); |
27 | 26 | ||
28 | memset(&swaynag, 0, sizeof(swaynag)); | 27 | memset(&swaynag, 0, sizeof(swaynag)); |
29 | swaynag.anchors = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | ||
30 | | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ||
31 | | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; | ||
32 | swaynag.font = strdup("pango:monospace 10"); | ||
33 | swaynag.buttons = create_list(); | 28 | swaynag.buttons = create_list(); |
34 | 29 | ||
35 | struct swaynag_button *button_close = | 30 | struct swaynag_button *button_close = |
@@ -44,7 +39,7 @@ int main(int argc, char **argv) { | |||
44 | 39 | ||
45 | char *config_path = NULL; | 40 | char *config_path = NULL; |
46 | bool debug = false; | 41 | bool debug = false; |
47 | int launch_status = swaynag_parse_options(argc, argv, NULL, NULL, | 42 | int launch_status = swaynag_parse_options(argc, argv, NULL, NULL, NULL, |
48 | &config_path, &debug); | 43 | &config_path, &debug); |
49 | if (launch_status != 0) { | 44 | if (launch_status != 0) { |
50 | exit_code = launch_status; | 45 | exit_code = launch_status; |
@@ -66,8 +61,13 @@ int main(int argc, char **argv) { | |||
66 | } | 61 | } |
67 | 62 | ||
68 | if (argc > 1) { | 63 | if (argc > 1) { |
64 | struct swaynag_type *type_args; | ||
65 | type_args = calloc(1, sizeof(struct swaynag_type)); | ||
66 | type_args->name = strdup("<args>"); | ||
67 | list_add(types, type_args); | ||
68 | |||
69 | int result = swaynag_parse_options(argc, argv, &swaynag, types, | 69 | int result = swaynag_parse_options(argc, argv, &swaynag, types, |
70 | NULL, NULL); | 70 | type_args, NULL, NULL); |
71 | if (result != 0) { | 71 | if (result != 0) { |
72 | exit_code = result; | 72 | exit_code = result; |
73 | goto cleanup; | 73 | goto cleanup; |
@@ -84,7 +84,20 @@ int main(int argc, char **argv) { | |||
84 | swaynag.type = swaynag_type_get(types, "error"); | 84 | swaynag.type = swaynag_type_get(types, "error"); |
85 | } | 85 | } |
86 | 86 | ||
87 | swaynag.type = swaynag_type_clone(swaynag.type); | 87 | // Construct a new type using the config defaults as base, then merging |
88 | // config type defaults on top, then merging arguments on top of that, and | ||
89 | // finally merging defaults on top. | ||
90 | struct swaynag_type *type = calloc(1, sizeof(struct swaynag_type)); | ||
91 | type->name = strdup(swaynag.type->name); | ||
92 | swaynag_type_merge(type, swaynag_type_get(types, "<args>")); | ||
93 | swaynag_type_merge(type, swaynag.type); | ||
94 | swaynag_type_merge(type, swaynag_type_get(types, "<config>")); | ||
95 | swaynag_type_merge(type, swaynag_type_get(types, "<defaults>")); | ||
96 | swaynag.type = type; | ||
97 | if (swaynag.type->output) { | ||
98 | swaynag.output.name = strdup(swaynag.type->output); | ||
99 | } | ||
100 | |||
88 | swaynag_types_free(types); | 101 | swaynag_types_free(types); |
89 | 102 | ||
90 | if (swaynag.details.message) { | 103 | if (swaynag.details.message) { |
@@ -94,10 +107,10 @@ int main(int argc, char **argv) { | |||
94 | } | 107 | } |
95 | 108 | ||
96 | wlr_log(WLR_DEBUG, "Output: %s", swaynag.output.name); | 109 | wlr_log(WLR_DEBUG, "Output: %s", swaynag.output.name); |
97 | wlr_log(WLR_DEBUG, "Anchors: %d", swaynag.anchors); | 110 | wlr_log(WLR_DEBUG, "Anchors: %d", swaynag.type->anchors); |
98 | wlr_log(WLR_DEBUG, "Type: %s", swaynag.type->name); | 111 | wlr_log(WLR_DEBUG, "Type: %s", swaynag.type->name); |
99 | wlr_log(WLR_DEBUG, "Message: %s", swaynag.message); | 112 | wlr_log(WLR_DEBUG, "Message: %s", swaynag.message); |
100 | wlr_log(WLR_DEBUG, "Font: %s", swaynag.font); | 113 | wlr_log(WLR_DEBUG, "Font: %s", swaynag.type->font); |
101 | wlr_log(WLR_DEBUG, "Buttons"); | 114 | wlr_log(WLR_DEBUG, "Buttons"); |
102 | for (int i = 0; i < swaynag.buttons->length; i++) { | 115 | for (int i = 0; i < swaynag.buttons->length; i++) { |
103 | struct swaynag_button *button = swaynag.buttons->items[i]; | 116 | struct swaynag_button *button = swaynag.buttons->items[i]; |