client: Add a `:grant()` and `:deny()` method for permissions.
This is a lower level API than what most people will end up using (the rules), but it is useful enough to expose to the public API.
This commit is contained in:
parent
5818de41ce
commit
668ed6135c
|
@ -15,6 +15,7 @@ local grect = require("gears.geometry").rectangle
|
||||||
local gmath = require("gears.math")
|
local gmath = require("gears.math")
|
||||||
local gtable = require("gears.table")
|
local gtable = require("gears.table")
|
||||||
local amousec = require("awful.mouse.client")
|
local amousec = require("awful.mouse.client")
|
||||||
|
local pcommon = require("awful.permissions._common")
|
||||||
local pairs = pairs
|
local pairs = pairs
|
||||||
local type = type
|
local type = type
|
||||||
local ipairs = ipairs
|
local ipairs = ipairs
|
||||||
|
@ -1485,6 +1486,22 @@ function client.object.activate(c, args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Grant a permission for a client.
|
||||||
|
--
|
||||||
|
-- @method grant
|
||||||
|
-- @tparam string permission The permission name (just the name, no `request::`).
|
||||||
|
-- @tparam string context The reason why this permission is requested.
|
||||||
|
-- @see awful.permissions
|
||||||
|
|
||||||
|
--- Deny a permission for a client.
|
||||||
|
--
|
||||||
|
-- @method deny
|
||||||
|
-- @tparam string permission The permission name (just the name, no `request::`).
|
||||||
|
-- @tparam string context The reason why this permission is requested.
|
||||||
|
-- @see awful.permissions
|
||||||
|
|
||||||
|
pcommon.setup_grant(client.object, "client")
|
||||||
|
|
||||||
--- Return true if the client is active (has focus).
|
--- Return true if the client is active (has focus).
|
||||||
--
|
--
|
||||||
-- This property is **READ ONLY**. Use `c:activate { context = "myreason" }`
|
-- This property is **READ ONLY**. Use `c:activate { context = "myreason" }`
|
||||||
|
|
|
@ -19,11 +19,19 @@ local default_permissions = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function module.check(class, request, context)
|
function module.check(object, class, request, context)
|
||||||
if not default_permissions[class] then return true end
|
if not default_permissions[class] then return true end
|
||||||
if not default_permissions[class][request] then return true end
|
if not default_permissions[class][request] then return true end
|
||||||
if default_permissions[class][request][context] == nil then return true end
|
if default_permissions[class][request][context] == nil then return true end
|
||||||
|
|
||||||
|
local ret = nil
|
||||||
|
|
||||||
|
if object._private.permissions and object._private.permissions[request] then
|
||||||
|
ret = object._private.permissions[request][context]
|
||||||
|
end
|
||||||
|
|
||||||
|
if ret ~= nil then return ret end
|
||||||
|
|
||||||
return default_permissions[class][request][context]
|
return default_permissions[class][request][context]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -53,4 +61,22 @@ function module._deprecated_autofocus_in_use()
|
||||||
module.set("client", "autoactivate", "history" , true)
|
module.set("client", "autoactivate", "history" , true)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function set_object_permission_common(self, request, context, v)
|
||||||
|
self._private.permissions = self._private.permissions or {}
|
||||||
|
if not self._private.permissions[request] then
|
||||||
|
self._private.permissions[request] = {}
|
||||||
|
end
|
||||||
|
self._private.permissions[request][context] = v
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add the grant and deny methods to the objects.
|
||||||
|
function module.setup_grant(class, classname) -- luacheck: no unused
|
||||||
|
function class.grant(self, request, context)
|
||||||
|
set_object_permission_common(self, request, context, true)
|
||||||
|
end
|
||||||
|
function class.deny(self, request, context)
|
||||||
|
set_object_permission_common(self, request, context, false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return module
|
return module
|
||||||
|
|
|
@ -146,6 +146,8 @@ end
|
||||||
-- @tparam[opt=false] boolean hints.switch_to_tags Select all tags associated
|
-- @tparam[opt=false] boolean hints.switch_to_tags Select all tags associated
|
||||||
-- with the client.
|
-- with the client.
|
||||||
function permissions.activate(c, context, hints) -- luacheck: no unused args
|
function permissions.activate(c, context, hints) -- luacheck: no unused args
|
||||||
|
if not pcommon.check(c, "client", "activate", context) then return end
|
||||||
|
|
||||||
hints = hints or {}
|
hints = hints or {}
|
||||||
|
|
||||||
if c.focusable == false and not hints.force then
|
if c.focusable == false and not hints.force then
|
||||||
|
@ -333,6 +335,8 @@ local context_mapper = {
|
||||||
-- @tparam string context The context
|
-- @tparam string context The context
|
||||||
-- @tparam[opt={}] table hints The hints to pass to the handler
|
-- @tparam[opt={}] table hints The hints to pass to the handler
|
||||||
function permissions.geometry(c, context, hints)
|
function permissions.geometry(c, context, hints)
|
||||||
|
if not pcommon.check(c, "client", "geometry", context) then return end
|
||||||
|
|
||||||
local layout = c.screen.selected_tag and c.screen.selected_tag.layout or nil
|
local layout = c.screen.selected_tag and c.screen.selected_tag.layout or nil
|
||||||
|
|
||||||
-- Setting the geometry will not work unless the client is floating.
|
-- Setting the geometry will not work unless the client is floating.
|
||||||
|
@ -403,6 +407,8 @@ end
|
||||||
-- @tparam string context The context
|
-- @tparam string context The context
|
||||||
-- @tparam[opt={}] table hints The hints to pass to the handler
|
-- @tparam[opt={}] table hints The hints to pass to the handler
|
||||||
function permissions.merge_maximization(c, context, hints)
|
function permissions.merge_maximization(c, context, hints)
|
||||||
|
if not pcommon.check(c, "client", "geometry", context) then return end
|
||||||
|
|
||||||
if context ~= "client_maximize_horizontal" and context ~= "client_maximize_vertical" then
|
if context ~= "client_maximize_horizontal" and context ~= "client_maximize_vertical" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -484,6 +490,8 @@ end
|
||||||
-- @tparam string context The context
|
-- @tparam string context The context
|
||||||
-- @tparam[opt={}] table hints The hints to pass to the handler
|
-- @tparam[opt={}] table hints The hints to pass to the handler
|
||||||
function permissions.client_geometry_requests(c, context, hints)
|
function permissions.client_geometry_requests(c, context, hints)
|
||||||
|
if not pcommon.check(c, "client", "geometry", context) then return end
|
||||||
|
|
||||||
if context == "ewmh" and hints then
|
if context == "ewmh" and hints then
|
||||||
if c.immobilized_horizontal then
|
if c.immobilized_horizontal then
|
||||||
hints = gtable.clone(hints)
|
hints = gtable.clone(hints)
|
||||||
|
@ -679,7 +687,7 @@ local activate_context_map = {
|
||||||
--
|
--
|
||||||
-- @signalhandler awful.permissions.autoactivate
|
-- @signalhandler awful.permissions.autoactivate
|
||||||
function permissions.autoactivate(c, context, args)
|
function permissions.autoactivate(c, context, args)
|
||||||
if not pcommon.check("client", "autoactivate", context) then return end
|
if not pcommon.check(c, "client", "autoactivate", context) then return end
|
||||||
|
|
||||||
local ctx = activate_context_map[context] and
|
local ctx = activate_context_map[context] and
|
||||||
activate_context_map[context] or context
|
activate_context_map[context] or context
|
||||||
|
|
Loading…
Reference in New Issue