aboutsummaryrefslogtreecommitdiff
path: root/include/swaybar/status_line.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/swaybar/status_line.h')
-rw-r--r--include/swaybar/status_line.h78
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