aboutsummaryrefslogtreecommitdiff
path: root/include/bar
diff options
context:
space:
mode:
Diffstat (limited to 'include/bar')
-rw-r--r--include/bar/bar.h55
-rw-r--r--include/bar/config.h69
-rw-r--r--include/bar/ipc.h17
-rw-r--r--include/bar/render.h17
-rw-r--r--include/bar/status_line.h50
5 files changed, 208 insertions, 0 deletions
diff --git a/include/bar/bar.h b/include/bar/bar.h
new file mode 100644
index 00000000..89496da6
--- /dev/null
+++ b/include/bar/bar.h
@@ -0,0 +1,55 @@
+#ifndef _SWAYBAR_BAR_H
+#define _SWAYBAR_BAR_H
+
+#include "client/registry.h"
+#include "client/window.h"
+#include "list.h"
+
+struct bar {
+ struct config *config;
+ struct status_line *status;
+ struct output *output;
+ /* list_t *outputs; */
+
+ int ipc_event_socketfd;
+ int ipc_socketfd;
+ int status_read_fd;
+ pid_t status_command_pid;
+};
+
+struct output {
+ struct window *window;
+ struct registry *registry;
+ list_t *workspaces;
+ char *name;
+};
+
+struct workspace {
+ int num;
+ char *name;
+ bool focused;
+ bool visible;
+ bool urgent;
+};
+
+/**
+ * Setup bar.
+ */
+void bar_setup(struct bar *bar, const char *socket_path, const char *bar_id, int desired_output);
+
+/**
+ * Bar mainloop.
+ */
+void bar_run(struct bar *bar);
+
+/**
+ * free workspace list.
+ */
+void free_workspaces(list_t *workspaces);
+
+/**
+ * Teardown bar.
+ */
+void bar_teardown(struct bar *bar);
+
+#endif /* _SWAYBAR_BAR_H */
diff --git a/include/bar/config.h b/include/bar/config.h
new file mode 100644
index 00000000..508b9c42
--- /dev/null
+++ b/include/bar/config.h
@@ -0,0 +1,69 @@
+#ifndef _SWAYBAR_CONFIG_H
+#define _SWAYBAR_CONFIG_H
+
+#include <stdint.h>
+#include <stdbool.h>
+
+/**
+ * Colors for a box with background, border and text colors.
+ */
+struct box_colors {
+ uint32_t border;
+ uint32_t background;
+ uint32_t text;
+};
+
+/**
+ * Swaybar config.
+ */
+struct config {
+ char *status_command;
+ uint32_t position;
+ char *font;
+ char *sep_symbol;
+ char *mode;
+ bool strip_workspace_numbers;
+ bool binding_mode_indicator;
+ bool workspace_buttons;
+
+ int height;
+
+ struct {
+ uint32_t background;
+ uint32_t statusline;
+ uint32_t separator;
+
+ struct box_colors focused_workspace;
+ struct box_colors active_workspace;
+ struct box_colors inactive_workspace;
+ struct box_colors urgent_workspace;
+ struct box_colors binding_mode;
+ } colors;
+};
+
+/**
+ * Parse colors defined as hex string to uint32_t.
+ */
+uint32_t parse_color(const char *color);
+
+/**
+ * Parse position top|bottom|left|right.
+ */
+uint32_t parse_position(const char *position);
+
+/**
+ * Parse font.
+ */
+char *parse_font(const char *font);
+
+/**
+ * Initialize default sway config.
+ */
+struct config *init_config();
+
+/**
+ * Free config struct.
+ */
+void free_config(struct config *config);
+
+#endif /* _SWAYBAR_CONFIG_H */
diff --git a/include/bar/ipc.h b/include/bar/ipc.h
new file mode 100644
index 00000000..c3f661f8
--- /dev/null
+++ b/include/bar/ipc.h
@@ -0,0 +1,17 @@
+#ifndef _SWAYBAR_IPC_H
+#define _SWAYBAR_IPC_H
+
+#include "bar.h"
+
+/**
+ * Initialize ipc connection to sway and get sway state, outputs, bar_config.
+ */
+void ipc_bar_init(struct bar *bar, int outputi, const char *bar_id);
+
+/**
+ * Handle ipc event from sway.
+ */
+bool handle_ipc_event(struct bar *bar);
+
+#endif /* _SWAYBAR_IPC_H */
+
diff --git a/include/bar/render.h b/include/bar/render.h
new file mode 100644
index 00000000..931a1cdd
--- /dev/null
+++ b/include/bar/render.h
@@ -0,0 +1,17 @@
+#ifndef _SWAYBAR_RENDER_H
+#define _SWAYBAR_RENDER_H
+
+#include "config.h"
+#include "bar.h"
+
+/**
+ * Render swaybar.
+ */
+void render(struct output *output, struct config *config, struct status_line *line);
+
+/**
+ * Set window height and modify internal spacing accordingly.
+ */
+void set_window_height(struct window *window, int height);
+
+#endif /* _SWAYBAR_RENDER_H */
diff --git a/include/bar/status_line.h b/include/bar/status_line.h
new file mode 100644
index 00000000..273542dc
--- /dev/null
+++ b/include/bar/status_line.h
@@ -0,0 +1,50 @@
+#ifndef _SWAYBAR_STATUS_LINE_H
+#define _SWAYBAR_STATUS_LINE_H
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include "list.h"
+#include "bar.h"
+
+typedef enum {UNDEF, TEXT, I3BAR} command_protocol;
+
+struct status_line {
+ list_t *block_line;
+ const char *text_line;
+ command_protocol protocol;
+};
+
+struct status_block {
+ char *full_text, *short_text, *align;
+ bool urgent;
+ uint32_t color;
+ int min_width;
+ char *name, *instance;
+ bool separator;
+ int separator_block_width;
+ // Airblader features
+ uint32_t background;
+ uint32_t border;
+ int border_top;
+ int border_bottom;
+ int border_left;
+ int border_right;
+};
+
+/**
+ * Initialize status line struct.
+ */
+struct status_line *init_status_line();
+
+/**
+ * handle status line activity.
+ */
+bool handle_status_line(struct bar *bar);
+
+/**
+ * Free status line struct.
+ */
+void free_status_line(struct status_line *line);
+
+#endif /* _SWAYBAR_STATUS_LINE_H */