i3bar: only restart child when command changed (#2866)

this is a follow-up to
98f202dd1b

fixes #2689
This commit is contained in:
Michael Stapelberg 2017-08-20 15:30:27 +02:00 committed by GitHub
parent c70fa8078f
commit fdb551f9d5
2 changed files with 7 additions and 4 deletions

View File

@ -185,6 +185,7 @@ static int config_string_cb(void *params_, const unsigned char *val, size_t _len
if (!strcmp(cur_key, "status_command")) {
DLOG("command = %.*s\n", len, val);
FREE(config.command);
sasprintf(&config.command, "%.*s", len, val);
return 1;
}

View File

@ -113,7 +113,6 @@ void got_bar_config(char *reply) {
init_colors(&(config.colors));
start_child(config.command);
FREE(config.command);
}
/* Data structure to easily call the reply handlers later */
@ -178,6 +177,7 @@ void got_bar_config_update(char *event) {
/* update the configuration with the received settings */
DLOG("Received bar config update \"%s\"\n", event);
char *old_command = sstrdup(config.command);
bar_display_mode_t old_mode = config.hide_on_modifier;
parse_config_json(event);
if (old_mode != config.hide_on_modifier) {
@ -189,9 +189,11 @@ void got_bar_config_update(char *event) {
init_colors(&(config.colors));
/* restart status command process */
kill_child();
start_child(config.command);
FREE(config.command);
if (strcmp(old_command, config.command) != 0) {
kill_child();
start_child(config.command);
}
free(old_command);
draw_bars(false);
}