В awesome-wm: Как предотвратить выход мыши из клиента? (например, полноэкранная или оконная игра)

Кто-нибудь может дать мне подсказку, как предотвратить выход мыши из определенного окна или полноэкранной игры? Пробовал это в трех паровых играх (Satellite Reign, Cities:Skylines & Civ 5), у всех одна и та же проблема: как только я перемещаю мышь на границе (для панорамирования экрана), вместо этого фокус переключается на мой второй монитор.

Любой совет или подсказка к правильному источнику (я полагаю, поведение мыши как собственное свойство клиента?) Очень приветствуется:)

Спасибо!

1 ответ

Потрясающие wm сигналы могут быть полезны. Вот быстрый пример (больше похоже на подсказку), как это работает.
Поместите это где-нибудь в начале rc.lua

local is_mouse_locked = false

Этот код положить внутрь client.connect_signal("manage", function (c, startup) блок

-- in this example
-- signal connected to every window and make action if 'is_mouse_locked' switcher active
-- however much better would be connect and disconnect signal to certain window by hotkey
c:connect_signal("mouse::leave",
    function(c)
        if is_mouse_locked then
            local cg = c:geometry() -- get window size
            local mg = mouse.coords() -- get current mouse position

            -- quick and dirty calculate for mouse position correction
            local newx = mg.x <= cg.x and cg.x + 5 or mg.x >= (cg.x + cg.width) and cg.x + cg.width - 5 or mg.x
            local newy = mg.y <= cg.y and cg.y + 5 or mg.y >= (cg.y + cg.height) and cg.y + cg.height - 5 or mg.y

            -- set mouse to new position
            mouse.coords({ x = newx, y = newy })
        end
    end
)

И добавить это к горячим клавишам

awful.key({ modkey,           }, "v", function () is_mouse_locked = not is_mouse_locked end),
Другие вопросы по тегам