do not recompute the displayed diff if '<' or '>' command cannot advance Recomputing a diff can take time. Only do it if a different commit is going to be displayed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
diff --git a/tog/tog.c b/tog/tog.c
index 1497322..b61cdb3 100644
--- a/tog/tog.c
+++ b/tog/tog.c
@@ -3607,6 +3607,7 @@ input_diff_view(struct tog_view **new_view, struct tog_view *view, int ch)
const struct got_error *err = NULL;
struct tog_diff_view_state *s = &view->state.diff;
struct tog_log_view_state *ls;
+ struct commit_queue_entry *old_selected_entry;
int i;
switch (ch) {
@@ -3679,11 +3680,15 @@ input_diff_view(struct tog_view **new_view, struct tog_view *view, int ch)
if (s->log_view == NULL)
break;
ls = &s->log_view->state.log;
+ old_selected_entry = ls->selected_entry;
err = input_log_view(NULL, s->log_view, KEY_UP);
if (err)
break;
+ if (old_selected_entry == ls->selected_entry)
+ break;
+
err = set_selected_commit(s, ls->selected_entry);
if (err)
break;
@@ -3699,11 +3704,15 @@ input_diff_view(struct tog_view **new_view, struct tog_view *view, int ch)
if (s->log_view == NULL)
break;
ls = &s->log_view->state.log;
+ old_selected_entry = ls->selected_entry;
err = input_log_view(NULL, s->log_view, KEY_DOWN);
if (err)
break;
+ if (old_selected_entry == ls->selected_entry)
+ break;
+
err = set_selected_commit(s, ls->selected_entry);
if (err)
break;