From 5e5f587beadefc90b99f09643e3a05655a386c48 Mon Sep 17 00:00:00 2001 From: Emmanuel Lepage Vallee Date: Sun, 30 May 2021 23:55:07 -0700 Subject: [PATCH 1/2] mouse: Fix the "is button X pressed" properties. Apparently it never worked. Fix #3352 --- lib/awful/mouse/init.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/awful/mouse/init.lua b/lib/awful/mouse/init.lua index fac053e9..f42b0d1a 100644 --- a/lib/awful/mouse/init.lua +++ b/lib/awful/mouse/init.lua @@ -341,9 +341,9 @@ function mouse.remove_client_mousebinding(button) return false end -for _, b in ipairs {"left", "right", "middle"} do +for k, b in ipairs {"left", "middle", "right"} do mouse.object["is_".. b .."_mouse_button_pressed"] = function() - return capi.mouse.coords().buttons[1] + return capi.mouse.coords().buttons[k] end end @@ -367,6 +367,10 @@ end) capi.mouse.set_index_miss_handler(function(_,key) if mouse.object["get_"..key] then return mouse.object["get_"..key]() + elseif mouse.object[key] and key:sub(1, 3) == "is_" then + return mouse.object[key]() + elseif mouse.object[key] then + return mouse.object[key] else return props[key] end From 82bd644ea1241e883f09c8e57a0a761a31155f42 Mon Sep 17 00:00:00 2001 From: Emmanuel Lepage Vallee Date: Sun, 30 May 2021 23:55:58 -0700 Subject: [PATCH 2/2] tests: Regression test for #3352 --- tests/test-awful-mouse.lua | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/test-awful-mouse.lua diff --git a/tests/test-awful-mouse.lua b/tests/test-awful-mouse.lua new file mode 100644 index 00000000..ab57cc51 --- /dev/null +++ b/tests/test-awful-mouse.lua @@ -0,0 +1,41 @@ +require("awful.mouse") + +local steps = {} + +-- warning: order is important +local buttons = {"left", "middle", "right"} + +-- Check the is_****_mouse_button_pressed properties. +for k, v in ipairs(buttons) do + + -- Press the button. + table.insert(steps, function() + root.fake_input("button_press", k) + return true + end) + + -- Check the property matrix. + table.insert(steps, function() + if not mouse["is_"..v.."_mouse_button_pressed"] then return end + + for _, v2 in ipairs(buttons) do + assert(mouse["is_"..v2.."_mouse_button_pressed"] == (v == v2)) + end + + root.fake_input("button_release", k) + + return true + end) + + -- Release the button. + table.insert(steps, function() + if mouse["is_"..v.."_mouse_button_pressed"] then return end + + return true + end) + +end + +require("_runner").run_steps(steps) + +-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80