Merge pull request #1776 from psychon/emit_property_floating

Always emit property::floating when needed
This commit is contained in:
Emmanuel Lepage Vallée 2017-05-16 13:57:51 -04:00 committed by GitHub
commit b6e6a04895
2 changed files with 61 additions and 6 deletions

View File

@ -667,18 +667,39 @@ function client.object.get_floating(c)
if value ~= nil then
return value
end
if c.type ~= "normal"
return client.property.get(c, "_implicitly_floating") or false
end
end
-- When a client is not explicitly assigned a floating state, it might
-- implicitly end up being floating. The following makes sure that
-- property::floating is still emitted if this implicit floating state changes.
local function update_implicitly_floating(c)
local explicit = client.property.get(c, "floating")
if explicit ~= nil then
return
end
local cur = client.property.get(c, "_implicitly_floating")
local new = c.type ~= "normal"
or c.fullscreen
or c.maximized_vertical
or c.maximized_horizontal
or c.maximized
or client.object.is_fixed(c) then
return true
end
return false
or client.object.is_fixed(c)
if cur ~= new then
client.property.set(c, "_implicitly_floating", new)
c:emit_signal("property::floating")
end
end
capi.client.connect_signal("property::type", update_implicitly_floating)
capi.client.connect_signal("property::fullscreen", update_implicitly_floating)
capi.client.connect_signal("property::maximized_vertical", update_implicitly_floating)
capi.client.connect_signal("property::maximized_horizontal", update_implicitly_floating)
capi.client.connect_signal("property::maximized", update_implicitly_floating)
capi.client.connect_signal("property::size_hints", update_implicitly_floating)
--- Toggle the floating state of a client between 'auto' and 'true'.
-- Use `c.floating = not c.floating`
-- @deprecated awful.client.floating.toggle

View File

@ -74,7 +74,41 @@ local steps = {
return true
end
end
end,
-- Test implicitly floating state: Even though a client way not explicitly
-- made floating, it could still end up being floating
function()
local c = client.get()[1]
assert(c ~= nil)
awful.client.property.set(c, "floating", nil)
assert(not c.floating)
assert(not c.maximized)
local signal_count = 0
c:connect_signal("property::floating", function()
signal_count = signal_count + 1
end)
c.maximized = true
assert(c.floating)
assert(signal_count == 1)
c.fullscreen = true
assert(c.floating)
assert(signal_count == 1)
c.maximized = false
assert(c.floating)
assert(signal_count == 1)
c.fullscreen = false
assert(c.floating == false)
assert(signal_count == 2)
return true
end,
}
local original_count, c1, c2 = 0