aboutsummaryrefslogtreecommitdiff
path: root/sway/config/bar.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/config/bar.c')
-rw-r--r--sway/config/bar.c143
1 files changed, 143 insertions, 0 deletions
diff --git a/sway/config/bar.c b/sway/config/bar.c
new file mode 100644
index 00000000..ecc357d0
--- /dev/null
+++ b/sway/config/bar.c
@@ -0,0 +1,143 @@
+#define _POSIX_C_SOURCE 200809L
+#define _XOPEN_SOURCE 700
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <wordexp.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <strings.h>
+#include "sway/config.h"
+#include "stringop.h"
+#include "list.h"
+#include "log.h"
+
+void free_bar_config(struct bar_config *bar) {
+ if (!bar) {
+ return;
+ }
+ free(bar->mode);
+ free(bar->position);
+ free(bar->hidden_state);
+ free(bar->status_command);
+ free(bar->font);
+ free(bar->separator_symbol);
+ // TODO: Free mouse bindings
+ list_free(bar->bindings);
+ if (bar->outputs) {
+ free_flat_list(bar->outputs);
+ }
+ if (bar->pid != 0) {
+ // TODO terminate_swaybar(bar->pid);
+ }
+ free(bar->colors.background);
+ free(bar->colors.statusline);
+ free(bar->colors.separator);
+ free(bar->colors.focused_background);
+ free(bar->colors.focused_statusline);
+ free(bar->colors.focused_separator);
+ free(bar->colors.focused_workspace_border);
+ free(bar->colors.focused_workspace_bg);
+ free(bar->colors.focused_workspace_text);
+ free(bar->colors.active_workspace_border);
+ free(bar->colors.active_workspace_bg);
+ free(bar->colors.active_workspace_text);
+ free(bar->colors.inactive_workspace_border);
+ free(bar->colors.inactive_workspace_bg);
+ free(bar->colors.inactive_workspace_text);
+ free(bar->colors.urgent_workspace_border);
+ free(bar->colors.urgent_workspace_bg);
+ free(bar->colors.urgent_workspace_text);
+ free(bar->colors.binding_mode_border);
+ free(bar->colors.binding_mode_bg);
+ free(bar->colors.binding_mode_text);
+ free(bar);
+}
+
+struct bar_config *default_bar_config(void) {
+ struct bar_config *bar = NULL;
+ bar = malloc(sizeof(struct bar_config));
+ if (!bar) {
+ return NULL;
+ }
+ if (!(bar->mode = strdup("dock"))) goto cleanup;
+ if (!(bar->hidden_state = strdup("hide"))) goto cleanup;
+ bar->outputs = NULL;
+ bar->position = strdup("bottom");
+ if (!(bar->bindings = create_list())) goto cleanup;
+ if (!(bar->status_command = strdup("while :; do date +'%Y-%m-%d %l:%M:%S %p'; sleep 1; done"))) goto cleanup;
+ bar->pango_markup = false;
+ bar->swaybar_command = NULL;
+ bar->font = NULL;
+ bar->height = -1;
+ bar->workspace_buttons = true;
+ bar->wrap_scroll = false;
+ bar->separator_symbol = NULL;
+ bar->strip_workspace_numbers = false;
+ bar->binding_mode_indicator = true;
+ bar->verbose = false;
+ bar->pid = 0;
+ // set default colors
+ if (!(bar->colors.background = strndup("#000000ff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.statusline = strndup("#ffffffff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.separator = strndup("#666666ff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.focused_workspace_border = strndup("#4c7899ff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.focused_workspace_bg = strndup("#285577ff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.focused_workspace_text = strndup("#ffffffff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.active_workspace_border = strndup("#333333ff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.active_workspace_bg = strndup("#5f676aff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.active_workspace_text = strndup("#ffffffff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.inactive_workspace_border = strndup("#333333ff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.inactive_workspace_bg = strndup("#222222ff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.inactive_workspace_text = strndup("#888888ff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.urgent_workspace_border = strndup("#2f343aff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.urgent_workspace_bg = strndup("#900000ff", 9))) {
+ goto cleanup;
+ }
+ if (!(bar->colors.urgent_workspace_text = strndup("#ffffffff", 9))) {
+ goto cleanup;
+ }
+ // if the following colors stay undefined, they fall back to background,
+ // statusline, separator and urgent_workspace_*.
+ bar->colors.focused_background = NULL;
+ bar->colors.focused_statusline = NULL;
+ bar->colors.focused_separator = NULL;
+ bar->colors.binding_mode_border = NULL;
+ bar->colors.binding_mode_bg = NULL;
+ bar->colors.binding_mode_text = NULL;
+
+ list_add(config->bars, bar);
+ return bar;
+cleanup:
+ free_bar_config(bar);
+ return NULL;
+}