Add support for "geometry" argument for mouse events and awful.button
This commit is contained in:
parent
e0a163cba0
commit
d5a3669e96
|
@ -58,7 +58,7 @@ end
|
||||||
function drawable:widget_at(widget, x, y, width, height)
|
function drawable:widget_at(widget, x, y, width, height)
|
||||||
local t = {
|
local t = {
|
||||||
widget = widget,
|
widget = widget,
|
||||||
x = x, y = y,
|
x = x, y = y,drawable = self,
|
||||||
width = width, height = height
|
width = width, height = height
|
||||||
}
|
}
|
||||||
table.insert(self._widget_geometries, t)
|
table.insert(self._widget_geometries, t)
|
||||||
|
@ -140,7 +140,7 @@ end
|
||||||
local function emit_difference(name, list, skip)
|
local function emit_difference(name, list, skip)
|
||||||
local function in_table(table, val)
|
local function in_table(table, val)
|
||||||
for k, v in pairs(table) do
|
for k, v in pairs(table) do
|
||||||
if v == val then
|
if v.widget == val.widget then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -149,7 +149,7 @@ local function emit_difference(name, list, skip)
|
||||||
|
|
||||||
for k, v in pairs(list) do
|
for k, v in pairs(list) do
|
||||||
if not in_table(skip, v) then
|
if not in_table(skip, v) then
|
||||||
v:emit_signal(name)
|
v.widget:emit_signal(name,v)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -166,17 +166,13 @@ local function handle_motion(_drawable, x, y)
|
||||||
|
|
||||||
-- Build a plain list of all widgets on that point
|
-- Build a plain list of all widgets on that point
|
||||||
local widgets_list = _drawable:find_widgets(x, y)
|
local widgets_list = _drawable:find_widgets(x, y)
|
||||||
local widgets = {}
|
|
||||||
for k, v in pairs(widgets_list) do
|
|
||||||
widgets[#widgets + 1] = v.widget
|
|
||||||
end
|
|
||||||
|
|
||||||
-- First, "leave" all widgets that were left
|
-- First, "leave" all widgets that were left
|
||||||
emit_difference("mouse::leave", _drawable._widgets_under_mouse, widgets)
|
emit_difference("mouse::leave", _drawable._widgets_under_mouse, widgets_list)
|
||||||
-- Then enter some widgets
|
-- Then enter some widgets
|
||||||
emit_difference("mouse::enter", widgets, _drawable._widgets_under_mouse)
|
emit_difference("mouse::enter", widgets_list, _drawable._widgets_under_mouse)
|
||||||
|
|
||||||
_drawable._widgets_under_mouse = widgets
|
_drawable._widgets_under_mouse = widgets_list
|
||||||
end
|
end
|
||||||
|
|
||||||
local function setup_signals(_drawable)
|
local function setup_signals(_drawable)
|
||||||
|
@ -243,13 +239,13 @@ function drawable.new(d, widget_arg)
|
||||||
ret._widgets_under_mouse = {}
|
ret._widgets_under_mouse = {}
|
||||||
|
|
||||||
local function button_signal(name)
|
local function button_signal(name)
|
||||||
d:connect_signal(name, function(d, x, y, ...)
|
d:connect_signal(name, function(d, x, y, button, modifiers)
|
||||||
local widgets = ret:find_widgets(x, y)
|
local widgets = ret:find_widgets(x, y)
|
||||||
for k, v in pairs(widgets) do
|
for k, v in pairs(widgets) do
|
||||||
-- Calculate x/y inside of the widget
|
-- Calculate x/y inside of the widget
|
||||||
local lx = x - v.x
|
local lx = x - v.x
|
||||||
local ly = y - v.y
|
local ly = y - v.y
|
||||||
v.widget:emit_signal(name, lx, ly, ...)
|
v.widget:emit_signal(name, lx, ly, button, modifiers,v)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,7 +23,7 @@ function base:buttons(_buttons)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Handle a button event on a widget. This is used internally.
|
--- Handle a button event on a widget. This is used internally.
|
||||||
function base.handle_button(event, widget, x, y, button, modifiers)
|
function base.handle_button(event, widget, x, y, button, modifiers, geometry)
|
||||||
local function is_any(mod)
|
local function is_any(mod)
|
||||||
return #mod == 1 and mod[1] == "Any"
|
return #mod == 1 and mod[1] == "Any"
|
||||||
end
|
end
|
||||||
|
@ -55,7 +55,7 @@ function base.handle_button(event, widget, x, y, button, modifiers)
|
||||||
|
|
||||||
-- Emit the signals
|
-- Emit the signals
|
||||||
for k, v in pairs(matches) do
|
for k, v in pairs(matches) do
|
||||||
v:emit_signal(event)
|
v:emit_signal(event,geometry)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue