mouse.dragtotag: Fix and port to the new move API

It wasn't really working as it would in other WM. It might have
been a feature, but I got the behavior in line with KDE and Gnome.
This commit is contained in:
Emmanuel Lepage Vallee 2016-04-27 23:20:00 -04:00
parent a62e749216
commit cd632e4a84
2 changed files with 68 additions and 37 deletions

View File

@ -0,0 +1,59 @@
---------------------------------------------------------------------------
--- When the the mouse reach the end of the screen, then switch tag instead
-- of screens.
--
-- @author Julien Danjou <julien@danjou.info>
-- @copyright 2008 Julien Danjou
-- @release @AWESOME_VERSION@
-- @submodule mouse
---------------------------------------------------------------------------
local capi = {screen = screen, mouse = mouse}
local util = require("awful.util")
local tag = require("awful.tag")
local resize = require("awful.mouse.resize")
local module = {}
function module.drag_to_tag(c)
if (not c) or (not c.valid) then return end
local coords = capi.mouse.coords()
local dir = nil
local wa = capi.screen[c.screen].workarea
if coords.x >= wa.x + wa.width - 1 then
capi.mouse.coords({ x = wa.x + 2 }, true)
dir = "right"
elseif coords.x <= wa.x + 1 then
capi.mouse.coords({ x = wa.x + wa.width - 2 }, true)
dir = "left"
end
local tags = c.screen.tags
local t = c.screen.selected_tag
local idx = t.index
if dir then
if dir == "right" then
local newtag = tags[util.cycle(#tags, idx + 1)]
c:move_to_tag(newtag)
tag.viewnext()
elseif dir == "left" then
local newtag = tags[util.cycle(#tags, idx - 1)]
c:move_to_tag(newtag)
tag.viewprev()
end
end
end
resize.add_move_callback(function(c, _, _)
if module.enabled then
module.drag_to_tag(c)
end
end, "mouse.move")
return setmetatable(module, {__call = function(_, ...) return module.drag_to_tag(...) end})

View File

@ -9,7 +9,6 @@
-- Grab environment we need
local layout = require("awful.layout")
local tag = require("awful.tag")
local aplace = require("awful.placement")
local awibox = require("awful.wibox")
local util = require("awful.util")
@ -27,6 +26,7 @@ local capi =
local mouse = {
resize = require("awful.mouse.resize"),
snap = require("awful.mouse.snap"),
drag_to_tag = require("awful.mouse.drag_to_tag")
}
mouse.object = {}
@ -45,7 +45,7 @@ mouse.wibox = {}
-- @tfield[opt=true] boolean awful.mouse.snap.client_enabled
--- Enable changing tag when a client is dragged to the edge of the screen.
-- @tfield[opt=false] integer awful.mouse.snap.drag_to_tag_enabled
-- @tfield[opt=false] integer awful.mouse.drag_to_tag.enabled
--- The snap outline background color.
-- @beautiful beautiful.snap_bg
@ -109,44 +109,16 @@ end
mouse.client.dragtotag = { }
--- Move a client to a tag by dragging it onto the left / right side of the screen.
-- @function awful.mouse.client.dragtotag.border
-- @deprecated awful.mouse.client.dragtotag.border
-- @param c The client to move
function mouse.client.dragtotag.border(c)
capi.mousegrabber.run(function (_mouse)
if not c.valid then return false end
util.deprecated("Use awful.mouse.snap.drag_to_tag_enabled = true instead "..
"of awful.mouse.client.dragtotag.border(c). It will now be enabled.")
local button_down = false
for _, v in ipairs(_mouse.buttons) do
if v then button_down = true end
end
local wa = capi.screen[c.screen].workarea
if _mouse.x >= wa.x + wa.width then
capi.mouse.coords({ x = wa.x + wa.width - 1 })
elseif _mouse.x <= wa.x then
capi.mouse.coords({ x = wa.x + 1 })
end
if not button_down then
local tags = c.screen.tags
local t = c.screen.selected_tag
local idx
for i, v in ipairs(tags) do
if v == t then
idx = i
end
end
if _mouse.x > wa.x + wa.width - 10 then
local newtag = tags[util.cycle(#tags, idx + 1)]
c:move_to_tag(newtag)
tag.viewnext()
elseif _mouse.x < wa.x + 10 then
local newtag = tags[util.cycle(#tags, idx - 1)]
c:move_to_tag(newtag)
tag.viewprev()
end
return false
end
return true
end, "fleur")
-- Enable drag to border
mouse.snap.drag_to_tag_enabled = true
return mouse.client.move(c)
end
--- Move the wibox under the cursor.