[BACK]Return to layout.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/layout.c between version 1.46 and 1.47

version 1.46, 2019/07/15 18:25:07 version 1.47, 2019/07/15 18:43:32
Line 39 
Line 39 
                     enum layout_type, int, int);                      enum layout_type, int, int);
 static int      layout_resize_pane_shrink(struct window *, struct layout_cell *,  static int      layout_resize_pane_shrink(struct window *, struct layout_cell *,
                     enum layout_type, int);                      enum layout_type, int);
 static int      layout_need_status(struct layout_cell *, int);  
 static u_int    layout_new_pane_size(struct window *, u_int,  static u_int    layout_new_pane_size(struct window *, u_int,
                     struct layout_cell *, enum layout_type, u_int, u_int,                      struct layout_cell *, enum layout_type, u_int, u_int,
                     u_int);                      u_int);
Line 199 
Line 198 
         lc->wp = NULL;          lc->wp = NULL;
 }  }
   
 /* Fix cell offsets based on their sizes. */  /* Fix cell offsets for a child cell. */
 static void  static void
 layout_fix_offsets1(struct layout_cell *lc)  layout_fix_offsets1(struct layout_cell *lc)
 {  {
Line 239 
Line 238 
         layout_fix_offsets1(lc);          layout_fix_offsets1(lc);
 }  }
   
 /*  /* Is this a top cell? */
  * Returns 1 if we need to reserve space for the pane status line. This is the  
  * case for the most upper panes only.  
  */  
 static int  static int
 layout_need_status(struct layout_cell *lc, int status)  layout_cell_is_top(struct window *w, struct layout_cell *lc)
 {  {
         struct layout_cell      *next;          struct layout_cell      *next;
   
         if (lc->parent != NULL) {          while (lc != w->layout_root) {
                 if (lc->parent->type == LAYOUT_LEFTRIGHT)                  next = lc->parent;
                         return (layout_need_status(lc->parent, status));                  if (next->type == LAYOUT_TOPBOTTOM &&
                       lc != TAILQ_FIRST(&next->cells))
                           return (0);
                   lc = next;
           }
           return (1);
   }
   
                 if (status == PANE_STATUS_TOP)  /* Is this a bottom cell? */
                         next = TAILQ_FIRST(&lc->parent->cells);  static int
                 else  layout_cell_is_bottom(struct window *w, struct layout_cell *lc)
                         next = TAILQ_LAST(&lc->parent->cells,layout_cells);  {
                 if (lc == next)          struct layout_cell      *next;
                         return (layout_need_status(lc->parent, status));  
                 return (0);          while (lc != w->layout_root) {
                   next = lc->parent;
                   if (next->type == LAYOUT_TOPBOTTOM &&
                       lc != TAILQ_LAST(&next->cells, layout_cells))
                           return (0);
                   lc = next;
         }          }
         return (1);          return (1);
 }  }
   
   /*
    * Returns 1 if we need to add an extra line for the pane status line. This is
    * the case for the most upper or lower panes only.
    */
   static int
   layout_add_border(struct window *w, struct layout_cell *lc, int status)
   {
           if (status == PANE_STATUS_TOP)
                   return (layout_cell_is_top(w, lc));
           if (status == PANE_STATUS_BOTTOM)
                   return (layout_cell_is_bottom(w, lc));
           return (0);
   }
   
 /* Update pane offsets and sizes based on their cells. */  /* Update pane offsets and sizes based on their cells. */
 void  void
 layout_fix_panes(struct window *w)  layout_fix_panes(struct window *w)
 {  {
         struct window_pane      *wp;          struct window_pane      *wp;
         struct layout_cell      *lc;          struct layout_cell      *lc;
         int                      shift, status;          int                      status;
   
         status = options_get_number(w->options, "pane-border-status");          status = options_get_number(w->options, "pane-border-status");
         TAILQ_FOREACH(wp, &w->panes, entry) {          TAILQ_FOREACH(wp, &w->panes, entry) {
                 if ((lc = wp->layout_cell) == NULL)                  if ((lc = wp->layout_cell) == NULL)
                         continue;                          continue;
   
                 if (status != PANE_STATUS_OFF)  
                         shift = layout_need_status(lc, status);  
                 else  
                         shift = 0;  
   
                 wp->xoff = lc->xoff;                  wp->xoff = lc->xoff;
                 wp->yoff = lc->yoff;                  wp->yoff = lc->yoff;
   
                 if (shift && status == PANE_STATUS_TOP)                  if (layout_add_border(w, lc, status)) {
                         wp->yoff += 1;                          if (status == PANE_STATUS_TOP)
                                   wp->yoff++;
                 window_pane_resize(wp, lc->sx, lc->sy - shift);                          window_pane_resize(wp, lc->sx, lc->sy - 1);
                   } else
                           window_pane_resize(wp, lc->sx, lc->sy);
         }          }
 }  }
   
Line 324 
Line 342 
         status = options_get_number(w->options, "pane-border-status");          status = options_get_number(w->options, "pane-border-status");
         if (lc->type == LAYOUT_WINDOWPANE) {          if (lc->type == LAYOUT_WINDOWPANE) {
                 /* Space available in this cell only. */                  /* Space available in this cell only. */
                 minimum = PANE_MINIMUM;                  if (type == LAYOUT_LEFTRIGHT) {
                 if (type == LAYOUT_LEFTRIGHT)  
                         available = lc->sx;                          available = lc->sx;
                 else {                          minimum = PANE_MINIMUM;
                   } else {
                         available = lc->sy;                          available = lc->sy;
                         if (status != PANE_STATUS_OFF)                          if (layout_add_border(w, lc, status))
                                 minimum += layout_need_status(lc, status);                                  minimum = PANE_MINIMUM + 1;
                           else
                                   minimum = PANE_MINIMUM;
                 }                  }
                 if (available > minimum)                  if (available > minimum)
                         available -= minimum;                          available -= minimum;
Line 873 
Line 893 
                         return (NULL);                          return (NULL);
                 break;                  break;
         case LAYOUT_TOPBOTTOM:          case LAYOUT_TOPBOTTOM:
                 minimum = PANE_MINIMUM * 2 + 1;                  if (layout_add_border(wp->window, lc, status))
                 if (status != PANE_STATUS_OFF)                          minimum = PANE_MINIMUM * 2 + 2;
                         minimum += layout_need_status(lc, status);                  else
                           minimum = PANE_MINIMUM * 2 + 1;
                 if (sy < minimum)                  if (sy < minimum)
                         return (NULL);                          return (NULL);
                 break;                  break;
Line 1041 
Line 1062 
         if (parent->type == LAYOUT_LEFTRIGHT)          if (parent->type == LAYOUT_LEFTRIGHT)
                 size = parent->sx;                  size = parent->sx;
         else if (parent->type == LAYOUT_TOPBOTTOM) {          else if (parent->type == LAYOUT_TOPBOTTOM) {
                 size = parent->sy;                  if (layout_add_border(w, parent, status))
                 if (status != PANE_STATUS_OFF)                          size = parent->sy - 1;
                         size -= layout_need_status(parent, status);                  else
                           size = parent->sy;
         } else          } else
                 return (0);                  return (0);
         if (size < number - 1)          if (size < number - 1)
Line 1061 
Line 1083 
                         change = each - (int)lc->sx;                          change = each - (int)lc->sx;
                         layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, change);                          layout_resize_adjust(w, lc, LAYOUT_LEFTRIGHT, change);
                 } else if (parent->type == LAYOUT_TOPBOTTOM) {                  } else if (parent->type == LAYOUT_TOPBOTTOM) {
                         this = each;                          if (layout_add_border(w, lc, status))
                         if (status != PANE_STATUS_OFF)                                  this = each + 1;
                                 this += layout_need_status(lc, status);                          else
                                   this = each;
                         change = this - (int)lc->sy;                          change = this - (int)lc->sy;
                         layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, change);                          layout_resize_adjust(w, lc, LAYOUT_TOPBOTTOM, change);
                 }                  }

Legend:
Removed from v.1.46  
changed lines
  Added in v.1.47