When an area is split in two, for example horizontally, one of the windows
should have height math.floor(previous height / 2) and the other
math.ceil(previous height / 2), to be certain that no gaps are left between the
windows.

For instance, if the first window has height h and the second window has height
math.floor(h / 2), the height of the third window should be math.ceil(h / 2)
instead of the same as for the second window.

So to compute the size of window n + 1 it’s necessary to remember the size of
window n - 1 as well as that of window n.

Signed-off-by: Fabienne Ducroquet <fabi...@gmail.com>
---
 lib/awful/layout/suit/spiral.lua.in | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/lib/awful/layout/suit/spiral.lua.in 
b/lib/awful/layout/suit/spiral.lua.in
index f96a7d1..188977c 100644
--- a/lib/awful/layout/suit/spiral.lua.in
+++ b/lib/awful/layout/suit/spiral.lua.in
@@ -7,6 +7,7 @@
 
 -- Grab environment we need
 local ipairs = ipairs
+local math = math
 
 -- awful.layout.suit.spiral
 local spiral = {}
@@ -15,28 +16,35 @@ local function do_spiral(p, _spiral)
     local wa = p.workarea
     local cls = p.clients
     local n = #cls
+    local old_width, old_height = wa.width, 2 * wa.height
 
     for k, c in ipairs(cls) do
-        if k < n then
-            if k % 2 == 0 then
-                wa.height = wa.height / 2
-            else
-                wa.width = wa.width / 2
+        if k % 2 == 0 then
+            wa.width, old_width = math.ceil(old_width / 2), wa.width
+            if k ~= n then
+                wa.height, old_height = math.floor(wa.height / 2), wa.height
+            end
+        else
+            wa.height, old_height = math.ceil(old_height / 2), wa.height
+            if k ~= n then
+                wa.width, old_width = math.floor(wa.width / 2), wa.width
             end
         end
 
         if k % 4 == 0 and _spiral then
             wa.x = wa.x - wa.width
-        elseif k % 2 == 0 or
-            (k % 4 == 3 and k < n and _spiral) then
-            wa.x = wa.x + wa.width
+        elseif k % 2 == 0 then
+            wa.x = wa.x + old_width
+        elseif k % 4 == 3 and k < n and _spiral then
+            wa.x = wa.x + math.ceil(old_width / 2)
         end
 
         if k % 4 == 1 and k ~= 1 and _spiral then
             wa.y = wa.y - wa.height
-        elseif k % 2 == 1 and k ~= 1 or
-            (k % 4 == 0 and k < n and _spiral) then
-            wa.y = wa.y + wa.height
+        elseif k % 2 == 1 and k ~= 1 then
+            wa.y = wa.y + old_height
+        elseif k % 4 == 0 and k < n and _spiral then
+            wa.y = wa.y + math.ceil(old_height / 2)
         end
 
         local g = {
-- 
1.8.5.2


-- 
To unsubscribe, send mail to awesome-devel-unsubscr...@naquadah.org.

Reply via email to