#ifndef _SWAYBAR_STATUS_LINE_H #define _SWAYBAR_STATUS_LINE_H #include #include #include #include "bar.h" enum status_protocol { PROTOCOL_UNDEF, PROTOCOL_ERROR, PROTOCOL_TEXT, PROTOCOL_I3BAR, }; struct text_protocol_state { char *buffer; size_t buffer_size; }; 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 i3bar_block { struct wl_list link; char *full_text, *short_text, *align; bool urgent; uint32_t *color; int min_width; char *name, *instance; bool separator; int separator_block_width; bool markup; // Airblader features uint32_t background; uint32_t border; int border_top; int border_bottom; int border_left; int border_right; }; struct status_line { pid_t pid; int read_fd, write_fd; FILE *read, *write; enum status_protocol protocol; const char *text; struct wl_list blocks; // i3bar_block::link struct text_protocol_state text_state; struct i3bar_protocol_state i3bar_state; }; 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