summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2022-12-04 18:15:44 +0100
committerAnton Khirnov <anton@khirnov.net>2022-12-04 18:15:44 +0100
commit0e164609bf1386e5c5288ec811b53a1846fadaf6 (patch)
treef6799f9c8d8823dc83a39f9d167abad152732753
parente2c6c45a2636b24b7efd1dacd2227689a0fe08c6 (diff)
urgent_wgt: refactor client signal handlers
Shorter and simpler. Also fixes a bug where a client would show up as urgrent after being moved between pages.
-rw-r--r--urgent_wgt.lua73
1 files changed, 32 insertions, 41 deletions
diff --git a/urgent_wgt.lua b/urgent_wgt.lua
index a50bd47..cce4675 100644
--- a/urgent_wgt.lua
+++ b/urgent_wgt.lua
@@ -68,52 +68,43 @@ function UrgentWidget:_desk_client_remove(desk_idx, c)
end
end
-function UrgentWidget:_client_remove(c)
- if self._clients[c] then
- self:_desk_client_remove(self._clients[c], c)
- end
- self._clients[c] = nil
-end
-
function UrgentWidget:_client_add(c)
- local desk_idx = client_get_desk_idx(c)
- self._clients[c] = desk_idx
+ function handler_client_show(c)
+ if not c.urgent then
+ return
+ end
- if desk_idx then
- self:_desk_client_add(desk_idx, c)
+ local desk_idx = client_get_desk_idx(c)
+ self._clients[c] = desk_idx
+ if desk_idx then
+ self:_desk_client_add(desk_idx, c)
+ end
+ end
+ function handler_client_hide(c)
+ if self._clients[c] then
+ self:_desk_client_remove(self._clients[c], c)
+ end
+ end
+ function handler_client_remove(c)
+ c:disconnect_signal('untagged', handler_client_hide)
+ c:disconnect_signal('tagged', handler_client_show)
+ c:disconnect_signal('unmanage', handler_client_remove)
+ c:disconnect_signal('property::urgent', handler_client_remove)
+
+ handler_client_hide(c)
+ self._clients[c] = nil
end
-- handle client state changes:
- -- lose the urgency flag
- c:connect_signal('property::urgent',
- function (c)
- if not c.urgent then
- self:_client_remove(c)
- end
- end)
- -- client destroyed
- c:connect_signal('unmanage',
- function (c)
- self:_client_remove(c)
- end)
- -- client moved
- c:connect_signal('untagged',
- function(c, t)
- local desk_idx = self._clients[c]
- if desk_idx then
- self:_desk_client_remove(desk_idx, c)
- end
- self._clients[c] = false
- end)
- c:connect_signal('tagged',
- function(c, t)
- local desk_idx = client_get_desk_idx(c)
- self._clients[c] = desk_idx
-
- if desk_idx then
- self:_desk_client_add(desk_idx, c)
- end
- end)
+ -- client moved: hide it on its previous desktop, show on the new one
+ c:connect_signal('untagged', handler_client_hide)
+ c:connect_signal('tagged', handler_client_show)
+ -- unurgent or destroyed: forget about client
+ c:connect_signal('property::urgent', handler_client_remove)
+ c:connect_signal('unmanage', handler_client_remove)
+
+ -- show the client on its desk right now
+ handler_client_show(c)
end
function UrgentWidget:new()