From 2eaef802061836dd83bbf753174fcb8488b2d8cd Mon Sep 17 00:00:00 2001 From: Ian Fan Date: Wed, 12 Sep 2018 08:28:28 +0100 Subject: i3bar: count references to blocks This prevents blocks from being destroyed before their hotspots are destroyed, in case it is used for a pending click event that fires between the bar receiving a new status, which destroys the block, and the bar rendering the new status, which destroys the hotspot; this problem can be easily produced by scrolling on a block that immediately causes a new status to be sent, with multiple outputs --- include/swaybar/status_line.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/swaybar/status_line.h b/include/swaybar/status_line.h index de9b98d7..150267cd 100644 --- a/include/swaybar/status_line.h +++ b/include/swaybar/status_line.h @@ -36,6 +36,7 @@ struct i3bar_protocol_state { struct i3bar_block { struct wl_list link; + int ref_count; char *full_text, *short_text, *align; bool urgent; uint32_t *color; @@ -73,7 +74,7 @@ void status_line_free(struct status_line *status); bool i3bar_handle_readable(struct status_line *status); enum hotspot_event_handling i3bar_block_send_click(struct status_line *status, struct i3bar_block *block, int x, int y, enum x11_button button); -void i3bar_block_free(struct i3bar_block *block); +void i3bar_block_unref(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); -- cgit v1.2.3-54-g00ecf