Code

Introduce refresh_view based on load_view
[tig.git] / tig.c
diff --git a/tig.c b/tig.c
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;
@@ -2714,7 +2740,7 @@ open_view(struct view *prev, enum request request, enum open_flags flags)
                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;
@@ -2732,16 +2758,6 @@ open_view(struct view *prev, enum request request, enum open_flags flags)
            (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;
@@ -2756,16 +2772,7 @@ open_view(struct view *prev, enum request request, enum open_flags flags)
                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
@@ -3376,7 +3383,7 @@ log_request(struct view *view, enum request request, struct line *line)
        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);
@@ -3552,8 +3559,7 @@ help_request(struct view *view, enum request request, struct line *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;
@@ -4423,7 +4429,7 @@ blame_request(struct view *view, enum request request, struct line *line)
                        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;
 
@@ -4436,7 +4442,7 @@ blame_request(struct view *view, enum request request, struct line *line)
                        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;
 
@@ -4579,7 +4585,7 @@ branch_request(struct view *view, enum request request, struct line *line)
        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:
@@ -5390,7 +5396,7 @@ status_request(struct view *view, enum request request, struct line *line)
                return request;
        }
 
-       open_view(view, REQ_VIEW_STATUS, OPEN_RELOAD);
+       refresh_view(view);
 
        return REQ_NONE;
 }
@@ -5670,8 +5676,7 @@ stage_request(struct view *view, enum request request, struct line *line)
                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. */
@@ -5680,7 +5685,7 @@ stage_request(struct view *view, enum request request, struct line *line)
                return REQ_VIEW_CLOSE;
        }
 
-       open_view(view, REQ_VIEW_STAGE, OPEN_REFRESH);
+       refresh_view(view);
 
        return REQ_NONE;
 }
@@ -5940,7 +5945,7 @@ main_request(struct view *view, enum request request, struct line *line)
                break;
        case REQ_REFRESH:
                load_refs();
-               open_view(view, REQ_VIEW_MAIN, OPEN_REFRESH);
+               refresh_view(view);
                break;
        default:
                return request;