diff options
Diffstat (limited to 'swaybar/bar.c')
-rw-r--r-- | swaybar/bar.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/swaybar/bar.c b/swaybar/bar.c index 90fd5ad4..72c4be8f 100644 --- a/swaybar/bar.c +++ b/swaybar/bar.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include "swaybar/render.h" | 13 | #include "swaybar/render.h" |
14 | #include "swaybar/config.h" | 14 | #include "swaybar/config.h" |
15 | #include "swaybar/event_loop.h" | 15 | #include "swaybar/event_loop.h" |
16 | #include "swaybar/status_line.h" | ||
16 | #include "swaybar/bar.h" | 17 | #include "swaybar/bar.h" |
17 | #include "swaybar/ipc.h" | 18 | #include "swaybar/ipc.h" |
18 | #include "ipc-client.h" | 19 | #include "ipc-client.h" |
@@ -98,6 +99,9 @@ void bar_setup(struct swaybar *bar, | |||
98 | bar->ipc_socketfd = ipc_open_socket(socket_path); | 99 | bar->ipc_socketfd = ipc_open_socket(socket_path); |
99 | bar->ipc_event_socketfd = ipc_open_socket(socket_path); | 100 | bar->ipc_event_socketfd = ipc_open_socket(socket_path); |
100 | ipc_initialize(bar, bar_id); | 101 | ipc_initialize(bar, bar_id); |
102 | if (bar->config->status_command) { | ||
103 | bar->status = status_line_init(bar->config->status_command); | ||
104 | } | ||
101 | 105 | ||
102 | assert(bar->display = wl_display_connect(NULL)); | 106 | assert(bar->display = wl_display_connect(NULL)); |
103 | 107 | ||
@@ -134,6 +138,13 @@ void bar_setup(struct swaybar *bar, | |||
134 | } | 138 | } |
135 | } | 139 | } |
136 | 140 | ||
141 | static void render_all_frames(struct swaybar *bar) { | ||
142 | struct swaybar_output *output; | ||
143 | wl_list_for_each(output, &bar->outputs, link) { | ||
144 | render_frame(bar, output); | ||
145 | } | ||
146 | } | ||
147 | |||
137 | static void display_in(int fd, short mask, void *_bar) { | 148 | static void display_in(int fd, short mask, void *_bar) { |
138 | struct swaybar *bar = (struct swaybar *)_bar; | 149 | struct swaybar *bar = (struct swaybar *)_bar; |
139 | if (wl_display_dispatch(bar->display) == -1) { | 150 | if (wl_display_dispatch(bar->display) == -1) { |
@@ -144,16 +155,23 @@ static void display_in(int fd, short mask, void *_bar) { | |||
144 | static void ipc_in(int fd, short mask, void *_bar) { | 155 | static void ipc_in(int fd, short mask, void *_bar) { |
145 | struct swaybar *bar = (struct swaybar *)_bar; | 156 | struct swaybar *bar = (struct swaybar *)_bar; |
146 | if (handle_ipc_event(bar)) { | 157 | if (handle_ipc_event(bar)) { |
147 | struct swaybar_output *output; | 158 | render_all_frames(bar); |
148 | wl_list_for_each(output, &bar->outputs, link) { | 159 | } |
149 | render_frame(bar, output); | 160 | } |
150 | } | 161 | |
162 | static void status_in(int fd, short mask, void *_bar) { | ||
163 | struct swaybar *bar = (struct swaybar *)_bar; | ||
164 | if (handle_status_readable(bar->status)) { | ||
165 | render_all_frames(bar); | ||
151 | } | 166 | } |
152 | } | 167 | } |
153 | 168 | ||
154 | void bar_run(struct swaybar *bar) { | 169 | void bar_run(struct swaybar *bar) { |
155 | add_event(wl_display_get_fd(bar->display), POLLIN, display_in, bar); | 170 | add_event(wl_display_get_fd(bar->display), POLLIN, display_in, bar); |
156 | add_event(bar->ipc_event_socketfd, POLLIN, ipc_in, bar); | 171 | add_event(bar->ipc_event_socketfd, POLLIN, ipc_in, bar); |
172 | if (bar->status) { | ||
173 | add_event(bar->status->read_fd, POLLIN, status_in, bar); | ||
174 | } | ||
157 | while (1) { | 175 | while (1) { |
158 | event_loop_poll(); | 176 | event_loop_poll(); |
159 | } | 177 | } |