From 00d265b841a3616128c76bbaee6eda4cce46743d Mon Sep 17 00:00:00 2001 From: Ryan McBride Date: Mon, 9 Feb 2009 04:12:09 +0000 Subject: [PATCH] Don't use an uninitialised variable when calculating the width of the master area; while we're here, handle the case where the first window is floating, or there are no tiled windows at all. Sizing issue reported by azmarco. --- scrotwm.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scrotwm.c b/scrotwm.c index 835c1d4..4775e91 100644 --- a/scrotwm.c +++ b/scrotwm.c @@ -1410,7 +1410,8 @@ stack_master(struct workspace *ws, struct swm_geometry *g, int rot, int flip) XWindowChanges wc; struct swm_geometry win_g, r_g = *g; struct ws_win *win, *winfocus; - int i, j, s, w_inc, h_inc, w_base, h_base, stacks; + int i, j, s, stacks; + int w_inc = 1, h_inc, w_base = 1, h_base; int hrh, extra, h_slice, last_h = 0; int split, colno, winno, mwin, msize, mscale; int remain, missing, v_slice;; @@ -1426,7 +1427,13 @@ stack_master(struct workspace *ws, struct swm_geometry *g, int rot, int flip) ws->focus = TAILQ_FIRST(&ws->winlist); winfocus = cur_focus ? cur_focus : ws->focus; - win = TAILQ_FIRST(&ws->winlist); + TAILQ_FOREACH(win, &ws->winlist, entry) + if (win->transient == 0 && win->floating == 0) + break; + + if (win == NULL) + goto notiles; + if (rot) { w_inc = win->sh.width_inc; w_base = win->sh.base_width; @@ -1461,7 +1468,7 @@ stack_master(struct workspace *ws, struct swm_geometry *g, int rot, int flip) remain = (win_g.w - w_base) % w_inc; missing = w_inc - remain; - if (missing <= extra || j == 0) { + if (missing <= extra) { extra -= missing; win_g.w += missing; } else { @@ -1558,6 +1565,7 @@ stack_master(struct workspace *ws, struct swm_geometry *g, int rot, int flip) j++; } + notiles: /* now, stack all the floaters and transients */ TAILQ_FOREACH(win, &ws->winlist, entry) { if (win->transient == 0 && win->floating == 0) -- 1.7.10.4