- g.y = wa.y + useless_gap
-
- c:geometry(g)
-
- -- Auxiliary windows.
- if #cls > 1
- then
- local at = 0
- for i = (#cls),2,-1
- do
- -- It's all fixed. If there are more than 5 clients,
- -- those additional clients will float. This is
- -- intentional.
- if at == 4
- then
- break
- end
-
- c = cls[i]
- g = {}
-
- if at == centerwork.top_left
- then
- -- top left
- g.x = wa.x + useless_gap
- g.y = wa.y + useless_gap
- g.width = slaveLwid - 2 * useless_gap
- g.height = slaveThei - useless_gap
- elseif at == centerwork.top_right
- then
- -- top right
- g.x = wa.x + slaveLwid + mainwid + useless_gap
- g.y = wa.y + useless_gap
- g.width = slaveRwid - 2 * useless_gap
- g.height = slaveThei - useless_gap
- elseif at == centerwork.bottom_left
- then
- -- bottom left
- g.x = wa.x + useless_gap
- g.y = wa.y + slaveThei + useless_gap
- g.width = slaveLwid - 2 * useless_gap
- g.height = slaveBhei - 2 * useless_gap
- elseif at == centerwork.bottom_right
- then
- -- bottom right
- g.x = wa.x + slaveLwid + mainwid + useless_gap
- g.y = wa.y + slaveThei + useless_gap
- g.width = slaveRwid - 2 * useless_gap
- g.height = slaveBhei - 2 * useless_gap
- end
-
- c:geometry(g)
-
- at = at + 1
+ g.y = wa.y
+ else -- horizontal
+ if nbrFirstSlaves > 0 then slaveFirstDim = floor(wa.width / nbrFirstSlaves) end
+ if nbrSecondSlaves > 0 then slaveSecondDim = floor(wa.width / nbrSecondSlaves) end
+
+ g.height = mainhei
+ g.width = wa.width
+
+ g.x = wa.x
+ g.y = wa.y + slaveThei
+ end
+
+ g.width = max(g.width, 1)
+ g.height = max(g.height, 1)
+
+ p.geometries[c] = g
+
+ -- Auxiliary clients
+ if #cls <= 1 then return end
+ for i = 2, #cls do
+ local c, g = cls[i], {}
+ local idxChecker, dimToAssign
+
+ local rowIndex = floor(i/2)
+
+ if layout.name == "centerwork" then
+ if i % 2 == 0 then -- left slave
+ g.x = wa.x
+ g.y = wa.y + (rowIndex - 1) * slaveFirstDim
+ g.width = slaveLwid
+
+ idxChecker, dimToAssign = nbrFirstSlaves, slaveFirstDim
+ else -- right slave
+ g.x = wa.x + slaveLwid + mainwid
+ g.y = wa.y + (rowIndex - 1) * slaveSecondDim
+ g.width = slaveRwid
+
+ idxChecker, dimToAssign = nbrSecondSlaves, slaveSecondDim
+ end
+
+ -- if last slave in row, use remaining space for it
+ if rowIndex == idxChecker then
+ g.height = wa.y + wa.height - g.y
+ else
+ g.height = dimToAssign
+ end
+ else
+ if i % 2 == 0 then -- top slave
+ g.x = wa.x + (rowIndex - 1) * slaveFirstDim
+ g.y = wa.y
+ g.height = slaveThei
+
+ idxChecker, dimToAssign = nbrFirstSlaves, slaveFirstDim
+ else -- bottom slave
+ g.x = wa.x + (rowIndex - 1) * slaveSecondDim
+ g.y = wa.y + slaveThei + mainhei
+ g.height = slaveBhei
+
+ idxChecker, dimToAssign = nbrSecondSlaves, slaveSecondDim