diff options
Diffstat (limited to 'include/swaybar/status_line.h')
-rw-r--r-- | include/swaybar/status_line.h | 78 |
1 files changed, 47 insertions, 31 deletions
diff --git a/include/swaybar/status_line.h b/include/swaybar/status_line.h index 0664ddee..3538f49c 100644 --- a/include/swaybar/status_line.h +++ b/include/swaybar/status_line.h @@ -1,25 +1,44 @@ #ifndef _SWAYBAR_STATUS_LINE_H #define _SWAYBAR_STATUS_LINE_H - #include <stdint.h> +#include <stdio.h> #include <stdbool.h> - -#include "list.h" #include "bar.h" -typedef enum {UNDEF, TEXT, I3BAR} command_protocol; +enum status_protocol { + PROTOCOL_UNDEF, + PROTOCOL_ERROR, + PROTOCOL_TEXT, + PROTOCOL_I3BAR, +}; + +struct text_protocol_state { + char *buffer; + size_t buffer_size; +}; -struct status_line { - list_t *block_line; - const char *text_line; - command_protocol protocol; +enum json_node_type { + JSON_NODE_UNKNOWN, + JSON_NODE_ARRAY, + JSON_NODE_STRING, +}; + +struct i3bar_protocol_state { bool click_events; + char *buffer; + size_t buffer_size; + size_t buffer_index; + const char *current_node; + bool escape; + size_t depth; + enum json_node_type nodes[16]; }; -struct status_block { +struct i3bar_block { + struct wl_list link; char *full_text, *short_text, *align; bool urgent; - uint32_t color; + uint32_t *color; int min_width; char *name, *instance; bool separator; @@ -32,30 +51,27 @@ struct status_block { int border_bottom; int border_left; int border_right; - - // Set during rendering - int x; - int width; }; -/** - * Initialize status line struct. - */ -struct status_line *init_status_line(); +struct status_line { + pid_t pid; + int read_fd, write_fd; + FILE *read, *write; -/** - * handle status line activity. - */ -bool handle_status_line(struct bar *bar); + enum status_protocol protocol; + const char *text; + struct wl_list blocks; // i3bar_block::link -/** - * Handle mouse clicks. - */ -bool status_line_mouse_event(struct bar *bar, int x, int y, uint32_t button); + struct text_protocol_state text_state; + struct i3bar_protocol_state i3bar_state; +}; -/** - * Free status line struct. - */ -void free_status_line(struct status_line *line); +struct status_line *status_line_init(char *cmd); +void status_error(struct status_line *status, const char *text); +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); -#endif /* _SWAYBAR_STATUS_LINE_H */ +#endif |