fork download
  1. # HG changeset patch
  2. # Parent 151b3edef04b13ede6e60c5567421867ef534b55
  3.  
  4. diff --git a/layout-set.c b/layout-set.c
  5. --- a/layout-set.c
  6. +++ b/layout-set.c
  7. @@ -126,6 +126,7 @@
  8. struct window_pane *wp;
  9. struct layout_cell *lc, *lcnew;
  10. u_int i, n, width, xoff;
  11. + int rem;
  12.  
  13. layout_print_cell(w->layout_root, __func__, 1);
  14.  
  15. @@ -138,6 +139,7 @@
  16. width = (w->sx - (n - 1)) / n;
  17. if (width < PANE_MINIMUM)
  18. width = PANE_MINIMUM;
  19. + rem = w->sx - (width + 1) * n + 1;
  20.  
  21. /* Free the old root and construct a new. */
  22. layout_free(w);
  23. @@ -150,7 +152,7 @@
  24. TAILQ_FOREACH(wp, &w->panes, entry) {
  25. /* Create child cell. */
  26. lcnew = layout_create_cell(lc);
  27. - layout_set_size(lcnew, width, w->sy, xoff, 0);
  28. + layout_set_size(lcnew, width + (rem-- > 0), w->sy, xoff, 0);
  29. layout_make_leaf(lcnew, wp);
  30. TAILQ_INSERT_TAIL(&lc->cells, lcnew, entry);
  31.  
  32. @@ -158,12 +160,6 @@
  33. xoff += width + 1;
  34. }
  35.  
  36. - /* Allocate any remaining space. */
  37. - if (w->sx > xoff - 1) {
  38. - lc = TAILQ_LAST(&lc->cells, layout_cells);
  39. - layout_resize_adjust(lc, LAYOUT_LEFTRIGHT, w->sx - (xoff - 1));
  40. - }
  41. -
  42. /* Fix cell offsets. */
  43. layout_fix_offsets(lc);
  44. layout_fix_panes(w, w->sx, w->sy);
  45. @@ -179,6 +175,7 @@
  46. struct window_pane *wp;
  47. struct layout_cell *lc, *lcnew;
  48. u_int i, n, height, yoff;
  49. + int rem;
  50.  
  51. layout_print_cell(w->layout_root, __func__, 1);
  52.  
  53. @@ -191,6 +188,7 @@
  54. height = (w->sy - (n - 1)) / n;
  55. if (height < PANE_MINIMUM)
  56. height = PANE_MINIMUM;
  57. + rem = w->sy - (height + 1) * n + 1;
  58.  
  59. /* Free the old root and construct a new. */
  60. layout_free(w);
  61. @@ -203,7 +201,7 @@
  62. TAILQ_FOREACH(wp, &w->panes, entry) {
  63. /* Create child cell. */
  64. lcnew = layout_create_cell(lc);
  65. - layout_set_size(lcnew, w->sx, height, 0, yoff);
  66. + layout_set_size(lcnew, w->sx, height + (rem-- > 0), 0, yoff);
  67. layout_make_leaf(lcnew, wp);
  68. TAILQ_INSERT_TAIL(&lc->cells, lcnew, entry);
  69.  
  70. @@ -211,12 +209,6 @@
  71. yoff += height + 1;
  72. }
  73.  
  74. - /* Allocate any remaining space. */
  75. - if (w->sy > yoff - 1) {
  76. - lc = TAILQ_LAST(&lc->cells, layout_cells);
  77. - layout_resize_adjust(lc, LAYOUT_TOPBOTTOM, w->sy - (yoff - 1));
  78. - }
  79. -
  80. /* Fix cell offsets. */
  81. layout_fix_offsets(lc);
  82. layout_fix_panes(w, w->sx, w->sy);
  83. @@ -233,6 +225,7 @@
  84. struct layout_cell *lc, *lcmain, *lcrow, *lcchild;
  85. u_int n, mainheight, otherheight, width, height;
  86. u_int used, i, j, columns, rows, totalrows;
  87. + int rem;
  88.  
  89. layout_print_cell(w->layout_root, __func__, 1);
  90.  
  91. @@ -249,6 +242,7 @@
  92. rows = 1 + (n - 1) / columns;
  93. columns = 1 + (n - 1) / rows;
  94. width = (w->sx - (n - 1)) / columns;
  95. + rem = w->sx - (width + 1) * columns + 1;
  96.  
  97. /* Get the main pane height and add one for separator line. */
  98. mainheight = options_get_number(&w->options, "main-pane-height") + 1;
  99. @@ -312,7 +306,7 @@
  100. for (i = 0; i < columns; i++) {
  101. /* Create and add a pane cell. */
  102. lcchild = layout_create_cell(lcrow);
  103. - layout_set_size(lcchild, width, height, 0, 0);
  104. + layout_set_size(lcchild, width + (rem-- > 0), height, 0, 0);
  105. layout_make_leaf(lcchild, wp);
  106. TAILQ_INSERT_TAIL(&lcrow->cells, lcchild, entry);
  107.  
  108. @@ -320,15 +314,6 @@
  109. if ((wp = TAILQ_NEXT(wp, entry)) == NULL)
  110. break;
  111. }
  112. -
  113. - /* Adjust the row to fit the full width if necessary. */
  114. - if (i == columns)
  115. - i--;
  116. - used = ((i + 1) * (width + 1)) - 1;
  117. - if (w->sx <= used)
  118. - continue;
  119. - lcchild = TAILQ_LAST(&lcrow->cells, layout_cells);
  120. - layout_resize_adjust(lcchild, LAYOUT_LEFTRIGHT, w->sx - used);
  121. }
  122.  
  123. /* Adjust the last row height to fit if necessary. */
  124. @@ -354,6 +339,7 @@
  125. struct layout_cell *lc, *lcmain, *lccolumn, *lcchild;
  126. u_int n, mainwidth, otherwidth, width, height;
  127. u_int used, i, j, columns, rows, totalcolumns;
  128. + int rem;
  129.  
  130. layout_print_cell(w->layout_root, __func__, 1);
  131.  
  132. @@ -370,6 +356,7 @@
  133. columns = 1 + (n - 1) / rows;
  134. rows = 1 + (n - 1) / columns;
  135. height = (w->sy - (n - 1)) / rows;
  136. + rem = w->sy - (height + 1) * rows + 1;
  137.  
  138. /* Get the main pane width and add one for separator line. */
  139. mainwidth = options_get_number(&w->options, "main-pane-width") + 1;
  140. @@ -433,7 +420,7 @@
  141. for (i = 0; i < rows; i++) {
  142. /* Create and add a pane cell. */
  143. lcchild = layout_create_cell(lccolumn);
  144. - layout_set_size(lcchild, width, height, 0, 0);
  145. + layout_set_size(lcchild, width, height + (rem-- > 0), 0, 0);
  146. layout_make_leaf(lcchild, wp);
  147. TAILQ_INSERT_TAIL(&lccolumn->cells, lcchild, entry);
  148.  
  149. @@ -441,15 +428,6 @@
  150. if ((wp = TAILQ_NEXT(wp, entry)) == NULL)
  151. break;
  152. }
  153. -
  154. - /* Adjust the column to fit the full height if necessary. */
  155. - if (i == rows)
  156. - i--;
  157. - used = ((i + 1) * (height + 1)) - 1;
  158. - if (w->sy <= used)
  159. - continue;
  160. - lcchild = TAILQ_LAST(&lccolumn->cells, layout_cells);
  161. - layout_resize_adjust(lcchild, LAYOUT_TOPBOTTOM, w->sy - used);
  162. }
  163.  
  164. /* Adjust the last column width to fit if necessary. */
  165. @@ -475,6 +453,8 @@
  166. struct layout_cell *lc, *lcrow, *lcchild;
  167. u_int n, width, height, used;
  168. u_int i, j, columns, rows;
  169. + int wrem, wrem1, hrem;
  170. + u_int width1, height1;
  171.  
  172. layout_print_cell(w->layout_root, __func__, 1);
  173.  
  174. @@ -498,12 +478,13 @@
  175. height = (w->sy - (rows - 1)) / rows;
  176. if (height < PANE_MINIMUM)
  177. height = PANE_MINIMUM;
  178. + wrem = w->sx - (width + 1) * columns + 1;
  179. + hrem = w->sy - (height + 1) * rows + 1;
  180.  
  181. /* Free old tree and create a new root. */
  182. layout_free(w);
  183. lc = w->layout_root = layout_create_cell(NULL);
  184. - layout_set_size(lc, (width + 1) * columns - 1,
  185. - (height + 1) * rows - 1, 0, 0);
  186. + layout_set_size(lc, w->sx, w->sy, 0, 0);
  187. layout_make_node(lc, LAYOUT_TOPBOTTOM);
  188.  
  189. /* Create a grid of the cells. */
  190. @@ -515,7 +496,8 @@
  191.  
  192. /* Create the new row. */
  193. lcrow = layout_create_cell(lc);
  194. - layout_set_size(lcrow, w->sx, height, 0, 0);
  195. + height1 = height + (hrem-- > 0);
  196. + layout_set_size(lcrow, w->sx, height1, 0, 0);
  197. TAILQ_INSERT_TAIL(&lc->cells, lcrow, entry);
  198.  
  199. /* If only one column, just use the row directly. */
  200. @@ -526,13 +508,17 @@
  201. }
  202.  
  203. /* Add in the columns. */
  204. + wrem1 = wrem;
  205. + used = 0;
  206. layout_make_node(lcrow, LAYOUT_LEFTRIGHT);
  207. for (i = 0; i < columns; i++) {
  208. /* Create and add a pane cell. */
  209. lcchild = layout_create_cell(lcrow);
  210. - layout_set_size(lcchild, width, height, 0, 0);
  211. + width1 = width + (wrem1-- > 0);
  212. + layout_set_size(lcchild, width1, height1, 0, 0);
  213. layout_make_leaf(lcchild, wp);
  214. TAILQ_INSERT_TAIL(&lcrow->cells, lcchild, entry);
  215. + used += width1 + 1;
  216.  
  217. /* Move to the next cell. */
  218. if ((wp = TAILQ_NEXT(wp, entry)) == NULL)
  219. @@ -543,22 +529,13 @@
  220. * Adjust the row and columns to fit the full width if
  221. * necessary.
  222. */
  223. - if (i == columns)
  224. - i--;
  225. - used = ((i + 1) * (width + 1)) - 1;
  226. + used--;
  227. if (w->sx <= used)
  228. continue;
  229. lcchild = TAILQ_LAST(&lcrow->cells, layout_cells);
  230. layout_resize_adjust(lcchild, LAYOUT_LEFTRIGHT, w->sx - used);
  231. }
  232.  
  233. - /* Adjust the last row height to fit if necessary. */
  234. - used = (rows * height) + rows - 1;
  235. - if (w->sy > used) {
  236. - lcrow = TAILQ_LAST(&lc->cells, layout_cells);
  237. - layout_resize_adjust(lcrow, LAYOUT_TOPBOTTOM, w->sy - used);
  238. - }
  239. -
  240. /* Fix cell offsets. */
  241. layout_fix_offsets(lc);
  242. layout_fix_panes(w, w->sx, w->sy);
  243.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty