tog(1): handle vertical window resize events properly
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 45 46 47 48 49 50 51
diff --git a/tog/tog.c b/tog/tog.c
index 9834ac4..aee7598 100644
--- a/tog/tog.c
+++ b/tog/tog.c
@@ -16,6 +16,7 @@
#include <sys/queue.h>
+#include <errno.h>
#include <curses.h>
#include <panel.h>
#include <locale.h>
@@ -337,12 +338,10 @@ show_log_view(struct got_object_id *start_id, struct got_repository *repo)
free_commits(&commits);
err = fetch_commits(&commits, obj, id, repo, LINES);
refetch_commits = 0;
- got_object_close(obj);
- obj = NULL;
if (err)
goto done;
}
-redraw:
+
err = draw_commits(&commits, selected);
if (err)
goto done;
@@ -350,6 +349,12 @@ redraw:
nodelay(stdscr, FALSE);
ch = wgetch(tog_log_view.window);
switch (ch) {
+ case ERR:
+ if (errno) {
+ err = got_error_from_errno();
+ goto done;
+ }
+ break;
case 'q':
done = 1;
break;
@@ -364,7 +369,10 @@ redraw:
selected++;
break;
case KEY_RESIZE:
- goto redraw;
+ refetch_commits = 1;
+ if (selected > LINES)
+ selected = LINES - 1;
+ break;
default:
break;
}