diff options
author | Bert Münnich <ber.t@posteo.de> | 2014-01-08 20:31:50 +0100 |
---|---|---|
committer | Bert Münnich <ber.t@posteo.de> | 2014-01-08 20:31:50 +0100 |
commit | 9574150f2d54790a9482e9c49f118f99ab84c552 (patch) | |
tree | bcd5947aaf6589b243a8622a078e35cbcb774ce7 | |
parent | cd34aa2a6ba0d68482b38fbaa38789c21cfa07f3 (diff) |
Check file modification time after key handler
-rw-r--r-- | main.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -459,6 +459,7 @@ void key_handler(const char *key, unsigned int mask) pid_t pid; int retval, status, n = mode == MODE_IMAGE ? fileidx : tns.sel; char *cmd = exec[EXEC_KEY].cmd, kstr[32]; + struct stat oldstat, newstat; if (cmd == NULL || key == NULL) return; @@ -468,6 +469,8 @@ void key_handler(const char *key, unsigned int mask) mask & Mod1Mask ? "M-" : "", mask & ShiftMask ? "S-" : "", key); + stat(files[n].path, &oldstat); + if ((pid = fork()) == 0) { execl(cmd, cmd, kstr, files[n].path, NULL); warn("could not exec key handler"); @@ -482,6 +485,13 @@ void key_handler(const char *key, unsigned int mask) retval = WEXITSTATUS(status); if (WIFEXITED(status) == 0 || retval != 0) warn("key handler exited with non-zero return value: %d", retval); + + if (stat(files[n].path, &newstat) == 0 && + memcmp(&oldstat, &newstat, sizeof(oldstat)) == 0) + { + /* file has not changed */ + return; + } if (mode == MODE_IMAGE) { img_close(&img, true); load_image(fileidx); |