awesome/tests/test-awful-layout.lua
Uli Schlachter 3bb8efd2db Re-arrange the magnifier layout on focus changes
Just re-arranging on every focus change would cause useless/needless
re-arranges (which have no effect except to waste CPU time). Thus, this
adds a special (undocumented) flag on layouts that makes sure that a
rearrange occurs when the focus changes.

Fixes: https://github.com/awesomeWM/awesome/issues/1799
Signed-off-by: Uli Schlachter <psychon@znc.in>
2017-06-09 10:13:14 +02:00

186 lines
3.9 KiB
Lua

-- This test hit the client layout code paths to see if there is errors.
-- it doesn't check if the layout are correct.
local awful = require("awful")
local gtable = require("gears.table")
local first_layout = nil
local t = nil
local has_spawned = false
local steps = {
-- Add enough clients
function(count)
if count <= 1 and not has_spawned then
for _=1, 5 do awful.spawn("xterm") end
has_spawned = true
elseif #client.get() >= 5 then
first_layout = client.focus:tags()[1].layout
t = client.focus:tags()[1]
return true
end
end,
}
-- Test if layouts are called
do
local c1, c2
local arrange_expected = false
local fake_layout = {
arrange = function()
assert(arrange_expected)
arrange_expected = false
end,
name = "fake",
}
table.insert(steps, function()
c1, c2 = client.get()[1], client.get()[2]
client.focus = c1
arrange_expected = true
awful.layout.set(fake_layout)
return true
end)
table.insert(steps, function()
assert(arrange_expected == false)
arrange_expected = false
client.focus = c2
return true
end)
table.insert(steps, function()
-- This sync is needed to avoid a race: Consider the code
-- client.focus = c2
-- gears.timer.start_new(0, function()
-- client.focus = c1
-- end)
-- The C code would focus c2, but Lua would then change the focus to c1
-- before the X11 server acknowledged the focus change (FocusIn event).
-- Thus, when that event comes in, the C code things that c1 currently
-- has the focus and thus would do c2:emit_signal("focus"). Then, when
-- the FocusIn event for c1 comes, it would do c1:emit_signal("focus").
awesome.sync()
return true
end)
table.insert(steps, function()
assert(arrange_expected == false)
arrange_expected = true
fake_layout.need_focus_update = true
client.focus = c1
return true
end)
table.insert(steps, function()
assert(arrange_expected == false)
awful.layout.set(awful.layout.suit.floating)
return true
end)
end
local function next_layout()
awful.layout.inc(1)
assert(client.focus:tags()[1].layout ~= first_layout)
return true
end
-- Test most properties for each layouts
local common_steps = {
function()
assert(#t:clients() == 5)
t.master_count = 2
return true
end,
function()
t.master_count = 0
return true
end,
function()
t.master_count = 6 --more than #client.get(1)
return true
end,
function()
t.master_count = 1
return true
end,
function()
t.column_count = 2
return true
end,
function()
t.column_count = 6 --more than #client.get(1)
return true
end,
function()
t.column_count = 1
return true
end,
function()
t.master_fill_policy = t.master_fill_policy == "master_width_factor" and
"expand" or "master_width_factor"
return true
end,
function()
t.master_width_factor = 0.75
return true
end,
function()
t.master_width_factor = 0
return true
end,
function()
t.master_width_factor = 1
return true
end,
function()
t.master_width_factor = 0.5
return true
end,
function()
t.gap = t.gap == 0 and 5 or 0
return true
end,
}
local first = false
for _ in ipairs(awful.layout.layouts) do
if not first then
first = true
else
gtable.merge(steps, {next_layout})
end
gtable.merge(steps, common_steps)
end
require("_runner").run_steps(steps)
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80