Fix NagView missing mouse events
This commit is contained in:
parent
8550049db8
commit
88ed312f6b
|
@ -104,13 +104,38 @@ function NagView:on_mouse_moved(mx, my, ...)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Used to store saved value for RootView.on_view_mouse_pressed
|
||||||
|
local on_view_mouse_pressed
|
||||||
|
|
||||||
|
|
||||||
|
local function capture_mouse_pressed(nag_view)
|
||||||
|
-- RootView is loaded locally to avoid NagView and RootView being
|
||||||
|
-- mutually recursive
|
||||||
|
local RootView = require "core.rootview"
|
||||||
|
on_view_mouse_pressed = RootView.on_view_mouse_pressed
|
||||||
|
RootView.on_view_mouse_pressed = function(button, x, y, clicks)
|
||||||
|
local handled = NagView.on_mouse_pressed(nag_view, button, x, y, clicks)
|
||||||
|
return handled or on_view_mouse_pressed(button, x, y, clicks)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function release_mouse_pressed()
|
||||||
|
local RootView = require "core.rootview"
|
||||||
|
if on_view_mouse_pressed then
|
||||||
|
RootView.on_view_mouse_pressed = on_view_mouse_pressed
|
||||||
|
on_view_mouse_pressed = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function NagView:on_mouse_pressed(button, mx, my, clicks)
|
function NagView:on_mouse_pressed(button, mx, my, clicks)
|
||||||
if NagView.super.on_mouse_pressed(self, button, mx, my, clicks) then return end
|
if NagView.super.on_mouse_pressed(self, button, mx, my, clicks) then return true end
|
||||||
for i, _, x,y,w,h in self:each_option() do
|
for i, _, x,y,w,h in self:each_option() do
|
||||||
if mx >= x and my >= y and mx < x + w and my < y + h then
|
if mx >= x and my >= y and mx < x + w and my < y + h then
|
||||||
self:change_hovered(i)
|
self:change_hovered(i)
|
||||||
command.perform "dialog:select"
|
command.perform "dialog:select"
|
||||||
break
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -202,6 +227,12 @@ function NagView:next()
|
||||||
self.force_focus = self.message ~= nil
|
self.force_focus = self.message ~= nil
|
||||||
core.set_active_view(self.message ~= nil and self or
|
core.set_active_view(self.message ~= nil and self or
|
||||||
core.next_active_view or core.last_active_view)
|
core.next_active_view or core.last_active_view)
|
||||||
|
if self.message ~= nil and self then
|
||||||
|
-- We add a hook to manage all the mouse_pressed events.
|
||||||
|
capture_mouse_pressed(self)
|
||||||
|
else
|
||||||
|
release_mouse_pressed()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function NagView:show(title, message, options, on_select)
|
function NagView:show(title, message, options, on_select)
|
||||||
|
|
Loading…
Reference in New Issue