summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/config.h6
-rw-r--r--sway/commands.c76
-rw-r--r--sway/config.c33
3 files changed, 83 insertions, 32 deletions
diff --git a/include/config.h b/include/config.h
index 0fc8202c..5bb7107a 100644
--- a/include/config.h
+++ b/include/config.h
@@ -125,7 +125,6 @@ struct sway_config {
125 list_t *output_configs; 125 list_t *output_configs;
126 list_t *criteria; 126 list_t *criteria;
127 struct sway_mode *current_mode; 127 struct sway_mode *current_mode;
128 struct bar_config bar;
129 struct bar_config *current_bar; 128 struct bar_config *current_bar;
130 uint32_t floating_mod; 129 uint32_t floating_mod;
131 uint32_t dragging_key; 130 uint32_t dragging_key;
@@ -177,6 +176,11 @@ int sway_mouse_binding_cmp_buttons(const void *a, const void *b);
177void free_sway_mouse_binding(struct sway_mouse_binding *smb); 176void free_sway_mouse_binding(struct sway_mouse_binding *smb);
178 177
179/** 178/**
179 * Allocate and initialize default bar configuration.
180 */
181struct bar_config *default_bar_config(void);
182
183/**
180 * Global config singleton. 184 * Global config singleton.
181 */ 185 */
182extern struct sway_config *config; 186extern struct sway_config *config;
diff --git a/sway/commands.c b/sway/commands.c
index 053f40fc..f6c3b094 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -67,9 +67,11 @@ static sway_cmd cmd_ws_auto_back_and_forth;
67 67
68static sway_cmd bar_cmd_bindsym; 68static sway_cmd bar_cmd_bindsym;
69static sway_cmd bar_cmd_mode; 69static sway_cmd bar_cmd_mode;
70static sway_cmd bar_cmd_modifier;
70static sway_cmd bar_cmd_hidden_state; 71static sway_cmd bar_cmd_hidden_state;
71static sway_cmd bar_cmd_id; 72static sway_cmd bar_cmd_id;
72static sway_cmd bar_cmd_position; 73static sway_cmd bar_cmd_position;
74static sway_cmd bar_cmd_status_command;
73static sway_cmd bar_cmd_strip_workspace_numbers; 75static sway_cmd bar_cmd_strip_workspace_numbers;
74static sway_cmd bar_cmd_tray_output; 76static sway_cmd bar_cmd_tray_output;
75static sway_cmd bar_cmd_tray_padding; 77static sway_cmd bar_cmd_tray_padding;
@@ -1126,22 +1128,8 @@ static struct cmd_results *cmd_bar(int argc, char **argv) {
1126 return cmd_results_new(CMD_FAILURE, "bar", "Can only be used in config file."); 1128 return cmd_results_new(CMD_FAILURE, "bar", "Can only be used in config file.");
1127 } 1129 }
1128 1130
1129 // Create new bar from default bar config 1131 // Create new bar with default values
1130 struct bar_config *bar = NULL; 1132 struct bar_config *bar = default_bar_config();
1131 bar = malloc(sizeof*bar);
1132 bar->mode = strdup(config->bar.mode);
1133 bar->hidden_state = strdup(config->bar.hidden_state);
1134 bar->modifier = config->bar.modifier;
1135 bar->position = config->bar.position;
1136 bar->bindings = create_list();
1137 bar->status_command = strdup(config->bar.status_command);
1138 bar->font = strdup(config->bar.font);
1139 bar->bar_height = config->bar.bar_height;
1140 bar->workspace_buttons = config->bar.workspace_buttons;
1141 bar->strip_workspace_numbers = config->bar.strip_workspace_numbers;
1142 bar->binding_mode_indicator = config->bar.binding_mode_indicator;
1143 bar->tray_padding = config->bar.tray_padding;
1144 list_add(config->bars, bar);
1145 1133
1146 // set bar id 1134 // set bar id
1147 int i; 1135 int i;
@@ -1658,6 +1646,41 @@ static struct cmd_results *bar_cmd_id(int argc, char **argv) {
1658 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 1646 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
1659} 1647}
1660 1648
1649static struct cmd_results *bar_cmd_modifier(int argc, char **argv) {
1650 struct cmd_results *error = NULL;
1651 if ((error = checkarg(argc, "modifier", EXPECTED_EQUAL_TO, 1))) {
1652 return error;
1653 }
1654
1655 if (!config->current_bar) {
1656 return cmd_results_new(CMD_FAILURE, "modifier", "No bar defined.");
1657 }
1658
1659 uint32_t mod = 0;
1660
1661 list_t *split = split_string(argv[0], "+");
1662 for (int i = 0; i < split->length; ++i) {
1663 int j;
1664 bool is_mod = false;
1665 for (j = 0; j < (int)(sizeof(modifiers) / sizeof(struct modifier_key)); ++j) {
1666 if (strcasecmp(modifiers[j].name, split->items[i]) == 0) {
1667 mod |= modifiers[j].mod;
1668 is_mod = true;
1669 break;
1670 }
1671 }
1672 if (!is_mod) {
1673 free_flat_list(split);
1674 return cmd_results_new(CMD_INVALID, "modifier", "Unknown modifier '%s'", split->items[i]);
1675 }
1676 }
1677 free_flat_list(split);
1678
1679 config->current_bar->modifier = mod;
1680 sway_log(L_DEBUG, "Show/Hide the bar when pressing '%s' in hide mode.", argv[0]);
1681 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
1682}
1683
1661static struct cmd_results *bar_cmd_position(int argc, char **argv) { 1684static struct cmd_results *bar_cmd_position(int argc, char **argv) {
1662 struct cmd_results *error = NULL; 1685 struct cmd_results *error = NULL;
1663 if ((error = checkarg(argc, "position", EXPECTED_EQUAL_TO, 1))) { 1686 if ((error = checkarg(argc, "position", EXPECTED_EQUAL_TO, 1))) {
@@ -1685,6 +1708,23 @@ static struct cmd_results *bar_cmd_position(int argc, char **argv) {
1685 return cmd_results_new(CMD_SUCCESS, NULL, NULL); 1708 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
1686} 1709}
1687 1710
1711static struct cmd_results *bar_cmd_status_command(int argc, char **argv) {
1712 struct cmd_results *error = NULL;
1713 if ((error = checkarg(argc, "status_command", EXPECTED_AT_LEAST, 1))) {
1714 return error;
1715 }
1716
1717 if (!config->current_bar) {
1718 return cmd_results_new(CMD_FAILURE, "status_command", "No bar defined.");
1719 }
1720
1721 free(config->current_bar->status_command);
1722 config->current_bar->status_command = join_args(argv, argc);
1723 sway_log(L_DEBUG, "Feeding bar with status command: %s", config->current_bar->status_command);
1724
1725 return cmd_results_new(CMD_SUCCESS, NULL, NULL);
1726}
1727
1688static struct cmd_results *bar_cmd_strip_workspace_numbers(int argc, char **argv) { 1728static struct cmd_results *bar_cmd_strip_workspace_numbers(int argc, char **argv) {
1689 struct cmd_results *error = NULL; 1729 struct cmd_results *error = NULL;
1690 if ((error = checkarg(argc, "strip_workspace_numbers", EXPECTED_EQUAL_TO, 1))) { 1730 if ((error = checkarg(argc, "strip_workspace_numbers", EXPECTED_EQUAL_TO, 1))) {
@@ -1769,11 +1809,11 @@ static struct cmd_handler bar_handlers[] = {
1769 { "hidden_state", bar_cmd_hidden_state }, 1809 { "hidden_state", bar_cmd_hidden_state },
1770 { "id", bar_cmd_id }, 1810 { "id", bar_cmd_id },
1771 { "mode", bar_cmd_mode }, 1811 { "mode", bar_cmd_mode },
1772 { "modifier", NULL }, 1812 { "modifier", bar_cmd_modifier },
1773 { "output", NULL }, 1813 { "output", NULL },
1774 { "position", bar_cmd_position }, 1814 { "position", bar_cmd_position },
1775 { "seperator_symbol", NULL }, 1815 { "seperator_symbol", NULL },
1776 { "status_command", NULL }, 1816 { "status_command", bar_cmd_status_command },
1777 { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers }, 1817 { "strip_workspace_numbers", bar_cmd_strip_workspace_numbers },
1778 { "tray_output", bar_cmd_tray_output }, 1818 { "tray_output", bar_cmd_tray_output },
1779 { "tray_padding", bar_cmd_tray_padding }, 1819 { "tray_padding", bar_cmd_tray_padding },
diff --git a/sway/config.c b/sway/config.c
index 899c3b2f..1fff3a08 100644
--- a/sway/config.c
+++ b/sway/config.c
@@ -137,19 +137,6 @@ static void config_defaults(struct sway_config *config) {
137 config->edge_gaps = true; 137 config->edge_gaps = true;
138 config->gaps_inner = 0; 138 config->gaps_inner = 0;
139 config->gaps_outer = 0; 139 config->gaps_outer = 0;
140
141 // Bar
142 config->bar.mode = "dock";
143 config->bar.hidden_state = "hide";
144 config->bar.modifier = 0;
145 config->bar.position = DESKTOP_SHELL_PANEL_POSITION_BOTTOM;
146 config->bar.status_command = "while :; do date +'%Y-%m-%d %l:%M:%S %p' && sleep 1; done";
147 config->bar.font = "monospace 10";
148 config->bar.bar_height = -1;
149 config->bar.workspace_buttons = true;
150 config->bar.strip_workspace_numbers = false;
151 config->bar.binding_mode_indicator = true;
152 config->bar.tray_padding = 2;
153} 140}
154 141
155static char *get_config_path(void) { 142static char *get_config_path(void) {
@@ -551,3 +538,23 @@ void free_sway_mouse_binding(struct sway_mouse_binding *binding) {
551 } 538 }
552 free(binding); 539 free(binding);
553} 540}
541
542struct bar_config *default_bar_config(void) {
543 struct bar_config *bar = NULL;
544 bar = malloc(sizeof(struct bar_config));
545 bar->mode = strdup("dock");
546 bar->hidden_state = strdup("hide");
547 bar->modifier = 0;
548 bar->position = DESKTOP_SHELL_PANEL_POSITION_BOTTOM;
549 bar->bindings = create_list();
550 bar->status_command = strdup("while :; do date +'%Y-%m-%d %l:%M:%S %p' && sleep 1; done");
551 bar->font = strdup("monospace 10");
552 bar->bar_height = -1;
553 bar->workspace_buttons = true;
554 bar->strip_workspace_numbers = false;
555 bar->binding_mode_indicator = true;
556 bar->tray_padding = 2;
557 list_add(config->bars, bar);
558
559 return bar;
560}