"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Omar Polo <op@omarpolo.com>
Subject:
Re: fix hscrolling in split view
To:
Stefan Sperling <stsp@stsp.name>
Cc:
gameoftrees@openbsd.org
Date:
Fri, 17 Jun 2022 10:15:36 +0200

Download raw body.

Thread
Stefan Sperling <stsp@stsp.name> wrote:
> On Fri, Jun 17, 2022 at 09:56:52AM +0200, Omar Polo wrote:
> > @@ -1529,6 +1540,8 @@ draw_commit(struct tog_view *view, struct got_commit_o
> >  	if (newline)
> >  		*newline = '\0';
> >  	limit = avail - col;
> > +	if (view->child)
> > +		limit--;	/* for the border */
> 
> Check if limit > 0 before decrementing? Just for sanity.

sure; i thought of it at some point yesterday but i just forgot ^^

diff c74541a34e628aa7d0d42da084a6f66045315aed /home/op/w/got
blob - 183c31a912c364ea95baef1534e1f5908d1fb8fe
file + tog/tog.c
--- tog/tog.c
+++ tog/tog.c
@@ -763,31 +763,36 @@ view_resize(struct tog_view *view)
 	else
 		ncols = view->ncols + (COLS - view->cols);
 
-	if (wresize(view->window, nlines, ncols) == ERR)
-		return got_error_from_errno("wresize");
-	if (replace_panel(view->panel, view->window) == ERR)
-		return got_error_from_errno("replace_panel");
-	wclear(view->window);
-
-	view->nlines = nlines;
-	view->ncols = ncols;
-	view->lines = LINES;
-	view->cols = COLS;
-
 	if (view->child) {
 		view->child->begin_x = view_split_begin_x(view->begin_x);
 		if (view->child->begin_x == 0) {
+			ncols = COLS;
+
 			view_fullscreen(view->child);
 			if (view->child->focussed)
 				show_panel(view->child->panel);
 			else
 				show_panel(view->panel);
 		} else {
+			ncols = view->child->begin_x;
+
 			view_splitscreen(view->child);
 			show_panel(view->child->panel);
 		}
-	}
+	} else if (view->parent == NULL)
+		ncols = COLS;
 
+	if (wresize(view->window, nlines, ncols) == ERR)
+		return got_error_from_errno("wresize");
+	if (replace_panel(view->panel, view->window) == ERR)
+		return got_error_from_errno("replace_panel");
+	wclear(view->window);
+
+	view->nlines = nlines;
+	view->ncols = ncols;
+	view->lines = LINES;
+	view->cols = COLS;
+
 	return NULL;
 }
 
@@ -804,11 +809,13 @@ view_close_child(struct tog_view *view)
 	return err;
 }
 
-static void
+static const struct got_error *
 view_set_child(struct tog_view *view, struct tog_view *child)
 {
 	view->child = child;
 	child->parent = view;
+
+	return view_resize(view);
 }
 
 static int
@@ -1085,6 +1092,10 @@ view_loop(struct tog_view *view)
 			if (view->parent) {
 				view->parent->child = NULL;
 				view->parent->focus_child = 0;
+
+				err = view_resize(view->parent);
+				if (err)
+					break;
 			} else
 				TAILQ_REMOVE(&views, view, entry);
 
@@ -1529,6 +1540,8 @@ draw_commit(struct tog_view *view, struct got_commit_o
 	if (newline)
 		*newline = '\0';
 	limit = avail - col;
+	if (view->child && limit > 0)
+		limit--;	/* for the border */
 	err = format_line(&wlogmsg, &logmsg_width, &scrollx, logmsg, view->x,
 	    limit, col, 1);
 	if (err)
@@ -2695,7 +2708,9 @@ input_log_view(struct tog_view **new_view, struct tog_
 			err = view_close_child(view);
 			if (err)
 				return err;
-			view_set_child(view, diff_view);
+			err = view_set_child(view, diff_view);
+			if (err)
+				return err;
 			view->focus_child = 1;
 		} else
 			*new_view = diff_view;
@@ -2716,7 +2731,9 @@ input_log_view(struct tog_view **new_view, struct tog_
 			err = view_close_child(view);
 			if (err)
 				return err;
-			view_set_child(view, tree_view);
+			err = view_set_child(view, tree_view);
+			if (err)
+				return err;
 			view->focus_child = 1;
 		} else
 			*new_view = tree_view;
@@ -2800,7 +2817,9 @@ input_log_view(struct tog_view **new_view, struct tog_
 			err = view_close_child(view);
 			if (err)
 				return err;
-			view_set_child(view, ref_view);
+			err = view_set_child(view, ref_view);
+			if (err)
+				return err;
 			view->focus_child = 1;
 		} else
 			*new_view = ref_view;
@@ -5101,7 +5120,9 @@ input_blame_view(struct tog_view **new_view, struct to
 			err = view_close_child(view);
 			if (err)
 				break;
-			view_set_child(view, diff_view);
+			err = view_set_child(view, diff_view);
+			if (err)
+				break;
 			view->focus_child = 1;
 		} else
 			*new_view = diff_view;
@@ -5845,7 +5866,9 @@ input_tree_view(struct tog_view **new_view, struct tog
 			err = view_close_child(view);
 			if (err)
 				return err;
-			view_set_child(view, log_view);
+			err = view_set_child(view, log_view);
+			if (err)
+				return err;
 			view->focus_child = 1;
 		} else
 			*new_view = log_view;
@@ -5868,7 +5891,9 @@ input_tree_view(struct tog_view **new_view, struct tog
 			err = view_close_child(view);
 			if (err)
 				return err;
-			view_set_child(view, ref_view);
+			err = view_set_child(view, ref_view);
+			if (err)
+				return err;
 			view->focus_child = 1;
 		} else
 			*new_view = ref_view;
@@ -6002,7 +6027,9 @@ input_tree_view(struct tog_view **new_view, struct tog
 				err = view_close_child(view);
 				if (err)
 					return err;
-				view_set_child(view, blame_view);
+				err = view_set_child(view, blame_view);
+				if (err)
+					return err;
 				view->focus_child = 1;
 			} else
 				*new_view = blame_view;
@@ -6728,7 +6755,9 @@ input_ref_view(struct tog_view **new_view, struct tog_
 			err = view_close_child(view);
 			if (err)
 				return err;
-			view_set_child(view, log_view);
+			err = view_set_child(view, log_view);
+			if (err)
+				return err;
 			view->focus_child = 1;
 		} else
 			*new_view = log_view;
@@ -6748,7 +6777,9 @@ input_ref_view(struct tog_view **new_view, struct tog_
 			err = view_close_child(view);
 			if (err)
 				return err;
-			view_set_child(view, tree_view);
+			err = view_set_child(view, tree_view);
+			if (err)
+				return err;
 			view->focus_child = 1;
 		} else
 			*new_view = tree_view;