]> git.sur5r.net Git - i3/i3/commitdiff
i3bar: only restart child when command changed (#2866)
authorMichael Stapelberg <stapelberg@users.noreply.github.com>
Sun, 20 Aug 2017 13:30:27 +0000 (15:30 +0200)
committerGitHub <noreply@github.com>
Sun, 20 Aug 2017 13:30:27 +0000 (15:30 +0200)
this is a follow-up to
https://github.com/i3/i3/commit/98f202dd1b2782d11a713513f5dcca2f52daab73

fixes #2689

i3bar/src/config.c
i3bar/src/ipc.c

index d065ff4ce88ee6effd0d00cbdacfa0cc0afbdb8f..cbe84d5073e55b714a2d564fd4d666fdfb872e1a 100644 (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;
     }
index 042e230a522ce3eeb43f535993f3fbe16ba978ed..c932aaf7d3b2536d864aa3dbedc6c47ff6824908 100644 (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);
 }