Support screen objects in some of awful
This commits makes a random selection of modules in awful support screen objects and accept them as parameters everywhere where a screen index is accepted. Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
parent
65b403c34a
commit
2792fe731e
|
@ -21,7 +21,7 @@ local timer = require("gears.timer")
|
||||||
local function check_focus(obj)
|
local function check_focus(obj)
|
||||||
-- When no visible client has the focus...
|
-- When no visible client has the focus...
|
||||||
if not client.focus or not client.focus:isvisible() then
|
if not client.focus or not client.focus:isvisible() then
|
||||||
local c = aclient.focus.history.get(obj.screen, 0, aclient.focus.filter)
|
local c = aclient.focus.history.get(screen[obj.screen].index, 0, aclient.focus.filter)
|
||||||
if c then
|
if c then
|
||||||
c:emit_signal("request::activate", "autofocus.check_focus",
|
c:emit_signal("request::activate", "autofocus.check_focus",
|
||||||
{raise=false})
|
{raise=false})
|
||||||
|
@ -41,9 +41,10 @@ end
|
||||||
local function check_focus_tag(t)
|
local function check_focus_tag(t)
|
||||||
local s = atag.getscreen(t)
|
local s = atag.getscreen(t)
|
||||||
if not s then return end
|
if not s then return end
|
||||||
|
s = screen[s]
|
||||||
check_focus({ screen = s })
|
check_focus({ screen = s })
|
||||||
if client.focus and client.focus.screen ~= s then
|
if client.focus and client.focus.screen ~= s.index then
|
||||||
local c = aclient.focus.history.get(s, 0, aclient.focus.filter)
|
local c = aclient.focus.history.get(s.index, 0, aclient.focus.filter)
|
||||||
if c then
|
if c then
|
||||||
c:emit_signal("request::activate", "autofocus.check_focus_tag",
|
c:emit_signal("request::activate", "autofocus.check_focus_tag",
|
||||||
{raise=false})
|
{raise=false})
|
||||||
|
|
|
@ -23,6 +23,10 @@ local tag = require("awful.tag")
|
||||||
local client = require("awful.client")
|
local client = require("awful.client")
|
||||||
local timer = require("gears.timer")
|
local timer = require("gears.timer")
|
||||||
|
|
||||||
|
local function get_screen(s)
|
||||||
|
return s and capi.screen[s]
|
||||||
|
end
|
||||||
|
|
||||||
local layout = {}
|
local layout = {}
|
||||||
|
|
||||||
--- Default predefined layouts
|
--- Default predefined layouts
|
||||||
|
@ -57,16 +61,17 @@ local arrange_lock = false
|
||||||
local delayed_arrange = {}
|
local delayed_arrange = {}
|
||||||
|
|
||||||
--- Get the current layout.
|
--- Get the current layout.
|
||||||
-- @param screen The screen number.
|
-- @param screen The screen.
|
||||||
-- @return The layout function.
|
-- @return The layout function.
|
||||||
function layout.get(screen)
|
function layout.get(screen)
|
||||||
local t = tag.selected(screen)
|
screen = get_screen(screen)
|
||||||
|
local t = tag.selected(screen and screen.index)
|
||||||
return tag.getproperty(t, "layout") or layout.suit.floating
|
return tag.getproperty(t, "layout") or layout.suit.floating
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Change the layout of the current tag.
|
--- Change the layout of the current tag.
|
||||||
-- @param i Relative index.
|
-- @param i Relative index.
|
||||||
-- @param s The screen number.
|
-- @param s The screen.
|
||||||
-- @param[opt] layouts A table of layouts.
|
-- @param[opt] layouts A table of layouts.
|
||||||
function layout.inc(i, s, layouts)
|
function layout.inc(i, s, layouts)
|
||||||
if type(i) == "table" then
|
if type(i) == "table" then
|
||||||
|
@ -74,7 +79,8 @@ function layout.inc(i, s, layouts)
|
||||||
-- this was changed so that 'layouts' can be an optional parameter
|
-- this was changed so that 'layouts' can be an optional parameter
|
||||||
layouts, i, s = i, s, layouts
|
layouts, i, s = i, s, layouts
|
||||||
end
|
end
|
||||||
local t = tag.selected(s)
|
s = get_screen(s)
|
||||||
|
local t = tag.selected(s and s.index)
|
||||||
layouts = layouts or layout.layouts
|
layouts = layouts or layout.layouts
|
||||||
if t then
|
if t then
|
||||||
local curlayout = layout.get(s)
|
local curlayout = layout.get(s)
|
||||||
|
@ -124,20 +130,21 @@ end
|
||||||
-- geometry (x, y, width, height), the clients, the screen and sometime, a
|
-- geometry (x, y, width, height), the clients, the screen and sometime, a
|
||||||
-- "geometries" table with client as keys and geometry as value
|
-- "geometries" table with client as keys and geometry as value
|
||||||
function layout.parameters(t, screen)
|
function layout.parameters(t, screen)
|
||||||
t = t or tag.selected(screen)
|
screen = get_screen(screen)
|
||||||
|
t = t or tag.selected(screen and screen.index)
|
||||||
|
|
||||||
if not t then return end
|
if not t then return end
|
||||||
|
|
||||||
screen = tag.getscreen(t) or 1
|
screen = get_screen(tag.getscreen(t) or 1)
|
||||||
|
|
||||||
local p = {}
|
local p = {}
|
||||||
|
|
||||||
p.workarea = capi.screen[screen].workarea
|
p.workarea = screen.workarea
|
||||||
|
|
||||||
local useless_gap = tag.getgap(t, #client.tiled(screen))
|
local useless_gap = tag.getgap(t, #client.tiled(screen.index))
|
||||||
|
|
||||||
-- Handle padding
|
-- Handle padding
|
||||||
local padding = ascreen.padding(capi.screen[screen]) or {}
|
local padding = ascreen.padding(screen) or {}
|
||||||
|
|
||||||
p.workarea.x = p.workarea.x + (padding.left or 0) + useless_gap
|
p.workarea.x = p.workarea.x + (padding.left or 0) + useless_gap
|
||||||
|
|
||||||
|
@ -149,9 +156,9 @@ function layout.parameters(t, screen)
|
||||||
p.workarea.height = p.workarea.height - ((padding.top or 0) +
|
p.workarea.height = p.workarea.height - ((padding.top or 0) +
|
||||||
(padding.bottom or 0) + useless_gap * 2)
|
(padding.bottom or 0) + useless_gap * 2)
|
||||||
|
|
||||||
p.geometry = capi.screen[screen].geometry
|
p.geometry = screen.geometry
|
||||||
p.clients = client.tiled(screen)
|
p.clients = client.tiled(screen)
|
||||||
p.screen = screen
|
p.screen = screen.index
|
||||||
p.padding = padding
|
p.padding = padding
|
||||||
p.useless_gap = useless_gap
|
p.useless_gap = useless_gap
|
||||||
|
|
||||||
|
@ -161,6 +168,7 @@ end
|
||||||
--- Arrange a screen using its current layout.
|
--- Arrange a screen using its current layout.
|
||||||
-- @param screen The screen to arrange.
|
-- @param screen The screen to arrange.
|
||||||
function layout.arrange(screen)
|
function layout.arrange(screen)
|
||||||
|
screen = get_screen(screen)
|
||||||
if not screen or delayed_arrange[screen] then return end
|
if not screen or delayed_arrange[screen] then return end
|
||||||
delayed_arrange[screen] = true
|
delayed_arrange[screen] = true
|
||||||
|
|
||||||
|
@ -181,7 +189,7 @@ function layout.arrange(screen)
|
||||||
g.y = g.y + useless_gap
|
g.y = g.y + useless_gap
|
||||||
c:geometry(g)
|
c:geometry(g)
|
||||||
end
|
end
|
||||||
capi.screen[screen]:emit_signal("arrange")
|
screen:emit_signal("arrange")
|
||||||
|
|
||||||
arrange_lock = false
|
arrange_lock = false
|
||||||
delayed_arrange[screen] = nil
|
delayed_arrange[screen] = nil
|
||||||
|
|
|
@ -120,8 +120,8 @@ local function item_position(_menu, child)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local function set_coords(_menu, screen_idx, m_coords)
|
local function set_coords(_menu, s, m_coords)
|
||||||
local s_geometry = capi.screen[screen_idx].workarea
|
local s_geometry = s.workarea
|
||||||
local screen_w = s_geometry.x + s_geometry.width
|
local screen_w = s_geometry.x + s_geometry.width
|
||||||
local screen_h = s_geometry.y + s_geometry.height
|
local screen_h = s_geometry.y + s_geometry.height
|
||||||
|
|
||||||
|
@ -313,10 +313,10 @@ end
|
||||||
function menu:show(args)
|
function menu:show(args)
|
||||||
args = args or {}
|
args = args or {}
|
||||||
local coords = args.coords or nil
|
local coords = args.coords or nil
|
||||||
local screen_index = screen.focused()
|
local s = capi.screen[screen.focused()]
|
||||||
|
|
||||||
if not set_size(self) then return end
|
if not set_size(self) then return end
|
||||||
set_coords(self, screen_index, coords)
|
set_coords(self, s, coords)
|
||||||
|
|
||||||
keygrabber.run(self._keygrabber)
|
keygrabber.run(self._keygrabber)
|
||||||
self.wibox.visible = true
|
self.wibox.visible = true
|
||||||
|
|
|
@ -23,6 +23,10 @@ local layout = require("awful.layout")
|
||||||
local a_screen = require("awful.screen")
|
local a_screen = require("awful.screen")
|
||||||
local dpi = require("beautiful").xresources.apply_dpi
|
local dpi = require("beautiful").xresources.apply_dpi
|
||||||
|
|
||||||
|
local function get_screen(s)
|
||||||
|
return s and capi.screen[s]
|
||||||
|
end
|
||||||
|
|
||||||
local placement = {}
|
local placement = {}
|
||||||
|
|
||||||
--- Check if an area intersect another area.
|
--- Check if an area intersect another area.
|
||||||
|
@ -121,8 +125,8 @@ end
|
||||||
function placement.no_offscreen(c, screen)
|
function placement.no_offscreen(c, screen)
|
||||||
c = c or capi.client.focus
|
c = c or capi.client.focus
|
||||||
local geometry = get_area(c)
|
local geometry = get_area(c)
|
||||||
screen = screen or c.screen or a_screen.getbycoord(geometry.x, geometry.y)
|
screen = get_screen(screen or c.screen or a_screen.getbycoord(geometry.x, geometry.y))
|
||||||
local screen_geometry = capi.screen[screen].workarea
|
local screen_geometry = screen.workarea
|
||||||
|
|
||||||
if geometry.x + geometry.width > screen_geometry.x + screen_geometry.width then
|
if geometry.x + geometry.width > screen_geometry.x + screen_geometry.width then
|
||||||
geometry.x = screen_geometry.x + screen_geometry.width - geometry.width
|
geometry.x = screen_geometry.x + screen_geometry.width - geometry.width
|
||||||
|
@ -145,10 +149,10 @@ end
|
||||||
-- @param c The client.
|
-- @param c The client.
|
||||||
function placement.no_overlap(c)
|
function placement.no_overlap(c)
|
||||||
local geometry = get_area(c)
|
local geometry = get_area(c)
|
||||||
local screen = c.screen or a_screen.getbycoord(geometry.x, geometry.y)
|
local screen = get_screen(c.screen or a_screen.getbycoord(geometry.x, geometry.y))
|
||||||
local cls = client.visible(screen)
|
local cls = client.visible(screen.index)
|
||||||
local curlay = layout.get()
|
local curlay = layout.get()
|
||||||
local areas = { capi.screen[screen].workarea }
|
local areas = { screen.workarea }
|
||||||
for _, cl in pairs(cls) do
|
for _, cl in pairs(cls) do
|
||||||
if cl ~= c and cl.type ~= "desktop" and (client.floating.get(cl) or curlay == layout.suit.floating) then
|
if cl ~= c and cl.type ~= "desktop" and (client.floating.get(cl) or curlay == layout.suit.floating) then
|
||||||
areas = area_remove(areas, get_area(cl))
|
areas = area_remove(areas, get_area(cl))
|
||||||
|
@ -249,12 +253,12 @@ end
|
||||||
function placement.centered(c, p)
|
function placement.centered(c, p)
|
||||||
c = c or capi.client.focus
|
c = c or capi.client.focus
|
||||||
local c_geometry = get_area(c)
|
local c_geometry = get_area(c)
|
||||||
local screen = c.screen or a_screen.getbycoord(c_geometry.x, c_geometry.y)
|
local screen = get_screen(c.screen or a_screen.getbycoord(c_geometry.x, c_geometry.y))
|
||||||
local s_geometry
|
local s_geometry
|
||||||
if p then
|
if p then
|
||||||
s_geometry = get_area(p)
|
s_geometry = get_area(p)
|
||||||
else
|
else
|
||||||
s_geometry = capi.screen[screen].geometry
|
s_geometry = screen.geometry
|
||||||
end
|
end
|
||||||
return c:geometry({ x = s_geometry.x + (s_geometry.width - c_geometry.width) / 2,
|
return c:geometry({ x = s_geometry.x + (s_geometry.width - c_geometry.width) / 2,
|
||||||
y = s_geometry.y + (s_geometry.height - c_geometry.height) / 2 })
|
y = s_geometry.y + (s_geometry.height - c_geometry.height) / 2 })
|
||||||
|
@ -267,12 +271,12 @@ end
|
||||||
function placement.center_horizontal(c, p)
|
function placement.center_horizontal(c, p)
|
||||||
c = c or capi.client.focus
|
c = c or capi.client.focus
|
||||||
local c_geometry = get_area(c)
|
local c_geometry = get_area(c)
|
||||||
local screen = c.screen or a_screen.getbycoord(c_geometry.x, c_geometry.y)
|
local screen = get_screen(c.screen or a_screen.getbycoord(c_geometry.x, c_geometry.y))
|
||||||
local s_geometry
|
local s_geometry
|
||||||
if p then
|
if p then
|
||||||
s_geometry = get_area(p)
|
s_geometry = get_area(p)
|
||||||
else
|
else
|
||||||
s_geometry = capi.screen[screen].geometry
|
s_geometry = screen.geometry
|
||||||
end
|
end
|
||||||
return c:geometry({ x = s_geometry.x + (s_geometry.width - c_geometry.width) / 2 })
|
return c:geometry({ x = s_geometry.x + (s_geometry.width - c_geometry.width) / 2 })
|
||||||
end
|
end
|
||||||
|
@ -284,12 +288,12 @@ end
|
||||||
function placement.center_vertical(c, p)
|
function placement.center_vertical(c, p)
|
||||||
c = c or capi.client.focus
|
c = c or capi.client.focus
|
||||||
local c_geometry = get_area(c)
|
local c_geometry = get_area(c)
|
||||||
local screen = c.screen or a_screen.getbycoord(c_geometry.x, c_geometry.y)
|
local screen = get_screen(c.screen or a_screen.getbycoord(c_geometry.x, c_geometry.y))
|
||||||
local s_geometry
|
local s_geometry
|
||||||
if p then
|
if p then
|
||||||
s_geometry = get_area(p)
|
s_geometry = get_area(p)
|
||||||
else
|
else
|
||||||
s_geometry = capi.screen[screen].geometry
|
s_geometry = screen.geometry
|
||||||
end
|
end
|
||||||
return c:geometry({ y = s_geometry.y + (s_geometry.height - c_geometry.height) / 2 })
|
return c:geometry({ y = s_geometry.y + (s_geometry.height - c_geometry.height) / 2 })
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,6 +25,10 @@ local wibox = require("wibox")
|
||||||
local beautiful = require("beautiful")
|
local beautiful = require("beautiful")
|
||||||
local round = require("awful.util").round
|
local round = require("awful.util").round
|
||||||
|
|
||||||
|
local function get_screen(s)
|
||||||
|
return s and screen[s]
|
||||||
|
end
|
||||||
|
|
||||||
local awfulwibox = { mt = {} }
|
local awfulwibox = { mt = {} }
|
||||||
|
|
||||||
--- Array of table with wiboxes inside.
|
--- Array of table with wiboxes inside.
|
||||||
|
@ -49,7 +53,7 @@ end
|
||||||
-- @param screen If the wibox it not attached to a screen, specified on which
|
-- @param screen If the wibox it not attached to a screen, specified on which
|
||||||
-- screen the position should be set.
|
-- screen the position should be set.
|
||||||
function awfulwibox.set_position(wb, position, screen)
|
function awfulwibox.set_position(wb, position, screen)
|
||||||
local area = capi.screen[screen].geometry
|
local area = get_screen(screen).geometry
|
||||||
|
|
||||||
-- The "length" of a wibox is always chosen to be the optimal size
|
-- The "length" of a wibox is always chosen to be the optimal size
|
||||||
-- (non-floating).
|
-- (non-floating).
|
||||||
|
@ -107,8 +111,9 @@ end
|
||||||
-- will be attached.
|
-- will be attached.
|
||||||
-- @param wb The wibox to attach.
|
-- @param wb The wibox to attach.
|
||||||
-- @param position The position of the wibox: top, bottom, left or right.
|
-- @param position The position of the wibox: top, bottom, left or right.
|
||||||
-- @param screen TODO, this seems to be unused
|
-- @param screen The screen to attach to
|
||||||
function awfulwibox.attach(wb, position, screen)
|
function awfulwibox.attach(wb, position, screen)
|
||||||
|
screen = get_screen(screen)
|
||||||
-- Store wibox as attached in a weak-valued table
|
-- Store wibox as attached in a weak-valued table
|
||||||
local wibox_prop_table
|
local wibox_prop_table
|
||||||
-- Start from end since we sometimes remove items
|
-- Start from end since we sometimes remove items
|
||||||
|
@ -144,10 +149,11 @@ end
|
||||||
-- @param wb The wibox.
|
-- @param wb The wibox.
|
||||||
-- @param align The alignment: left, right or center.
|
-- @param align The alignment: left, right or center.
|
||||||
-- @param screen If the wibox is not attached to any screen, you can specify the
|
-- @param screen If the wibox is not attached to any screen, you can specify the
|
||||||
-- screen where to align. Otherwise 1 is assumed.
|
-- screen where to align.
|
||||||
function awfulwibox.align(wb, align, screen)
|
function awfulwibox.align(wb, align, screen)
|
||||||
|
screen = get_screen(screen)
|
||||||
local position = awfulwibox.get_position(wb)
|
local position = awfulwibox.get_position(wb)
|
||||||
local area = capi.screen[screen].workarea
|
local area = screen.workarea
|
||||||
|
|
||||||
if position == "right" then
|
if position == "right" then
|
||||||
if align == "right" then
|
if align == "right" then
|
||||||
|
@ -192,8 +198,9 @@ end
|
||||||
-- @param screen The screen to stretch on, or the wibox screen.
|
-- @param screen The screen to stretch on, or the wibox screen.
|
||||||
function awfulwibox.stretch(wb, screen)
|
function awfulwibox.stretch(wb, screen)
|
||||||
if screen then
|
if screen then
|
||||||
|
screen = get_screen(screen)
|
||||||
local position = awfulwibox.get_position(wb)
|
local position = awfulwibox.get_position(wb)
|
||||||
local area = capi.screen[screen].workarea
|
local area = screen.workarea
|
||||||
if position == "right" or position == "left" then
|
if position == "right" or position == "left" then
|
||||||
wb.height = area.height - (2 * wb.border_width)
|
wb.height = area.height - (2 * wb.border_width)
|
||||||
wb.y = area.y
|
wb.y = area.y
|
||||||
|
@ -216,7 +223,7 @@ function awfulwibox.new(arg)
|
||||||
arg = arg or {}
|
arg = arg or {}
|
||||||
local position = arg.position or "top"
|
local position = arg.position or "top"
|
||||||
local has_to_stretch = true
|
local has_to_stretch = true
|
||||||
local screen = arg.screen or 1
|
local screen = get_screen(arg.screen or 1)
|
||||||
|
|
||||||
arg.type = arg.type or "dock"
|
arg.type = arg.type or "dock"
|
||||||
|
|
||||||
|
@ -234,7 +241,7 @@ function awfulwibox.new(arg)
|
||||||
if arg.screen then
|
if arg.screen then
|
||||||
local hp = tostring(arg.height):match("(%d+)%%")
|
local hp = tostring(arg.height):match("(%d+)%%")
|
||||||
if hp then
|
if hp then
|
||||||
arg.height = round(capi.screen[arg.screen].geometry.height * hp / 100)
|
arg.height = round(screen.geometry.height * hp / 100)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -245,7 +252,7 @@ function awfulwibox.new(arg)
|
||||||
if arg.screen then
|
if arg.screen then
|
||||||
local wp = tostring(arg.width):match("(%d+)%%")
|
local wp = tostring(arg.width):match("(%d+)%%")
|
||||||
if wp then
|
if wp then
|
||||||
arg.width = round(capi.screen[arg.screen].geometry.width * wp / 100)
|
arg.width = round(screen.geometry.width * wp / 100)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue