From 63b4bf500020cf35cebfdce2d73f8e359ff495c2 Mon Sep 17 00:00:00 2001 From: emersion Date: Mon, 9 Jul 2018 22:54:30 +0100 Subject: Update for swaywm/wlroots#1126 --- swaybar/bar.c | 2 +- swaybar/i3bar.c | 4 ++-- swaybar/ipc.c | 4 ++-- swaybar/main.c | 8 ++++---- swaybar/status_line.c | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) (limited to 'swaybar') diff --git a/swaybar/bar.c b/swaybar/bar.c index 5b8028e5..f03c5aea 100644 --- a/swaybar/bar.c +++ b/swaybar/bar.c @@ -46,7 +46,7 @@ static void swaybar_output_free(struct swaybar_output *output) { if (!output) { return; } - wlr_log(L_DEBUG, "Removing output %s", output->name); + wlr_log(WLR_DEBUG, "Removing output %s", output->name); zwlr_layer_surface_v1_destroy(output->layer_surface); wl_surface_destroy(output->surface); wl_output_destroy(output->output); diff --git a/swaybar/i3bar.c b/swaybar/i3bar.c index 141612a6..26f073c8 100644 --- a/swaybar/i3bar.c +++ b/swaybar/i3bar.c @@ -31,7 +31,7 @@ static bool i3bar_parse_json(struct status_line *status, const char *text) { status_error(status, "[failed to parse i3bar json]"); return false; } - wlr_log(L_DEBUG, "Got i3bar json: '%s'", text); + wlr_log(WLR_DEBUG, "Got i3bar json: '%s'", text); for (size_t i = 0; i < json_object_array_length(results); ++i) { json_object *full_text, *short_text, *color, *min_width, *align, *urgent; json_object *name, *instance, *separator, *separator_block_width; @@ -193,7 +193,7 @@ bool i3bar_handle_readable(struct status_line *status) { void i3bar_block_send_click(struct status_line *status, struct i3bar_block *block, int x, int y, uint32_t button) { - wlr_log(L_DEBUG, "block %s clicked", block->name ? block->name : "(nil)"); + wlr_log(WLR_DEBUG, "block %s clicked", block->name ? block->name : "(nil)"); if (!block->name || !status->i3bar_state.click_events) { return; } diff --git a/swaybar/ipc.c b/swaybar/ipc.c index 959fa095..08531f2a 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c @@ -327,7 +327,7 @@ bool handle_ipc_readable(struct swaybar *bar) { json_object *result = json_tokener_parse(resp->payload); if (!result) { free_ipc_response(resp); - wlr_log(L_ERROR, "failed to parse payload as json"); + wlr_log(WLR_ERROR, "failed to parse payload as json"); return false; } json_object *json_change, *json_pango_markup; @@ -340,7 +340,7 @@ bool handle_ipc_readable(struct swaybar *bar) { bar->config->mode = strdup(change); } } else { - wlr_log(L_ERROR, "failed to parse response"); + wlr_log(WLR_ERROR, "failed to parse response"); json_object_put(result); free_ipc_response(resp); return false; diff --git a/swaybar/main.c b/swaybar/main.c index c897e1c9..60e4b37c 100644 --- a/swaybar/main.c +++ b/swaybar/main.c @@ -75,13 +75,13 @@ int main(int argc, char **argv) { } if (debug) { - wlr_log_init(L_DEBUG, NULL); + wlr_log_init(WLR_DEBUG, NULL); } else { - wlr_log_init(L_ERROR, NULL); + wlr_log_init(WLR_ERROR, NULL); } if (!bar_id) { - wlr_log(L_ERROR, "No bar_id passed. " + wlr_log(WLR_ERROR, "No bar_id passed. " "Provide --bar_id or let sway start swaybar"); return 1; } @@ -89,7 +89,7 @@ int main(int argc, char **argv) { if (!socket_path) { socket_path = get_socketpath(); if (!socket_path) { - wlr_log(L_ERROR, "Unable to retrieve socket path"); + wlr_log(WLR_ERROR, "Unable to retrieve socket path"); return 1; } } diff --git a/swaybar/status_line.c b/swaybar/status_line.c index e0e7414a..bc47580b 100644 --- a/swaybar/status_line.c +++ b/swaybar/status_line.c @@ -49,14 +49,14 @@ bool status_handle_readable(struct status_line *status) { json_object *version; if (json_object_object_get_ex(proto, "version", &version) && json_object_get_int(version) == 1) { - wlr_log(L_DEBUG, "Switched to i3bar protocol."); + wlr_log(WLR_DEBUG, "Switched to i3bar protocol."); status->protocol = PROTOCOL_I3BAR; } json_object *click_events; if (json_object_object_get_ex( proto, "click_events", &click_events) && json_object_get_boolean(click_events)) { - wlr_log(L_DEBUG, "Enabled click events."); + wlr_log(WLR_DEBUG, "Enabled click events."); status->i3bar_state.click_events = true; const char *events_array = "[\n"; ssize_t len = strlen(events_array); @@ -91,7 +91,7 @@ struct status_line *status_line_init(char *cmd) { int pipe_read_fd[2]; int pipe_write_fd[2]; if (pipe(pipe_read_fd) != 0 || pipe(pipe_write_fd) != 0) { - wlr_log(L_ERROR, "Unable to create pipes for status_command fork"); + wlr_log(WLR_ERROR, "Unable to create pipes for status_command fork"); exit(1); } -- cgit v1.2.3-70-g09d2 From c73a40555f41ad765c10ea5912525c56770e71d1 Mon Sep 17 00:00:00 2001 From: minus Date: Sat, 14 Jul 2018 00:01:43 +0200 Subject: swaybar/bg: Fix crash on DPMS off When turning off displays via DPMS, swaybar and swaybg still tried to render, but did not get a valid buffer, causing them to crash. --- swaybar/render.c | 3 +++ swaybg/main.c | 3 +++ 2 files changed, 6 insertions(+) (limited to 'swaybar') diff --git a/swaybar/render.c b/swaybar/render.c index 2ebd338e..909b56f4 100644 --- a/swaybar/render.c +++ b/swaybar/render.c @@ -503,6 +503,9 @@ void render_frame(struct swaybar *bar, struct swaybar_output *output) { output->buffers, output->width * output->scale, output->height * output->scale); + if (!output->current_buffer) { + return; + } cairo_t *shm = output->current_buffer->cairo; cairo_save(shm); diff --git a/swaybg/main.c b/swaybg/main.c index 1796b245..f8e7e7ef 100644 --- a/swaybg/main.c +++ b/swaybg/main.c @@ -68,6 +68,9 @@ static void render_frame(struct swaybg_state *state) { buffer_height = state->height * state->scale; state->current_buffer = get_next_buffer(state->shm, state->buffers, buffer_width, buffer_height); + if (!state->current_buffer) { + return; + } cairo_t *cairo = state->current_buffer->cairo; if (state->args->mode == BACKGROUND_MODE_SOLID_COLOR) { cairo_set_source_u32(cairo, state->context.color); -- cgit v1.2.3-70-g09d2 From 255dc8bbb040c4f268f318bde86701227d82da3f Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Tue, 17 Jul 2018 08:29:43 +1000 Subject: swaybar: Read urgent colors from IPC --- swaybar/ipc.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'swaybar') diff --git a/swaybar/ipc.c b/swaybar/ipc.c index 08531f2a..c2d05920 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c @@ -115,6 +115,18 @@ static void ipc_parse_colors( 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)); -- cgit v1.2.3-70-g09d2 From 79a998849b8cedc9fccddfb31e4d1c99d1c17ff7 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Sun, 15 Jul 2018 20:16:37 -0400 Subject: make hotspot callback take an x11 button id --- include/swaybar/bar.h | 15 ++++++++++++++- include/swaybar/status_line.h | 4 +++- swaybar/bar.c | 2 +- swaybar/i3bar.c | 32 +++++++++++++++++++++++++++++++- swaybar/render.c | 4 ++-- 5 files changed, 51 insertions(+), 6 deletions(-) (limited to 'swaybar') diff --git a/include/swaybar/bar.h b/include/swaybar/bar.h index af478f33..f1ff25b2 100644 --- a/include/swaybar/bar.h +++ b/include/swaybar/bar.h @@ -16,11 +16,24 @@ struct swaybar_pointer { int x, y; }; +enum x11_button { + NONE, + LEFT, + MIDDLE, + RIGHT, + SCROLL_UP, + SCROLL_DOWN, + SCROLL_LEFT, + SCROLL_RIGHT, + BACK, + FORWARD, +}; + struct swaybar_hotspot { struct wl_list link; int x, y, width, height; void (*callback)(struct swaybar_output *output, - int x, int y, uint32_t button, void *data); + int x, int y, enum x11_button button, void *data); void (*destroy)(void *data); void *data; }; diff --git a/include/swaybar/status_line.h b/include/swaybar/status_line.h index bf12a842..2eaf8140 100644 --- a/include/swaybar/status_line.h +++ b/include/swaybar/status_line.h @@ -72,7 +72,9 @@ bool status_handle_readable(struct status_line *status); void status_line_free(struct status_line *status); bool i3bar_handle_readable(struct status_line *status); void i3bar_block_send_click(struct status_line *status, - struct i3bar_block *block, int x, int y, uint32_t button); + struct i3bar_block *block, int x, int y, enum x11_button button); void i3bar_block_free(struct i3bar_block *block); +enum x11_button wl_button_to_x11_button(uint32_t button); +enum x11_button wl_axis_to_x11_button(uint32_t axis, wl_fixed_t value); #endif diff --git a/swaybar/bar.c b/swaybar/bar.c index f03c5aea..1186d1e5 100644 --- a/swaybar/bar.c +++ b/swaybar/bar.c @@ -147,7 +147,7 @@ static void wl_pointer_button(void *data, struct wl_pointer *wl_pointer, && x < hotspot->x + hotspot->width && y < hotspot->y + hotspot->height) { hotspot->callback(output, pointer->x, pointer->y, - button, hotspot->data); + wl_button_to_x11_button(button), hotspot->data); } } } diff --git a/swaybar/i3bar.c b/swaybar/i3bar.c index 26f073c8..a615fb27 100644 --- a/swaybar/i3bar.c +++ b/swaybar/i3bar.c @@ -1,5 +1,6 @@ #define _POSIX_C_SOURCE 200809L #include +#include #include #include #include @@ -192,7 +193,7 @@ bool i3bar_handle_readable(struct status_line *status) { } void i3bar_block_send_click(struct status_line *status, - struct i3bar_block *block, int x, int y, uint32_t button) { + struct i3bar_block *block, int x, int y, enum x11_button button) { wlr_log(WLR_DEBUG, "block %s clicked", block->name ? block->name : "(nil)"); if (!block->name || !status->i3bar_state.click_events) { return; @@ -215,3 +216,32 @@ void i3bar_block_send_click(struct status_line *status, } json_object_put(event_json); } + +enum x11_button wl_button_to_x11_button(uint32_t button) { + switch (button) { + case (BTN_LEFT): + return LEFT; + case (BTN_MIDDLE): + return MIDDLE; + case (BTN_RIGHT): + return RIGHT; + case (BTN_SIDE): + return BACK; + case (BTN_EXTRA): + return FORWARD; + default: + return NONE; + } +} + +enum x11_button wl_axis_to_x11_button(uint32_t axis, wl_fixed_t value) { + switch (axis) { + case WL_POINTER_AXIS_VERTICAL_SCROLL: + return wl_fixed_to_double(value) < 0 ? SCROLL_UP : SCROLL_DOWN; + case WL_POINTER_AXIS_HORIZONTAL_SCROLL: + return wl_fixed_to_double(value) < 0 ? SCROLL_LEFT : SCROLL_RIGHT; + default: + wlr_log(WLR_DEBUG, "Unexpected axis value on mouse scroll"); + return NONE; + } +} diff --git a/swaybar/render.c b/swaybar/render.c index 909b56f4..d210e25a 100644 --- a/swaybar/render.c +++ b/swaybar/render.c @@ -109,7 +109,7 @@ static void render_sharp_line(cairo_t *cairo, uint32_t color, } static void block_hotspot_callback(struct swaybar_output *output, - int x, int y, uint32_t button, void *data) { + int x, int y, enum x11_button button, void *data) { struct i3bar_block *block = data; struct status_line *status = output->bar->status; i3bar_block_send_click(status, block, x, y, button); @@ -349,7 +349,7 @@ static const char *strip_workspace_number(const char *ws_name) { } static void workspace_hotspot_callback(struct swaybar_output *output, - int x, int y, uint32_t button, void *data) { + int x, int y, enum x11_button button, void *data) { ipc_send_workspace_command(output->bar, (const char *)data); } -- cgit v1.2.3-70-g09d2 From 14511da75da11aeef6427aed7fe170076649a957 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Sun, 15 Jul 2018 21:57:17 -0400 Subject: send scroll events to swaybar blocks --- swaybar/bar.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'swaybar') diff --git a/swaybar/bar.c b/swaybar/bar.c index 1186d1e5..94bc48bc 100644 --- a/swaybar/bar.c +++ b/swaybar/bar.c @@ -155,11 +155,26 @@ static void wl_pointer_button(void *data, struct wl_pointer *wl_pointer, static void wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, uint32_t time, uint32_t axis, wl_fixed_t value) { struct swaybar *bar = data; + struct swaybar_pointer *pointer = &bar->pointer; struct swaybar_output *output = bar->pointer.current; if (!sway_assert(output, "axis with no active output")) { return; } + struct swaybar_hotspot *hotspot; + wl_list_for_each(hotspot, &output->hotspots, link) { + double x = pointer->x * output->scale; + double y = pointer->y * output->scale; + if (x >= hotspot->x + && y >= hotspot->y + && x < hotspot->x + hotspot->width + && y < hotspot->y + hotspot->height) { + hotspot->callback(output, pointer->x, pointer->y, + wl_axis_to_x11_button(axis, value), hotspot->data); + return; + } + } + double amt = wl_fixed_to_double(value); if (amt == 0.0) { return; -- cgit v1.2.3-70-g09d2 From e43c20134ab48ab36391443860cbdf4ac67d8348 Mon Sep 17 00:00:00 2001 From: Peter Rice Date: Tue, 17 Jul 2018 19:00:38 -0400 Subject: remove unnecessary parens --- swaybar/i3bar.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'swaybar') diff --git a/swaybar/i3bar.c b/swaybar/i3bar.c index a615fb27..78b183ad 100644 --- a/swaybar/i3bar.c +++ b/swaybar/i3bar.c @@ -219,15 +219,15 @@ void i3bar_block_send_click(struct status_line *status, enum x11_button wl_button_to_x11_button(uint32_t button) { switch (button) { - case (BTN_LEFT): + case BTN_LEFT: return LEFT; - case (BTN_MIDDLE): + case BTN_MIDDLE: return MIDDLE; - case (BTN_RIGHT): + case BTN_RIGHT: return RIGHT; - case (BTN_SIDE): + case BTN_SIDE: return BACK; - case (BTN_EXTRA): + case BTN_EXTRA: return FORWARD; default: return NONE; -- cgit v1.2.3-70-g09d2