X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/1b12fd2319e1cd02706fd3a7ec0f0203ca2782d2..93b31ef0e9851f593984657c0215ba2ed6488b2a:/util/quake.lua diff --git a/util/quake.lua b/util/quake.lua index c98f28d..01891b0 100644 --- a/util/quake.lua +++ b/util/quake.lua @@ -1,20 +1,17 @@ --[[ Licensed under GNU General Public License v2 - * (c) 2016, Luke Bonham + * (c) 2016, Luca CPZ * (c) 2015, unknown --]] local awful = require("awful") local capi = { client = client } - -local math = { floor = math.floor } -local string = { format = string.format } - +local math = math +local string = string local pairs = pairs local screen = screen - local setmetatable = setmetatable -- Quake-like Dropdown application spawn @@ -26,8 +23,6 @@ local quake = {} function quake:display() if self.followtag then self.screen = awful.screen.focused() end - local toscan = self.screen - if self.onlyone then toscan = nil end -- First, we locate the client local client = nil @@ -35,7 +30,7 @@ function quake:display() for c in awful.client.iterate(function (c) -- c.name may be changed! return c.instance == self.name - end, nil, toscan) + end) do i = i + 1 if i == 1 then @@ -65,7 +60,7 @@ function quake:display() client.floating = true client.border_width = self.border client.size_hints_honor = false - client:geometry(self.geometry[self.screen] or self:compute_size()) + client:geometry(self.geometry[self.screen.index] or self:compute_size()) -- Set not sticky and on top client.sticky = false @@ -97,12 +92,12 @@ end function quake:compute_size() -- skip if we already have a geometry for this screen - if not self.geometry[self.screen] then + if not self.geometry[self.screen.index] then local geom if not self.overlap then - geom = screen[self.screen].workarea + geom = screen[self.screen.index].workarea else - geom = screen[self.screen].geometry + geom = screen[self.screen.index].geometry end local width, height = self.width, self.height if width <= 1 then width = math.floor(geom.width * width) - 2 * self.border end @@ -114,9 +109,9 @@ function quake:compute_size() if self.vert == "top" then y = geom.y elseif self.vert == "bottom" then y = geom.height + geom.y - height else y = geom.y + (geom.height - height)/2 end - self.geometry[self.screen] = { x = x, y = y, width = width, height = height } + self.geometry[self.screen.index] = { x = x, y = y, width = width, height = height } end - return self.geometry[self.screen] + return self.geometry[self.screen.index] end function quake:new(config) @@ -129,7 +124,6 @@ function quake:new(config) conf.border = conf.border or 1 -- client border width conf.visible = conf.visible or false -- initially not visible conf.followtag = conf.followtag or false -- spawn on currently focused screen - conf.onlyone = conf.onlyone or false -- one instance for all screens conf.overlap = conf.overlap or false -- overlap wibox conf.screen = conf.screen or awful.screen.focused() conf.settings = conf.settings @@ -161,7 +155,10 @@ function quake:toggle() if self.followtag then self.screen = awful.screen.focused() end local current_tag = self.screen.selected_tag if current_tag and self.last_tag ~= current_tag and self.visible then - self:display():move_to_tag(current_tag) + local c=self:display() + if c then + c:move_to_tag(current_tag) + end else self.visible = not self.visible self:display()