diff options
-rw-r--r-- | sway/commands.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/sway/commands.c b/sway/commands.c index 2b28c472..f6c3b094 100644 --- a/sway/commands.c +++ b/sway/commands.c | |||
@@ -67,6 +67,7 @@ static sway_cmd cmd_ws_auto_back_and_forth; | |||
67 | 67 | ||
68 | static sway_cmd bar_cmd_bindsym; | 68 | static sway_cmd bar_cmd_bindsym; |
69 | static sway_cmd bar_cmd_mode; | 69 | static sway_cmd bar_cmd_mode; |
70 | static sway_cmd bar_cmd_modifier; | ||
70 | static sway_cmd bar_cmd_hidden_state; | 71 | static sway_cmd bar_cmd_hidden_state; |
71 | static sway_cmd bar_cmd_id; | 72 | static sway_cmd bar_cmd_id; |
72 | static sway_cmd bar_cmd_position; | 73 | static sway_cmd bar_cmd_position; |
@@ -1645,6 +1646,41 @@ static struct cmd_results *bar_cmd_id(int argc, char **argv) { | |||
1645 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 1646 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); |
1646 | } | 1647 | } |
1647 | 1648 | ||
1649 | static 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 | |||
1648 | static struct cmd_results *bar_cmd_position(int argc, char **argv) { | 1684 | static struct cmd_results *bar_cmd_position(int argc, char **argv) { |
1649 | struct cmd_results *error = NULL; | 1685 | struct cmd_results *error = NULL; |
1650 | if ((error = checkarg(argc, "position", EXPECTED_EQUAL_TO, 1))) { | 1686 | if ((error = checkarg(argc, "position", EXPECTED_EQUAL_TO, 1))) { |
@@ -1773,7 +1809,7 @@ static struct cmd_handler bar_handlers[] = { | |||
1773 | { "hidden_state", bar_cmd_hidden_state }, | 1809 | { "hidden_state", bar_cmd_hidden_state }, |
1774 | { "id", bar_cmd_id }, | 1810 | { "id", bar_cmd_id }, |
1775 | { "mode", bar_cmd_mode }, | 1811 | { "mode", bar_cmd_mode }, |
1776 | { "modifier", NULL }, | 1812 | { "modifier", bar_cmd_modifier }, |
1777 | { "output", NULL }, | 1813 | { "output", NULL }, |
1778 | { "position", bar_cmd_position }, | 1814 | { "position", bar_cmd_position }, |
1779 | { "seperator_symbol", NULL }, | 1815 | { "seperator_symbol", NULL }, |