aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--commands.c10
-rw-r--r--image.c4
-rw-r--r--main.c34
-rw-r--r--nsxiv.h1
-rw-r--r--thumbs.c2
5 files changed, 28 insertions, 23 deletions
diff --git a/commands.c b/commands.c
index 97cadf2..3257b1e 100644
--- a/commands.c
+++ b/commands.c
@@ -83,9 +83,6 @@ bool cg_switch_mode(arg_t _)
load_image(fileidx);
mode = MODE_IMAGE;
}
- close_info();
- open_info();
- title_dirty = true;
return true;
}
@@ -415,12 +412,7 @@ bool ci_slideshow(arg_t _)
bool ct_move_sel(arg_t dir)
{
- bool dirty = tns_move_selection(&tns, dir, prefix);
- if (dirty) {
- close_info();
- open_info();
- }
- return dirty;
+ return tns_move_selection(&tns, dir, prefix);
}
bool ct_reload_all(arg_t _)
diff --git a/image.c b/image.c
index 5e2a7a0..6020e93 100644
--- a/image.c
+++ b/image.c
@@ -717,7 +717,7 @@ static bool img_fit(img_t *img)
if (ABS(img->zoom - z) > 1.0 / MAX(img->w, img->h)) {
img->zoom = z;
- img->dirty = title_dirty = true;
+ img->dirty = true;
return true;
} else {
return false;
@@ -852,7 +852,7 @@ bool img_zoom_to(img_t *img, float z)
img->y = y - (y - img->y) * z / img->zoom;
img->zoom = z;
img->scalemode = SCALE_ZOOM;
- img->dirty = img->checkpan = title_dirty = true;
+ img->dirty = img->checkpan = true;
return true;
} else {
return false;
diff --git a/main.c b/main.c
index 2514237..a050aa8 100644
--- a/main.c
+++ b/main.c
@@ -70,7 +70,6 @@ int alternate;
int markcnt;
int markidx;
int prefix;
-bool title_dirty;
const XButtonEvent *xbutton_ev;
static void autoreload(void);
@@ -316,7 +315,7 @@ static void open_title(void)
char *argv[8];
char w[12] = "", h[12] = "", z[12] = "", fidx[12], fcnt[12];
- if (wintitle.f.err || !title_dirty)
+ if (wintitle.f.err)
return;
close_title();
@@ -331,7 +330,6 @@ static void open_title(void)
fidx, fcnt, w, h, z, NULL);
if ((wintitle.pid = spawn(&wintitle.fd, NULL, argv)) > 0)
fcntl(wintitle.fd, F_SETFL, O_NONBLOCK);
- title_dirty = false;
}
void close_info(void)
@@ -402,10 +400,7 @@ void load_image(int new)
files[new].flags &= ~FF_WARN;
fileidx = current = new;
- close_info();
- open_info();
arl_add(&arl, files[fileidx].path);
- title_dirty = true;
if (img.multi.cnt > 0 && img.multi.animate)
set_timeout(animate, img.multi.frames[img.multi.sel].delay, true);
@@ -443,9 +438,33 @@ static void update_info(void)
const char *mark;
win_bar_t *l = &win.bar.l, *r = &win.bar.r;
+ static struct {
+ const char *filepath;
+ int fileidx;
+ float zoom;
+ appmode_t mode;
+ } prev;
+
+ if (prev.fileidx != fileidx || prev.mode != mode ||
+ (prev.filepath == NULL || !STREQ(prev.filepath, files[fileidx].path)))
+ {
+ close_info();
+ open_info();
+ open_title();
+ } else if (mode == MODE_IMAGE && prev.zoom != img.zoom) {
+ open_title();
+ }
+
/* update bar contents */
if (win.bar.h == 0 || extprefix)
return;
+
+ free((char *)prev.filepath);
+ prev.filepath = estrdup(files[fileidx].path);
+ prev.fileidx = fileidx;
+ prev.zoom = img.zoom;
+ prev.mode = mode;
+
for (fw = 0, i = filecnt; i > 0; fw++, i /= 10)
;
mark = files[fileidx].flags & FF_MARK ? "* " : "";
@@ -520,7 +539,6 @@ void redraw(void)
tns_render(&tns);
}
update_info();
- open_title();
win_draw(&win);
reset_timeout(redraw);
reset_cursor();
@@ -669,8 +687,6 @@ static bool run_key_handler(const char *key, unsigned int mask)
if (mode == MODE_IMAGE && changed) {
img_close(&img, true);
load_image(fileidx);
- } else {
- open_info();
}
free(oldst);
reset_cursor();
diff --git a/nsxiv.h b/nsxiv.h
index 949fc4b..e137bfe 100644
--- a/nsxiv.h
+++ b/nsxiv.h
@@ -468,6 +468,5 @@ extern int alternate;
extern int markcnt;
extern int markidx;
extern int prefix;
-extern bool title_dirty;
#endif /* NSXIV_H */
diff --git a/thumbs.c b/thumbs.c
index d2f91a7..500446f 100644
--- a/thumbs.c
+++ b/thumbs.c
@@ -447,7 +447,6 @@ void tns_render(tns_t *tns)
}
tns->dirty = false;
tns_highlight(tns, *tns->sel, true);
- title_dirty = true;
}
void tns_mark(tns_t *tns, int n, bool mark)
@@ -516,7 +515,6 @@ bool tns_move_selection(tns_t *tns, direction_t dir, int cnt)
tns_check_view(tns, false);
if (!tns->dirty)
tns_highlight(tns, *tns->sel, true);
- title_dirty = true;
}
return *tns->sel != old;
}