index 199eb34b7cfc434e915bf9026114dafb68ca280d..fd40b8e98027c3aeac5a9c55a130d902c98e102f 100644 (file)
--- a/tig.c
+++ b/tig.c
@@ -2690,16 +2690,42 @@ add_line_format(struct view *view, enum line_type type, const char *fmt, ...)
* View opening
*/
+static void
+load_view(struct view *view, enum open_flags flags)
+{
+ if (view->pipe)
+ end_update(view, TRUE);
+ if (!view->ops->open(view, flags)) {
+ report("Failed to load %s view", view->name);
+ return;
+ }
+ restore_view_position(view);
+
+ if (view->pipe && view->lines == 0) {
+ /* Clear the old view and let the incremental updating refill
+ * the screen. */
+ werase(view->win);
+ view->p_restore = flags & (OPEN_RELOAD | OPEN_REFRESH);
+ report("");
+ } else if (view_is_displayed(view)) {
+ redraw_view(view);
+ report("");
+ }
+}
+
+#define refresh_view(view) load_view(view, OPEN_REFRESH)
+
static void
open_view(struct view *prev, enum request request, enum open_flags flags)
{
bool split = !!(flags & OPEN_SPLIT);
- bool reload = !!(flags & (OPEN_RELOAD | OPEN_REFRESH | OPEN_PREPARED));
- bool nomaximize = !!(flags & OPEN_REFRESH);
+ bool reload = !!(flags & (OPEN_RELOAD | OPEN_PREPARED));
struct view *view = VIEW(request);
int nviews = displayed_views();
struct view *base_view = display[0];
+ assert(flags ^ OPEN_REFRESH);
+
if (view == prev && nviews == 1 && !reload) {
report("Already in %s view", view->name);
return;
display[1] = view;
current_view = 1;
view->parent = prev;
- } else if (!nomaximize) {
+ } else {
/* Maximize the current view. */
memset(display, 0, sizeof(display));
current_view = 0;
(nviews == 1 && base_view != display[0]))
resize_display();
- if (view->ops->open) {
- if (view->pipe)
- end_update(view, TRUE);
- if (!view->ops->open(view, flags)) {
- report("Failed to load %s view", view->name);
- return;
- }
- restore_view_position(view);
- }
-
if (split && prev->lineno - prev->offset >= prev->height) {
/* Take the title line into account. */
int lines = prev->lineno - prev->offset - prev->height + 1;
update_view_title(prev);
}
- if (view->pipe && view->lines == 0) {
- /* Clear the old view and let the incremental updating refill
- * the screen. */
- werase(view->win);
- view->p_restore = flags & (OPEN_RELOAD | OPEN_REFRESH);
- report("");
- } else if (view_is_displayed(view)) {
- redraw_view(view);
- report("");
- }
+ load_view(view, flags);
}
static void
switch (request) {
case REQ_REFRESH:
load_refs();
- open_view(view, REQ_VIEW_LOG, OPEN_REFRESH);
+ refresh_view(view);
return REQ_NONE;
default:
return pager_request(view, request, line);
if (line->type == LINE_HELP_KEYMAP) {
help_keymap_hidden[line->other] =
!help_keymap_hidden[line->other];
- view->p_restore = TRUE;
- open_view(view, REQ_VIEW_HELP, OPEN_REFRESH);
+ refresh_view(view);
}
return REQ_NONE;
string_copy(opt_file, blame->commit->filename);
if (blame->lineno)
view->lineno = blame->lineno;
- open_view(view, REQ_VIEW_BLAME, OPEN_REFRESH);
+ refresh_view(view);
}
break;
string_copy_rev(opt_ref, blame->commit->parent_id);
string_copy(opt_file, blame->commit->parent_filename);
setup_blame_parent_line(view, blame);
- open_view(view, REQ_VIEW_BLAME, OPEN_REFRESH);
+ refresh_view(view);
}
break;
switch (request) {
case REQ_REFRESH:
load_refs();
- open_view(view, REQ_VIEW_BRANCH, OPEN_REFRESH);
+ refresh_view(view);
return REQ_NONE;
case REQ_TOGGLE_SORT_FIELD:
return request;
}
- open_view(view, REQ_VIEW_STATUS, OPEN_RELOAD);
+ refresh_view(view);
return REQ_NONE;
}
return request;
}
- VIEW(REQ_VIEW_STATUS)->p_restore = TRUE;
- open_view(view, REQ_VIEW_STATUS, OPEN_REFRESH);
+ refresh_view(view->parent);
/* Check whether the staged entry still exists, and close the
* stage view if it doesn't. */
return REQ_VIEW_CLOSE;
}
- open_view(view, REQ_VIEW_STAGE, OPEN_REFRESH);
+ refresh_view(view);
return REQ_NONE;
}
break;
case REQ_REFRESH:
load_refs();
- open_view(view, REQ_VIEW_MAIN, OPEN_REFRESH);
+ refresh_view(view);
break;
default:
return request;