| @@ -76,6 +76,7 @@ struct { |
| 76 | 76 | | char *script; |
| 77 | 77 | | int fd; |
| 78 | 78 | | unsigned int i, lastsep; |
| 79 | + | bool open; |
| 79 | 80 | | } info; |
| 80 | 81 | | |
| 81 | 82 | | timeout_t timeouts[] = { |
| @@ -218,23 +219,25 @@ void open_info(void) |
| 218 | 219 | | static pid_t pid; |
| 219 | 220 | | int pfd[2]; |
| 220 | 221 | | |
| 221 | | − | win.bar.l[0] = '\0'; |
| 222 | | − | |
| 222 | + | if (info.script == NULL || info.open || win.bar.h == 0) |
| 223 | + | return; |
| 223 | 224 | | if (info.fd != -1) { |
| 224 | 225 | | close(info.fd); |
| 225 | 226 | | kill(pid, SIGTERM); |
| 226 | 227 | | while (waitpid(-1, NULL, WNOHANG) > 0); |
| 227 | 228 | | info.fd = -1; |
| 228 | 229 | | } |
| 229 | | − | if (info.script == NULL || pipe(pfd) < 0) |
| 230 | | − | return; |
| 230 | + | win.bar.l[0] = '\0'; |
| 231 | 231 | | |
| 232 | + | if (pipe(pfd) < 0) |
| 233 | + | return; |
| 232 | 234 | | pid = fork(); |
| 233 | 235 | | if (pid > 0) { |
| 234 | 236 | | close(pfd[1]); |
| 235 | 237 | | fcntl(pfd[0], F_SETFL, O_NONBLOCK); |
| 236 | 238 | | info.fd = pfd[0]; |
| 237 | 239 | | info.i = info.lastsep = 0; |
| 240 | + | info.open = true; |
| 238 | 241 | | } else if (pid == 0) { |
| 239 | 242 | | close(pfd[0]); |
| 240 | 243 | | dup2(pfd[1], 1); |
| @@ -293,6 +296,7 @@ void load_image(int new) |
| 293 | 296 | | alternate = fileidx; |
| 294 | 297 | | fileidx = new; |
| 295 | 298 | | |
| 299 | + | info.open = false; |
| 296 | 300 | | open_info(); |
| 297 | 301 | | |
| 298 | 302 | | if (img.multi.cnt > 0 && img.multi.animate) |
| @@ -312,9 +316,18 @@ void update_info(void) |
| 312 | 316 | | for (fw = 0, i = filecnt; i > 0; fw++, i /= 10); |
| 313 | 317 | | sel = mode == MODE_IMAGE ? fileidx : tns.sel; |
| 314 | 318 | | |
| 319 | + | /* update window title */ |
| 315 | 320 | | if (mode == MODE_THUMB) { |
| 316 | 321 | | win_set_title(&win, "sxiv"); |
| 322 | + | } else { |
| 323 | + | snprintf(title, sizeof(title), "sxiv - %s", files[sel].name); |
| 324 | + | win_set_title(&win, title); |
| 325 | + | } |
| 317 | 326 | | |
| 327 | + | /* update bar contents */ |
| 328 | + | if (win.bar.h == 0) |
| 329 | + | return; |
| 330 | + | if (mode == MODE_THUMB) { |
| 318 | 331 | | if (tns.cnt == filecnt) { |
| 319 | 332 | | n = snprintf(rt, rlen, "%0*d/%d", fw, sel + 1, filecnt); |
| 320 | 333 | | ow_info = true; |
| @@ -324,9 +337,6 @@ void update_info(void) |
| 324 | 337 | | ow_info = false; |
| 325 | 338 | | } |
| 326 | 339 | | } else { |
| 327 | | − | snprintf(title, sizeof(title), "sxiv - %s", files[sel].name); |
| 328 | | − | win_set_title(&win, title); |
| 329 | | − | |
| 330 | 340 | | n = snprintf(rt, rlen, "%3d%% ", (int) (img.zoom * 100.0)); |
| 331 | 341 | | if (img.multi.cnt > 0) { |
| 332 | 342 | | for (fn = 0, i = img.multi.cnt; i > 0; fn++, i /= 10); |