diff options
Diffstat (limited to 'swaynag')
-rw-r--r-- | swaynag/config.c | 25 | ||||
-rw-r--r-- | swaynag/render.c | 2 | ||||
-rw-r--r-- | swaynag/swaynag.1.scd | 3 | ||||
-rw-r--r-- | swaynag/swaynag.5.scd | 5 | ||||
-rw-r--r-- | swaynag/swaynag.c | 25 | ||||
-rw-r--r-- | swaynag/types.c | 6 |
6 files changed, 51 insertions, 15 deletions
diff --git a/swaynag/config.c b/swaynag/config.c index ca7f4eb2..6db7cce5 100644 --- a/swaynag/config.c +++ b/swaynag/config.c | |||
@@ -51,7 +51,7 @@ int swaynag_parse_options(int argc, char **argv, struct swaynag *swaynag, | |||
51 | TO_PADDING_BTN, | 51 | TO_PADDING_BTN, |
52 | }; | 52 | }; |
53 | 53 | ||
54 | static struct option opts[] = { | 54 | static const struct option opts[] = { |
55 | {"button", required_argument, NULL, 'b'}, | 55 | {"button", required_argument, NULL, 'b'}, |
56 | {"button-no-terminal", required_argument, NULL, 'B'}, | 56 | {"button-no-terminal", required_argument, NULL, 'B'}, |
57 | {"button-dismiss", required_argument, NULL, 'z'}, | 57 | {"button-dismiss", required_argument, NULL, 'z'}, |
@@ -59,6 +59,7 @@ int swaynag_parse_options(int argc, char **argv, struct swaynag *swaynag, | |||
59 | {"config", required_argument, NULL, 'c'}, | 59 | {"config", required_argument, NULL, 'c'}, |
60 | {"debug", no_argument, NULL, 'd'}, | 60 | {"debug", no_argument, NULL, 'd'}, |
61 | {"edge", required_argument, NULL, 'e'}, | 61 | {"edge", required_argument, NULL, 'e'}, |
62 | {"layer", required_argument, NULL, 'y'}, | ||
62 | {"font", required_argument, NULL, 'f'}, | 63 | {"font", required_argument, NULL, 'f'}, |
63 | {"help", no_argument, NULL, 'h'}, | 64 | {"help", no_argument, NULL, 'h'}, |
64 | {"detailed-message", no_argument, NULL, 'l'}, | 65 | {"detailed-message", no_argument, NULL, 'l'}, |
@@ -104,6 +105,8 @@ int swaynag_parse_options(int argc, char **argv, struct swaynag *swaynag, | |||
104 | " -c, --config <path> Path to config file.\n" | 105 | " -c, --config <path> Path to config file.\n" |
105 | " -d, --debug Enable debugging.\n" | 106 | " -d, --debug Enable debugging.\n" |
106 | " -e, --edge top|bottom Set the edge to use.\n" | 107 | " -e, --edge top|bottom Set the edge to use.\n" |
108 | " -y, --layer overlay|top|bottom|background\n" | ||
109 | " Set the layer to use.\n" | ||
107 | " -f, --font <font> Set the font to use.\n" | 110 | " -f, --font <font> Set the font to use.\n" |
108 | " -h, --help Show help message and quit.\n" | 111 | " -h, --help Show help message and quit.\n" |
109 | " -l, --detailed-message Read a detailed message from stdin.\n" | 112 | " -l, --detailed-message Read a detailed message from stdin.\n" |
@@ -133,7 +136,7 @@ int swaynag_parse_options(int argc, char **argv, struct swaynag *swaynag, | |||
133 | 136 | ||
134 | optind = 1; | 137 | optind = 1; |
135 | while (1) { | 138 | while (1) { |
136 | int c = getopt_long(argc, argv, "b:B:z:Z:c:de:f:hlL:m:o:s:t:v", opts, NULL); | 139 | int c = getopt_long(argc, argv, "b:B:z:Z:c:de:y:f:hlL:m:o:s:t:v", opts, NULL); |
137 | if (c == -1) { | 140 | if (c == -1) { |
138 | break; | 141 | break; |
139 | } | 142 | } |
@@ -184,6 +187,24 @@ int swaynag_parse_options(int argc, char **argv, struct swaynag *swaynag, | |||
184 | } | 187 | } |
185 | } | 188 | } |
186 | break; | 189 | break; |
190 | case 'y': // Layer | ||
191 | if (type) { | ||
192 | if (strcmp(optarg, "background") == 0) { | ||
193 | type->layer = ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND; | ||
194 | } else if (strcmp(optarg, "bottom") == 0) { | ||
195 | type->layer = ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM; | ||
196 | } else if (strcmp(optarg, "top") == 0) { | ||
197 | type->layer = ZWLR_LAYER_SHELL_V1_LAYER_TOP; | ||
198 | } else if (strcmp(optarg, "overlay") == 0) { | ||
199 | type->layer = ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY; | ||
200 | } else { | ||
201 | fprintf(stderr, "Invalid layer: %s\n" | ||
202 | "Usage: --layer overlay|top|bottom|background\n", | ||
203 | optarg); | ||
204 | return EXIT_FAILURE; | ||
205 | } | ||
206 | } | ||
207 | break; | ||
187 | case 'f': // Font | 208 | case 'f': // Font |
188 | if (type) { | 209 | if (type) { |
189 | free(type->font); | 210 | free(type->font); |
diff --git a/swaynag/render.c b/swaynag/render.c index cf2cc9e0..2a7f869a 100644 --- a/swaynag/render.c +++ b/swaynag/render.c | |||
@@ -1,5 +1,5 @@ | |||
1 | #include <stdint.h> | 1 | #include <stdint.h> |
2 | #include "cairo.h" | 2 | #include "cairo_util.h" |
3 | #include "log.h" | 3 | #include "log.h" |
4 | #include "pango.h" | 4 | #include "pango.h" |
5 | #include "pool-buffer.h" | 5 | #include "pool-buffer.h" |
diff --git a/swaynag/swaynag.1.scd b/swaynag/swaynag.1.scd index 4a03469e..1cc85db7 100644 --- a/swaynag/swaynag.1.scd +++ b/swaynag/swaynag.1.scd | |||
@@ -48,6 +48,9 @@ _swaynag_ [options...] | |||
48 | *-e, --edge* top|bottom | 48 | *-e, --edge* top|bottom |
49 | Set the edge to use. | 49 | Set the edge to use. |
50 | 50 | ||
51 | *-y, --layer* overlay|top|bottom|background | ||
52 | Set the layer to use. | ||
53 | |||
51 | *-f, --font* <font> | 54 | *-f, --font* <font> |
52 | Set the font to use. | 55 | Set the font to use. |
53 | 56 | ||
diff --git a/swaynag/swaynag.5.scd b/swaynag/swaynag.5.scd index a078a4d7..3c367d0f 100644 --- a/swaynag/swaynag.5.scd +++ b/swaynag/swaynag.5.scd | |||
@@ -53,7 +53,7 @@ The following sizing options can also be set: | |||
53 | *message-padding=<padding>* | 53 | *message-padding=<padding>* |
54 | Set the padding for the message. | 54 | Set the padding for the message. |
55 | 55 | ||
56 | *details-gackground=<color>* | 56 | *details-background=<color>* |
57 | The background color for the details. | 57 | The background color for the details. |
58 | 58 | ||
59 | *details-border-size=<size>* | 59 | *details-border-size=<size>* |
@@ -79,6 +79,9 @@ Additionally, the following options can be assigned a default per-type: | |||
79 | *edge=top|bottom* | 79 | *edge=top|bottom* |
80 | Set the edge to use. | 80 | Set the edge to use. |
81 | 81 | ||
82 | *layer=overlay|top|bottom|background* | ||
83 | Set the layer to use. | ||
84 | |||
82 | *font=<font>* | 85 | *font=<font>* |
83 | Set the font to use. | 86 | Set the font to use. |
84 | 87 | ||
diff --git a/swaynag/swaynag.c b/swaynag/swaynag.c index d9bec368..dd17c0b0 100644 --- a/swaynag/swaynag.c +++ b/swaynag/swaynag.c | |||
@@ -30,8 +30,8 @@ static bool terminal_execute(char *terminal, char *command) { | |||
30 | chmod(fname, S_IRUSR | S_IWUSR | S_IXUSR); | 30 | chmod(fname, S_IRUSR | S_IWUSR | S_IXUSR); |
31 | char *cmd = malloc(sizeof(char) * (strlen(terminal) + strlen(" -e ") + strlen(fname) + 1)); | 31 | char *cmd = malloc(sizeof(char) * (strlen(terminal) + strlen(" -e ") + strlen(fname) + 1)); |
32 | sprintf(cmd, "%s -e %s", terminal, fname); | 32 | sprintf(cmd, "%s -e %s", terminal, fname); |
33 | execl("/bin/sh", "/bin/sh", "-c", cmd, NULL); | 33 | execlp("sh", "sh", "-c", cmd, NULL); |
34 | sway_log_errno(SWAY_ERROR, "Failed to run command, execl() returned."); | 34 | sway_log_errno(SWAY_ERROR, "Failed to run command, execlp() returned."); |
35 | free(cmd); | 35 | free(cmd); |
36 | return false; | 36 | return false; |
37 | } | 37 | } |
@@ -69,8 +69,8 @@ static void swaynag_button_execute(struct swaynag *swaynag, | |||
69 | sway_log(SWAY_DEBUG, | 69 | sway_log(SWAY_DEBUG, |
70 | "$TERMINAL not found. Running directly"); | 70 | "$TERMINAL not found. Running directly"); |
71 | } | 71 | } |
72 | execl("/bin/sh", "/bin/sh", "-c", button->action, NULL); | 72 | execlp("sh", "sh", "-c", button->action, NULL); |
73 | sway_log_errno(SWAY_DEBUG, "execl failed"); | 73 | sway_log_errno(SWAY_DEBUG, "execlp failed"); |
74 | _exit(EXIT_FAILURE); | 74 | _exit(EXIT_FAILURE); |
75 | } | 75 | } |
76 | } | 76 | } |
@@ -103,7 +103,7 @@ static void layer_surface_closed(void *data, | |||
103 | swaynag_destroy(swaynag); | 103 | swaynag_destroy(swaynag); |
104 | } | 104 | } |
105 | 105 | ||
106 | static struct zwlr_layer_surface_v1_listener layer_surface_listener = { | 106 | static const struct zwlr_layer_surface_v1_listener layer_surface_listener = { |
107 | .configure = layer_surface_configure, | 107 | .configure = layer_surface_configure, |
108 | .closed = layer_surface_closed, | 108 | .closed = layer_surface_closed, |
109 | }; | 109 | }; |
@@ -124,7 +124,7 @@ static void surface_enter(void *data, struct wl_surface *surface, | |||
124 | }; | 124 | }; |
125 | } | 125 | } |
126 | 126 | ||
127 | static struct wl_surface_listener surface_listener = { | 127 | static const struct wl_surface_listener surface_listener = { |
128 | .enter = surface_enter, | 128 | .enter = surface_enter, |
129 | .leave = nop, | 129 | .leave = nop, |
130 | }; | 130 | }; |
@@ -178,6 +178,8 @@ static void wl_pointer_enter(void *data, struct wl_pointer *wl_pointer, | |||
178 | wl_fixed_t surface_x, wl_fixed_t surface_y) { | 178 | wl_fixed_t surface_x, wl_fixed_t surface_y) { |
179 | struct swaynag_seat *seat = data; | 179 | struct swaynag_seat *seat = data; |
180 | struct swaynag_pointer *pointer = &seat->pointer; | 180 | struct swaynag_pointer *pointer = &seat->pointer; |
181 | pointer->x = wl_fixed_to_int(surface_x); | ||
182 | pointer->y = wl_fixed_to_int(surface_y); | ||
181 | pointer->serial = serial; | 183 | pointer->serial = serial; |
182 | update_cursor(seat); | 184 | update_cursor(seat); |
183 | } | 185 | } |
@@ -263,7 +265,7 @@ static void wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, | |||
263 | render_frame(swaynag); | 265 | render_frame(swaynag); |
264 | } | 266 | } |
265 | 267 | ||
266 | static struct wl_pointer_listener pointer_listener = { | 268 | static const struct wl_pointer_listener pointer_listener = { |
267 | .enter = wl_pointer_enter, | 269 | .enter = wl_pointer_enter, |
268 | .leave = nop, | 270 | .leave = nop, |
269 | .motion = wl_pointer_motion, | 271 | .motion = wl_pointer_motion, |
@@ -289,7 +291,7 @@ static void seat_handle_capabilities(void *data, struct wl_seat *wl_seat, | |||
289 | } | 291 | } |
290 | } | 292 | } |
291 | 293 | ||
292 | const struct wl_seat_listener seat_listener = { | 294 | static const struct wl_seat_listener seat_listener = { |
293 | .capabilities = seat_handle_capabilities, | 295 | .capabilities = seat_handle_capabilities, |
294 | .name = nop, | 296 | .name = nop, |
295 | }; | 297 | }; |
@@ -305,7 +307,7 @@ static void output_scale(void *data, struct wl_output *output, | |||
305 | } | 307 | } |
306 | } | 308 | } |
307 | 309 | ||
308 | static struct wl_output_listener output_listener = { | 310 | static const struct wl_output_listener output_listener = { |
309 | .geometry = nop, | 311 | .geometry = nop, |
310 | .mode = nop, | 312 | .mode = nop, |
311 | .done = nop, | 313 | .done = nop, |
@@ -327,7 +329,7 @@ static void xdg_output_handle_name(void *data, | |||
327 | swaynag_output->swaynag->querying_outputs--; | 329 | swaynag_output->swaynag->querying_outputs--; |
328 | } | 330 | } |
329 | 331 | ||
330 | static struct zxdg_output_v1_listener xdg_output_listener = { | 332 | static const struct zxdg_output_v1_listener xdg_output_listener = { |
331 | .logical_position = nop, | 333 | .logical_position = nop, |
332 | .logical_size = nop, | 334 | .logical_size = nop, |
333 | .done = nop, | 335 | .done = nop, |
@@ -474,7 +476,8 @@ void swaynag_setup(struct swaynag *swaynag) { | |||
474 | swaynag->layer_surface = zwlr_layer_shell_v1_get_layer_surface( | 476 | swaynag->layer_surface = zwlr_layer_shell_v1_get_layer_surface( |
475 | swaynag->layer_shell, swaynag->surface, | 477 | swaynag->layer_shell, swaynag->surface, |
476 | swaynag->output ? swaynag->output->wl_output : NULL, | 478 | swaynag->output ? swaynag->output->wl_output : NULL, |
477 | ZWLR_LAYER_SHELL_V1_LAYER_TOP, "swaynag"); | 479 | swaynag->type->layer, |
480 | "swaynag"); | ||
478 | assert(swaynag->layer_surface); | 481 | assert(swaynag->layer_surface); |
479 | zwlr_layer_surface_v1_add_listener(swaynag->layer_surface, | 482 | zwlr_layer_surface_v1_add_listener(swaynag->layer_surface, |
480 | &layer_surface_listener, swaynag); | 483 | &layer_surface_listener, swaynag); |
diff --git a/swaynag/types.c b/swaynag/types.c index fa045532..7bef0f87 100644 --- a/swaynag/types.c +++ b/swaynag/types.c | |||
@@ -26,6 +26,7 @@ struct swaynag_type *swaynag_type_new(const char *name) { | |||
26 | type->button_gap_close = -1; | 26 | type->button_gap_close = -1; |
27 | type->button_margin_right = -1; | 27 | type->button_margin_right = -1; |
28 | type->button_padding = -1; | 28 | type->button_padding = -1; |
29 | type->layer = -1; | ||
29 | return type; | 30 | return type; |
30 | } | 31 | } |
31 | 32 | ||
@@ -35,6 +36,7 @@ void swaynag_types_add_default(list_t *types) { | |||
35 | type_defaults->anchors = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | 36 | type_defaults->anchors = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP |
36 | | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | 37 | | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT |
37 | | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; | 38 | | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; |
39 | type_defaults->layer = ZWLR_LAYER_SHELL_V1_LAYER_TOP; | ||
38 | type_defaults->button_background = 0x333333FF; | 40 | type_defaults->button_background = 0x333333FF; |
39 | type_defaults->details_background = 0x333333FF; | 41 | type_defaults->details_background = 0x333333FF; |
40 | type_defaults->background = 0x323232FF; | 42 | type_defaults->background = 0x323232FF; |
@@ -100,6 +102,10 @@ void swaynag_type_merge(struct swaynag_type *dest, struct swaynag_type *src) { | |||
100 | dest->anchors = src->anchors; | 102 | dest->anchors = src->anchors; |
101 | } | 103 | } |
102 | 104 | ||
105 | if (src->layer >= 0) { | ||
106 | dest->layer = src->layer; | ||
107 | } | ||
108 | |||
103 | // Colors | 109 | // Colors |
104 | if (src->button_background > 0) { | 110 | if (src->button_background > 0) { |
105 | dest->button_background = src->button_background; | 111 | dest->button_background = src->button_background; |