~mdw
/
tig
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Only split the tree view when the tree view is visible
[tig]
/
tig.c
diff --git
a/tig.c
b/tig.c
index
7dba19d
..
384fe21
100644
(file)
--- a/
tig.c
+++ b/
tig.c
@@
-1432,12
+1432,10
@@
update_display_cursor(void)
/* Scrolling backend */
static void
/* Scrolling backend */
static void
-do_scroll_view(struct view *view, int lines
, bool redraw
)
+do_scroll_view(struct view *view, int lines)
{
bool redraw_current_line = FALSE;
{
bool redraw_current_line = FALSE;
- assert(view_is_displayed(view));
-
/* The rendering expects the new offset. */
view->offset += lines;
/* The rendering expects the new offset. */
view->offset += lines;
@@
-1474,9
+1472,6
@@
do_scroll_view(struct view *view, int lines, bool redraw)
draw_view_line(view, view->lineno - view->offset);
}
draw_view_line(view, view->lineno - view->offset);
}
- if (!redraw)
- return;
-
redrawwin(view->win);
wrefresh(view->win);
report("");
redrawwin(view->win);
wrefresh(view->win);
report("");
@@
-1488,6
+1483,8
@@
scroll_view(struct view *view, enum request request)
{
int lines = 1;
{
int lines = 1;
+ assert(view_is_displayed(view));
+
switch (request) {
case REQ_SCROLL_PAGE_DOWN:
lines = view->height;
switch (request) {
case REQ_SCROLL_PAGE_DOWN:
lines = view->height;
@@
-1519,13
+1516,14
@@
scroll_view(struct view *view, enum request request)
die("request %d not handled in switch", request);
}
die("request %d not handled in switch", request);
}
- do_scroll_view(view, lines
, TRUE
);
+ do_scroll_view(view, lines);
}
/* Cursor moving */
static void
}
/* Cursor moving */
static void
-move_view(struct view *view, enum request request
, bool redraw
)
+move_view(struct view *view, enum request request)
{
{
+ bool scroll = FALSE;
int steps;
switch (request) {
int steps;
switch (request) {
@@
-1572,10
+1570,6
@@
move_view(struct view *view, enum request request, bool redraw)
view->lineno += steps;
assert(0 <= view->lineno && view->lineno < view->lines);
view->lineno += steps;
assert(0 <= view->lineno && view->lineno < view->lines);
- /* Repaint the old "current" line if we be scrolling */
- if (ABS(steps) < view->height)
- draw_view_line(view, view->lineno - steps - view->offset);
-
/* Check whether the view needs to be scrolled */
if (view->lineno < view->offset ||
view->lineno >= view->offset + view->height) {
/* Check whether the view needs to be scrolled */
if (view->lineno < view->offset ||
view->lineno >= view->offset + view->height) {
@@
-1591,15
+1585,26
@@
move_view(struct view *view, enum request request, bool redraw)
}
}
}
}
- do_scroll_view(view, steps, redraw);
+ scroll = TRUE;
+ }
+
+ if (!view_is_displayed(view)) {
+ view->offset += steps;
+ view->ops->select(view, &view->line[view->lineno]);
return;
}
return;
}
- /* Draw the current line */
- draw_view_line(view, view->lineno - view->offset);
+ /* Repaint the old "current" line if we be scrolling */
+ if (ABS(steps) < view->height)
+ draw_view_line(view, view->lineno - steps - view->offset);
- if (!redraw)
+ if (scroll) {
+ do_scroll_view(view, steps);
return;
return;
+ }
+
+ /* Draw the current line */
+ draw_view_line(view, view->lineno - view->offset);
redrawwin(view->win);
wrefresh(view->win);
redrawwin(view->win);
wrefresh(view->win);
@@
-2014,7
+2019,7
@@
open_view(struct view *prev, enum request request, enum open_flags flags)
/* Scroll the view that was split if the current line is
* outside the new limited view. */
/* Scroll the view that was split if the current line is
* outside the new limited view. */
- do_scroll_view(prev, lines
, TRUE
);
+ do_scroll_view(prev, lines);
}
if (prev && view != prev) {
}
if (prev && view != prev) {
@@
-2059,7
+2064,7
@@
view_driver(struct view *view, enum request request)
case REQ_MOVE_PAGE_DOWN:
case REQ_MOVE_FIRST_LINE:
case REQ_MOVE_LAST_LINE:
case REQ_MOVE_PAGE_DOWN:
case REQ_MOVE_FIRST_LINE:
case REQ_MOVE_LAST_LINE:
- move_view(view, request
, TRUE
);
+ move_view(view, request);
break;
case REQ_SCROLL_LINE_DOWN:
break;
case REQ_SCROLL_LINE_DOWN:
@@
-2092,14
+2097,12
@@
view_driver(struct view *view, enum request request)
view->parent == VIEW(REQ_VIEW_MAIN)) ||
(view == VIEW(REQ_VIEW_BLOB) &&
view->parent == VIEW(REQ_VIEW_TREE))) {
view->parent == VIEW(REQ_VIEW_MAIN)) ||
(view == VIEW(REQ_VIEW_BLOB) &&
view->parent == VIEW(REQ_VIEW_TREE))) {
- bool redraw = display[1] == view;
-
view = view->parent;
view = view->parent;
- move_view(view, request
, redraw
);
- if (
redraw
)
+ move_view(view, request);
+ if (
view_is_displayed(view)
)
update_view_title(view);
} else {
update_view_title(view);
} else {
- move_view(view, request
, TRUE
);
+ move_view(view, request);
break;
}
/* Fall-through */
break;
}
/* Fall-through */
@@
-2554,7
+2557,7
@@
tree_read(struct view *view, char *text)
static bool
tree_enter(struct view *view, struct line *line)
{
static bool
tree_enter(struct view *view, struct line *line)
{
- enum open_flags flags = OPEN_DEFAULT;
+ enum open_flags flags =
display[0] == view ? OPEN_SPLIT :
OPEN_DEFAULT;
char *data = line->data;
enum request request;
char *data = line->data;
enum request request;
@@
-2589,10
+2592,6
@@
tree_enter(struct view *view, struct line *line)
break;
case LINE_TREE_FILE:
break;
case LINE_TREE_FILE:
- /* This causes the blob view to become split, and not having it
- * in the tree dir case will make the blob view automatically
- * disappear when moving to a different directory. */
- flags |= OPEN_SPLIT;
request = REQ_VIEW_BLOB;
break;
request = REQ_VIEW_BLOB;
break;