reduce calls to win-title
rather than calling the script unconditionally per redraw, we now have a `title_dirty` flag and keep track of when any of the relavent information changes. Co-authored-by: Arthur Williams <taaparthur@gmail.com> Partially fixes: https://github.com/nsxiv/nsxiv/issues/258
This commit is contained in:
parent
364c3d6f01
commit
810a9651a3
|
@ -63,6 +63,7 @@ bool cg_switch_mode(arg_t _)
|
||||||
}
|
}
|
||||||
close_info();
|
close_info();
|
||||||
open_info();
|
open_info();
|
||||||
|
title_dirty = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Example for $XDG_CONFIG_HOME/nsxiv/exec/win-title
|
# Example for $XDG_CONFIG_HOME/nsxiv/exec/win-title
|
||||||
# Called by nsxiv(1) on each redraw.
|
# Called by nsxiv(1) whenever any of the relevant information changes.
|
||||||
# The output is set as nsxiv's window title.
|
# The output is set as nsxiv's window title.
|
||||||
#
|
#
|
||||||
# Arguments, "Optional" arguments might be empty:
|
# Arguments, "Optional" arguments might be empty:
|
||||||
|
|
5
image.c
5
image.c
|
@ -546,7 +546,7 @@ static bool img_fit(img_t *img)
|
||||||
|
|
||||||
if (ABS(img->zoom - z) > 1.0/MAX(img->w, img->h)) {
|
if (ABS(img->zoom - z) > 1.0/MAX(img->w, img->h)) {
|
||||||
img->zoom = z;
|
img->zoom = z;
|
||||||
img->dirty = true;
|
img->dirty = title_dirty = true;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
@ -677,8 +677,7 @@ bool img_zoom_to(img_t *img, float z)
|
||||||
img->y = y - (y - img->y) * z / img->zoom;
|
img->y = y - (y - img->y) * z / img->zoom;
|
||||||
img->zoom = z;
|
img->zoom = z;
|
||||||
img->scalemode = SCALE_ZOOM;
|
img->scalemode = SCALE_ZOOM;
|
||||||
img->checkpan = true;
|
img->dirty = img->checkpan = title_dirty = true;
|
||||||
img->dirty = true;
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
|
6
main.c
6
main.c
|
@ -85,6 +85,8 @@ static struct {
|
||||||
extcmd_t f;
|
extcmd_t f;
|
||||||
} wintitle;
|
} wintitle;
|
||||||
|
|
||||||
|
bool title_dirty;
|
||||||
|
|
||||||
static timeout_t timeouts[] = {
|
static timeout_t timeouts[] = {
|
||||||
{ { 0, 0 }, false, redraw },
|
{ { 0, 0 }, false, redraw },
|
||||||
{ { 0, 0 }, false, reset_cursor },
|
{ { 0, 0 }, false, reset_cursor },
|
||||||
|
@ -343,6 +345,7 @@ void load_image(int new)
|
||||||
close_info();
|
close_info();
|
||||||
open_info();
|
open_info();
|
||||||
arl_setup(&arl, files[fileidx].path);
|
arl_setup(&arl, files[fileidx].path);
|
||||||
|
title_dirty = true;
|
||||||
|
|
||||||
if (img.multi.cnt > 0 && img.multi.animate)
|
if (img.multi.cnt > 0 && img.multi.animate)
|
||||||
set_timeout(animate, img.multi.frames[img.multi.sel].delay, true);
|
set_timeout(animate, img.multi.frames[img.multi.sel].delay, true);
|
||||||
|
@ -451,7 +454,10 @@ void redraw(void)
|
||||||
tns_render(&tns);
|
tns_render(&tns);
|
||||||
}
|
}
|
||||||
update_info();
|
update_info();
|
||||||
|
if (title_dirty) {
|
||||||
win_set_title(&win, false);
|
win_set_title(&win, false);
|
||||||
|
title_dirty = false;
|
||||||
|
}
|
||||||
win_draw(&win);
|
win_draw(&win);
|
||||||
reset_timeout(redraw);
|
reset_timeout(redraw);
|
||||||
reset_cursor();
|
reset_cursor();
|
||||||
|
|
3
nsxiv.1
3
nsxiv.1
|
@ -426,7 +426,8 @@ Color of the mark foreground. Defaults to window.foreground
|
||||||
Please see xrdb(1) on how to change them.
|
Please see xrdb(1) on how to change them.
|
||||||
.SH WINDOW TITLE
|
.SH WINDOW TITLE
|
||||||
The window title can be replaced with the output of a user-provided script,
|
The window title can be replaced with the output of a user-provided script,
|
||||||
which is called by nsxiv whenever there's a redraw. The path of this script is
|
which is called by nsxiv whenever any of the relevant information changes.
|
||||||
|
The path of this script is
|
||||||
.I $XDG_CONFIG_HOME/nsxiv/exec/win-title
|
.I $XDG_CONFIG_HOME/nsxiv/exec/win-title
|
||||||
and the arguments given to it (where "Optional" arguments might be empty) are:
|
and the arguments given to it (where "Optional" arguments might be empty) are:
|
||||||
.IP $1 4
|
.IP $1 4
|
||||||
|
|
1
nsxiv.h
1
nsxiv.h
|
@ -470,5 +470,6 @@ extern int alternate;
|
||||||
extern int markcnt;
|
extern int markcnt;
|
||||||
extern int markidx;
|
extern int markidx;
|
||||||
extern int prefix;
|
extern int prefix;
|
||||||
|
extern bool title_dirty;
|
||||||
|
|
||||||
#endif /* NSXIV_H */
|
#endif /* NSXIV_H */
|
||||||
|
|
2
thumbs.c
2
thumbs.c
|
@ -459,6 +459,7 @@ void tns_render(tns_t *tns)
|
||||||
}
|
}
|
||||||
tns->dirty = false;
|
tns->dirty = false;
|
||||||
tns_highlight(tns, *tns->sel, true);
|
tns_highlight(tns, *tns->sel, true);
|
||||||
|
title_dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tns_mark(tns_t *tns, int n, bool mark)
|
void tns_mark(tns_t *tns, int n, bool mark)
|
||||||
|
@ -527,6 +528,7 @@ bool tns_move_selection(tns_t *tns, direction_t dir, int cnt)
|
||||||
tns_check_view(tns, false);
|
tns_check_view(tns, false);
|
||||||
if (!tns->dirty)
|
if (!tns->dirty)
|
||||||
tns_highlight(tns, *tns->sel, true);
|
tns_highlight(tns, *tns->sel, true);
|
||||||
|
title_dirty = true;
|
||||||
}
|
}
|
||||||
return *tns->sel != old;
|
return *tns->sel != old;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue