From 2eaef802061836dd83bbf753174fcb8488b2d8cd Mon Sep 17 00:00:00 2001
From: Ian Fan <ianfan0@gmail.com>
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