123 lines
3.8 KiB
Lua
123 lines
3.8 KiB
Lua
---------------------------------------------------------------------------
|
|
--- Dummy function for floating layout
|
|
--
|
|
-- @author Gregor Best
|
|
-- @copyright 2008 Gregor Best
|
|
-- @module awful.layout
|
|
---------------------------------------------------------------------------
|
|
|
|
-- Grab environment we need
|
|
local ipairs = ipairs
|
|
local capi =
|
|
{
|
|
mouse = mouse,
|
|
mousegrabber = mousegrabber
|
|
}
|
|
|
|
--- The floating layout layoutbox icon.
|
|
-- @beautiful beautiful.layout_floating
|
|
-- @param surface
|
|
-- @see gears.surface
|
|
|
|
local floating = {}
|
|
|
|
--- Jump mouse cursor to the client's corner when resizing it.
|
|
-- @field awful.layout.suit.floating.resize_jump_to_corner
|
|
floating.resize_jump_to_corner = true
|
|
|
|
function floating.mouse_resize_handler(c, corner, x, y)
|
|
local g = c:geometry()
|
|
|
|
-- Do not allow maximized clients to be resized by mouse
|
|
local fixed_x = c.maximized_horizontal
|
|
local fixed_y = c.maximized_vertical
|
|
|
|
local prev_coords = {}
|
|
local coordinates_delta = {x=0, y=0}
|
|
|
|
if floating.resize_jump_to_corner then
|
|
-- Warp mouse pointer
|
|
capi.mouse.coords({ x = x, y = y })
|
|
else
|
|
local corner_x, corner_y = x, y
|
|
local mouse_coords = capi.mouse.coords()
|
|
|
|
x = mouse_coords.x
|
|
y = mouse_coords.y
|
|
coordinates_delta = {x = corner_x-x,y = corner_y-y}
|
|
end
|
|
|
|
capi.mousegrabber.run(function (state)
|
|
if not c.valid then return false end
|
|
|
|
state.x = state.x + coordinates_delta.x
|
|
state.y = state.y + coordinates_delta.y
|
|
|
|
for _, v in ipairs(state.buttons) do
|
|
if v then
|
|
local ng
|
|
|
|
prev_coords = { x = state.x, y = state.y }
|
|
|
|
if corner == "bottom_right" then
|
|
ng = { width = state.x - g.x,
|
|
height = state.y - g.y }
|
|
elseif corner == "bottom_left" then
|
|
ng = { x = state.x,
|
|
width = (g.x + g.width) - state.x,
|
|
height = state.y - g.y }
|
|
elseif corner == "top_left" then
|
|
ng = { x = state.x,
|
|
width = (g.x + g.width) - state.x,
|
|
y = state.y,
|
|
height = (g.y + g.height) - state.y }
|
|
else
|
|
ng = { width = state.x - g.x,
|
|
y = state.y,
|
|
height = (g.y + g.height) - state.y }
|
|
end
|
|
|
|
if ng.width <= 0 then ng.width = nil end
|
|
if ng.height <= 0 then ng.height = nil end
|
|
if fixed_x then ng.width = g.width ng.x = g.x end
|
|
if fixed_y then ng.height = g.height ng.y = g.y end
|
|
|
|
c:geometry(ng)
|
|
-- Get real geometry that has been applied
|
|
-- in case we honor size hints
|
|
-- XXX: This should be rewritten when size
|
|
-- hints are available from Lua.
|
|
local rg = c:geometry()
|
|
|
|
if corner == "bottom_right" then
|
|
ng = {}
|
|
elseif corner == "bottom_left" then
|
|
ng = { x = (g.x + g.width) - rg.width }
|
|
elseif corner == "top_left" then
|
|
ng = { x = (g.x + g.width) - rg.width,
|
|
y = (g.y + g.height) - rg.height }
|
|
else
|
|
ng = { y = (g.y + g.height) - rg.height }
|
|
end
|
|
|
|
c:geometry({ x = ng.x, y = ng.y })
|
|
return true
|
|
end
|
|
end
|
|
|
|
return prev_coords.x == state.x and prev_coords.y == state.y
|
|
end, corner .. "_corner")
|
|
end
|
|
|
|
function floating.arrange()
|
|
end
|
|
|
|
--- The floating layout.
|
|
-- @clientlayout awful.layout.suit.floating
|
|
|
|
floating.name = "floating"
|
|
|
|
return floating
|
|
|
|
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|