Commit Diff


commit - 4e4a9ac8bc1f43c6f8c14b163ee83d5a54f7a192
commit + 0dbbbe90fd9a3e5eec46f03459367552d13fec3c
blob - 0a55123b6b489cb5e6153aa48023d22080daa131
blob + 4a079e6345d31a3cebffc06b28e24bb8feed1604
--- tog/tog.c
+++ tog/tog.c
@@ -762,32 +762,37 @@ view_resize(struct tog_view *view)
 		ncols = view->ncols - (view->cols - COLS);
 	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);
 
@@ -2697,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;
@@ -2718,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;
@@ -2802,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;
@@ -5103,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;
@@ -5847,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;
@@ -5870,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;
@@ -6004,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;
@@ -6730,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;
@@ -6750,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;