Download raw body.
tog: fix resize failure to populate log view commits
On Mon, Jul 18, 2022 at 10:34:27PM +1000, Mark Jamsek wrote: > If resizing a log view while on the _last_ loaded commit on the bottom > edge of the screen, some of the new lines are not populated. > > repro: > $ tog # 80x24 > 23j # move down to the last commit > *increase terminal height to ~30 lines then reduce back to 80x24* > ~5j # move down to the _last_ commit > *increase terminal height to ~33 lines* > > Most of the new lines are empty. > > We call request_log_commits() from view_resize()--but only when the view > has a child view. The fix simply moves this check, so that we always > call request_log_commits() if the terminal height has been increased, > irrespective of whether a child view exists. I only have a concern about style consistency: Could we add a resize function pointer to struct tog_view and call this (if not NULL) instead of checking the view type and manipulating diff view state in view_resize() directly? The code would then move into a new resize_diff_view() function. > diff /home/mark/src/git/got-current > commit - d2587c5f95c6edb51ccc8d4abfac838b58f3a463 > path + /home/mark/src/git/got-current > blob - 97ac0690a9232815bb10bc4a237246e2ec53e069 > file + tog/tog.c > --- tog/tog.c > +++ tog/tog.c > @@ -875,24 +875,6 @@ view_resize(struct tog_view *view) > show_panel(view->child->panel); > } > /* > - * Request commits if terminal height was increased in a log > - * view so we have enough commits loaded to populate the view. > - */ > - if (view->type == TOG_VIEW_LOG && dif > 0) { > - struct tog_log_view_state *ts = &view->state.log; > - > - if (ts->commits.ncommits < ts->selected_entry->idx + > - view->lines - ts->selected) { > - view->nscrolled = ts->selected_entry->idx + > - view->lines - ts->selected - > - ts->commits.ncommits + dif; > - err = request_log_commits(view); > - if (err) > - return err; > - } > - } > - > - /* > * XXX This is ugly and needs to be moved into the above > * logic but "works" for now and my attempts at moving it > * break either 'tab' or 'F' key maps in horizontal splits. > @@ -915,6 +897,24 @@ view_resize(struct tog_view *view) > } else if (view->parent == NULL) > ncols = COLS; > > + /* > + * Request commits if terminal height was increased in a log > + * view so we have enough commits loaded to populate the view. > + */ > + if (view->type == TOG_VIEW_LOG && dif > 0) { > + struct tog_log_view_state *ts = &view->state.log; > + > + if (ts->commits.ncommits < ts->selected_entry->idx + > + view->lines - ts->selected) { > + view->nscrolled = ts->selected_entry->idx + > + view->lines - ts->selected - > + ts->commits.ncommits + dif + 1; > + err = request_log_commits(view); > + if (err) > + return err; > + } > + } > + > if (wresize(view->window, nlines, ncols) == ERR) > return got_error_from_errno("wresize"); > if (replace_panel(view->panel, view->window) == ERR) > > -- > Mark Jamsek <fnc.bsdbox.org> > GPG: F2FF 13DE 6A06 C471 CA80 E6E2 2930 DC66 86EE CF68
tog: fix resize failure to populate log view commits