aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar/bar.c
diff options
context:
space:
mode:
authorLibravatar Drew DeVault <sir@cmpwn.com>2018-03-29 15:16:12 -0400
committerLibravatar Drew DeVault <sir@cmpwn.com>2018-03-29 22:11:08 -0400
commit0d0ab7c5ce148bce841fa0682d04bc7b6c21b902 (patch)
treebc3dcefa0e306ac00d81a0cabbd6a0404d7baff6 /swaybar/bar.c
parentIterate over workspaces backwards (diff)
downloadsway-0d0ab7c5ce148bce841fa0682d04bc7b6c21b902.tar.gz
sway-0d0ab7c5ce148bce841fa0682d04bc7b6c21b902.tar.zst
sway-0d0ab7c5ce148bce841fa0682d04bc7b6c21b902.zip
Implement status line
Does not yet support i3bar json protocol
Diffstat (limited to 'swaybar/bar.c')
-rw-r--r--swaybar/bar.c26
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
141static 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
137static void display_in(int fd, short mask, void *_bar) { 148static 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) {
144static void ipc_in(int fd, short mask, void *_bar) { 155static 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
162static 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
154void bar_run(struct swaybar *bar) { 169void 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 }