summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorBert Münnich <be.muennich@gmail.com>2013-02-12 17:55:47 +0100
committerBert Münnich <be.muennich@gmail.com>2013-03-19 21:14:32 +0100
commit30802cec0f233aa9977256684cb749df6c7e28c0 (patch)
treebc015fb96b88e7cbf882ce88d5353625f3102143 /main.c
parentf3298400e6704844aeb1d3e0951e84b4236d2302 (diff)
downloadnsxiv-30802cec0f233aa9977256684cb749df6c7e28c0.tar.zst
Spawn info script & update bar contents only when needed
Diffstat (limited to 'main.c')
-rw-r--r--main.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/main.c b/main.c
index f648dab..d6cdcd4 100644
--- a/main.c
+++ b/main.c
@@ -76,6 +76,7 @@ struct {
char *script;
int fd;
unsigned int i, lastsep;
+ bool open;
} info;
timeout_t timeouts[] = {
@@ -218,23 +219,25 @@ void open_info(void)
static pid_t pid;
int pfd[2];
- win.bar.l[0] = '\0';
-
+ if (info.script == NULL || info.open || win.bar.h == 0)
+ return;
if (info.fd != -1) {
close(info.fd);
kill(pid, SIGTERM);
while (waitpid(-1, NULL, WNOHANG) > 0);
info.fd = -1;
}
- if (info.script == NULL || pipe(pfd) < 0)
- return;
+ win.bar.l[0] = '\0';
+ if (pipe(pfd) < 0)
+ return;
pid = fork();
if (pid > 0) {
close(pfd[1]);
fcntl(pfd[0], F_SETFL, O_NONBLOCK);
info.fd = pfd[0];
info.i = info.lastsep = 0;
+ info.open = true;
} else if (pid == 0) {
close(pfd[0]);
dup2(pfd[1], 1);
@@ -293,6 +296,7 @@ void load_image(int new)
alternate = fileidx;
fileidx = new;
+ info.open = false;
open_info();
if (img.multi.cnt > 0 && img.multi.animate)
@@ -312,9 +316,18 @@ void update_info(void)
for (fw = 0, i = filecnt; i > 0; fw++, i /= 10);
sel = mode == MODE_IMAGE ? fileidx : tns.sel;
+ /* update window title */
if (mode == MODE_THUMB) {
win_set_title(&win, "sxiv");
+ } else {
+ snprintf(title, sizeof(title), "sxiv - %s", files[sel].name);
+ win_set_title(&win, title);
+ }
+ /* update bar contents */
+ if (win.bar.h == 0)
+ return;
+ if (mode == MODE_THUMB) {
if (tns.cnt == filecnt) {
n = snprintf(rt, rlen, "%0*d/%d", fw, sel + 1, filecnt);
ow_info = true;
@@ -324,9 +337,6 @@ void update_info(void)
ow_info = false;
}
} else {
- snprintf(title, sizeof(title), "sxiv - %s", files[sel].name);
- win_set_title(&win, title);
-
n = snprintf(rt, rlen, "%3d%% ", (int) (img.zoom * 100.0));
if (img.multi.cnt > 0) {
for (fn = 0, i = img.multi.cnt; i > 0; fn++, i /= 10);