Merge pull request #1697 from Airblader/feature-1695
Extend mouse commands on i3bar
This commit is contained in:
@ -530,14 +530,44 @@ CFGFUN(bar_modifier, const char *modifier) {
|
||||
current_bar.modifier = M_SHIFT;
|
||||
}
|
||||
|
||||
static void bar_configure_binding(const char *button, const char *command) {
|
||||
if (strncasecmp(button, "button", strlen("button")) != 0) {
|
||||
ELOG("Bindings for a bar can only be mouse bindings, not \"%s\", ignoring.\n", button);
|
||||
return;
|
||||
}
|
||||
|
||||
int input_code = atoi(button + strlen("button"));
|
||||
if (input_code < 1) {
|
||||
ELOG("Button \"%s\" does not seem to be in format 'buttonX'.\n", button);
|
||||
return;
|
||||
}
|
||||
|
||||
struct Barbinding *current;
|
||||
TAILQ_FOREACH(current, &(current_bar.bar_bindings), bindings) {
|
||||
if (current->input_code == input_code) {
|
||||
ELOG("command for button %s was already specified, ignoring.\n", button);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
struct Barbinding *new_binding = scalloc(sizeof(struct Barbinding));
|
||||
new_binding->input_code = input_code;
|
||||
new_binding->command = sstrdup(command);
|
||||
TAILQ_INSERT_TAIL(&(current_bar.bar_bindings), new_binding, bindings);
|
||||
}
|
||||
|
||||
CFGFUN(bar_wheel_up_cmd, const char *command) {
|
||||
FREE(current_bar.wheel_up_cmd);
|
||||
current_bar.wheel_up_cmd = sstrdup(command);
|
||||
ELOG("'wheel_up_cmd' is deprecated. Please us 'bindsym button4 %s' instead.\n", command);
|
||||
bar_configure_binding("button4", command);
|
||||
}
|
||||
|
||||
CFGFUN(bar_wheel_down_cmd, const char *command) {
|
||||
FREE(current_bar.wheel_down_cmd);
|
||||
current_bar.wheel_down_cmd = sstrdup(command);
|
||||
ELOG("'wheel_down_cmd' is deprecated. Please us 'bindsym button5 %s' instead.\n", command);
|
||||
bar_configure_binding("button5", command);
|
||||
}
|
||||
|
||||
CFGFUN(bar_bindsym, const char *button, const char *command) {
|
||||
bar_configure_binding(button, command);
|
||||
}
|
||||
|
||||
CFGFUN(bar_position, const char *position) {
|
||||
@ -611,6 +641,10 @@ CFGFUN(bar_strip_workspace_numbers, const char *value) {
|
||||
current_bar.strip_workspace_numbers = eval_boolstr(value);
|
||||
}
|
||||
|
||||
CFGFUN(bar_start) {
|
||||
TAILQ_INIT(&(current_bar.bar_bindings));
|
||||
}
|
||||
|
||||
CFGFUN(bar_finish) {
|
||||
DLOG("\t new bar configuration finished, saving.\n");
|
||||
/* Generate a unique ID for this bar if not already configured */
|
||||
|
32
src/ipc.c
32
src/ipc.c
@ -469,6 +469,28 @@ void dump_node(yajl_gen gen, struct Con *con, bool inplace_restart) {
|
||||
y(map_close);
|
||||
}
|
||||
|
||||
static void dump_bar_bindings(yajl_gen gen, Barconfig *config) {
|
||||
if (TAILQ_EMPTY(&(config->bar_bindings)))
|
||||
return;
|
||||
|
||||
ystr("bindings");
|
||||
y(array_open);
|
||||
|
||||
struct Barbinding *current;
|
||||
TAILQ_FOREACH(current, &(config->bar_bindings), bindings) {
|
||||
y(map_open);
|
||||
|
||||
ystr("input_code");
|
||||
y(integer, current->input_code);
|
||||
ystr("command");
|
||||
ystr(current->command);
|
||||
|
||||
y(map_close);
|
||||
}
|
||||
|
||||
y(array_close);
|
||||
}
|
||||
|
||||
static void dump_bar_config(yajl_gen gen, Barconfig *config) {
|
||||
y(map_open);
|
||||
|
||||
@ -549,15 +571,7 @@ static void dump_bar_config(yajl_gen gen, Barconfig *config) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (config->wheel_up_cmd) {
|
||||
ystr("wheel_up_cmd");
|
||||
ystr(config->wheel_up_cmd);
|
||||
}
|
||||
|
||||
if (config->wheel_down_cmd) {
|
||||
ystr("wheel_down_cmd");
|
||||
ystr(config->wheel_down_cmd);
|
||||
}
|
||||
dump_bar_bindings(gen, config);
|
||||
|
||||
ystr("position");
|
||||
if (config->position == P_BOTTOM)
|
||||
|
Reference in New Issue
Block a user