Merge pull request #323 from actionless/grow-master

Add "master_fill_policy" tag property and its support in "tile" and "corner" layouts

Closes https://github.com/awesomeWM/awesome/pull/323/files.
This commit is contained in:
Daniel Hahler 2015-09-03 08:53:17 +02:00
commit 2b2c230f43
4 changed files with 46 additions and 4 deletions

View File

@ -192,6 +192,7 @@ capi.tag.connect_signal("property::windowfact", arrange_tag)
capi.tag.connect_signal("property::selected", arrange_tag)
capi.tag.connect_signal("property::activated", arrange_tag)
capi.tag.connect_signal("property::useless_gap", arrange_tag)
capi.tag.connect_signal("property::master_fill_policy", arrange_tag)
capi.tag.connect_signal("tagged", arrange_tag)
for s = 1, capi.screen.count() do

View File

@ -89,7 +89,7 @@ local function do_corner(p, orientation)
row.x_increment = row.win_width
row.win_idx = 0
-- Extend master if there is only a few windows
-- Extend master if there is only a few windows and "expand" policy is set
if #cls < 3 then
if row_privileged then
master.x = wa.x
@ -99,7 +99,12 @@ local function do_corner(p, orientation)
master.height = wa.height
end
if #cls < 2 then
if tag.getmfpol(t) == "expand" then
master = wa
else
master.x = master.x + (wa.width - master.width)/2
master.y = master.y + (wa.height - master.height)/2
end
end
end

View File

@ -234,13 +234,17 @@ local function do_tile(param, orientation)
place_master = false
end
local grow_master = tag.getmfpol(t) == "expand"
-- this was easier than writing functions because there is a lot of data we need
for d = 1,2 do
if place_master and nmaster > 0 then
local size = wa[width]
if nother > 0 then
if nother > 0 or not grow_master then
size = math.min(wa[width] * mwfact, wa[width] - (coord - wa[x]))
end
if nother == 0 and not grow_master then
coord = coord + (wa[width] - size)/2
end
if not data[0] then
data[0] = {}
end

View File

@ -410,6 +410,37 @@ function tag.getgap(t)
return tag.getproperty(t, "useless_gap") or beautiful.useless_gap or 0
end
--- Set size fill policy for the master client(s)
-- @tparam string policy Can be set to
-- "expand" (fill all the available workarea) or
-- "mwfact" (fill only an area inside the master width factor)
-- @tparam[opt=tag.selected()] tag t The tag to modify
function tag.setmfpol(policy, t)
local t = t or tag.selected()
tag.setproperty(t, "master_fill_policy", policy)
end
--- Toggle size fill policy for the master client(s)
-- between "expand" and "mwfact"
-- @tparam tag t The tag to modify, if null tag.selected() is used.
function tag.togglemfpol(t)
if tag.getmfpol(t) == "expand" then
tag.setmfpol("mwfact", t)
else
tag.setmfpol("expand", t)
end
end
--- Get size fill policy for the master client(s)
-- @tparam[opt=tag.selected()] tag t The tag
-- @treturn string Possible values are
-- "expand" (fill all the available workarea, default one) or
-- "mwfact" (fill only an area inside the master width factor)
function tag.getmfpol(t)
local t = t or tag.selected()
return tag.getproperty(t, "master_fill_policy") or "expand"
end
--- Set the number of master windows.
-- @param nmaster The number of master windows.
-- @param[opt] t The tag.
@ -703,6 +734,7 @@ capi.tag.add_signal("property::icon_only")
capi.tag.add_signal("property::layout")
capi.tag.add_signal("property::mwfact")
capi.tag.add_signal("property::useless_gap")
capi.tag.add_signal("property::master_fill_policy")
capi.tag.add_signal("property::ncol")
capi.tag.add_signal("property::nmaster")
capi.tag.add_signal("property::windowfact")