148 lines
4.3 KiB
Lua
148 lines
4.3 KiB
Lua
--- Client related mouse operations.
|
|
--
|
|
-- @author Emmanuel Lepage Vallee <elv1313@gmail.com>
|
|
-- @copyright 2016 Emmanuel Lepage Vallee
|
|
-- @submodule mouse
|
|
|
|
local aplace = require("awful.placement")
|
|
local capi = { mouse = mouse, client = client }
|
|
local mresize = require("awful.mouse.resize")
|
|
local gdebug = require("gears.debug")
|
|
|
|
local module = {}
|
|
|
|
--- Move a client.
|
|
-- @staticfct awful.mouse.client.move
|
|
-- @tparam client c The client to move, or the focused one if nil.
|
|
-- @param snap The pixel to snap clients.
|
|
-- @noreturn
|
|
-- @request client geometry mouse.move granted When `awful.mouse.client.move` is
|
|
-- called.
|
|
function module.move(c, snap, finished_cb) --luacheck: no unused args
|
|
if finished_cb then
|
|
gdebug.deprecate("The mouse.client.move `finished_cb` argument is no longer"..
|
|
" used, please use awful.mouse.resize.add_leave_callback(f, 'mouse.move')", {deprecated_in=4})
|
|
end
|
|
|
|
c = c or capi.client.focus
|
|
|
|
if not c
|
|
or c.fullscreen
|
|
or c.maximized
|
|
or c.type == "desktop"
|
|
or c.type == "splash"
|
|
or c.type == "dock" then
|
|
return
|
|
end
|
|
|
|
-- Compute the offset
|
|
local coords = capi.mouse.coords()
|
|
local geo = aplace.centered(capi.mouse,{parent=c, pretend=true})
|
|
|
|
local offset = {
|
|
x = geo.x - coords.x,
|
|
y = geo.y - coords.y,
|
|
}
|
|
|
|
mresize(c, "mouse.move", {
|
|
placement = aplace.under_mouse,
|
|
offset = offset,
|
|
snap = snap
|
|
})
|
|
end
|
|
|
|
module.dragtotag = { }
|
|
|
|
--- Move a client to a tag by dragging it onto the left / right side of the screen.
|
|
-- @deprecated awful.mouse.client.dragtotag.border
|
|
-- @param c The client to move
|
|
function module.dragtotag.border(c)
|
|
gdebug.deprecate("Use awful.mouse.snap.drag_to_tag_enabled = true instead "..
|
|
"of awful.mouse.client.dragtotag.border(c). It will now be enabled.", {deprecated_in=4})
|
|
|
|
-- Enable drag to border
|
|
require("awful.mouse.snap").drag_to_tag_enabled = true
|
|
|
|
return module.move(c)
|
|
end
|
|
|
|
--- Get a client corner coordinates.
|
|
-- @deprecated awful.mouse.client.corner
|
|
-- @tparam[opt=client.focus] client c The client to get corner from, focused one by default.
|
|
-- @tparam string corner The corner to use: `auto`, `top_left`, `top_right`, `bottom_left`,
|
|
-- `bottom_right`, `left`, `right`, `top` or `bottom`. Default is `auto`. `auto` finds the
|
|
-- nearest corner.
|
|
-- @treturn string The corner name
|
|
-- @treturn number x The horizontal position
|
|
-- @treturn number y The vertical position
|
|
function module.corner(c, corner)
|
|
gdebug.deprecate(
|
|
"Use awful.placement.closest_corner(mouse) or awful.placement[corner](mouse)"..
|
|
" instead of awful.mouse.client.corner", {deprecated_in=4}
|
|
)
|
|
|
|
c = c or capi.client.focus
|
|
if not c then return end
|
|
|
|
local ngeo = nil
|
|
|
|
if (not corner) or corner == "auto" then
|
|
ngeo, corner = aplace.closest_corner(mouse, {parent = c})
|
|
elseif corner and aplace[corner] then
|
|
ngeo = aplace[corner](mouse, {parent = c})
|
|
end
|
|
|
|
return corner, ngeo and ngeo.x or nil, ngeo and ngeo.y or nil
|
|
end
|
|
|
|
--- Resize a client.
|
|
-- @staticfct awful.mouse.client.resize
|
|
-- @param c The client to resize, or the focused one by default.
|
|
-- @tparam string corner The corner to grab on resize. Auto detected by default.
|
|
-- @tparam[opt={}] table args A set of `awful.placement` arguments
|
|
-- @treturn string The corner (or side) name
|
|
-- @request client geometry mouse.resize granted When `awful.mouse.client.resize`
|
|
-- is called.
|
|
function module.resize(c, corner, args)
|
|
c = c or capi.client.focus
|
|
|
|
if not c then return end
|
|
|
|
if c.fullscreen
|
|
or c.maximized
|
|
or c.type == "desktop"
|
|
or c.type == "splash"
|
|
or c.type == "dock" then
|
|
return
|
|
end
|
|
|
|
-- Set some default arguments
|
|
local new_args = setmetatable(
|
|
{
|
|
include_sides = (not args) or args.include_sides ~= false
|
|
},
|
|
{
|
|
__index = args or {}
|
|
}
|
|
)
|
|
|
|
-- Move the mouse to the corner
|
|
if corner and aplace[corner] then
|
|
aplace[corner](capi.mouse, {parent=c})
|
|
else
|
|
local _
|
|
_, corner = aplace.closest_corner(capi.mouse, {
|
|
parent = c,
|
|
include_sides = new_args.include_sides ~= false,
|
|
})
|
|
end
|
|
|
|
new_args.corner = corner
|
|
|
|
mresize(c, "mouse.resize", new_args)
|
|
|
|
return corner
|
|
end
|
|
|
|
return module
|