Compare commits

...

1 Commits

Author SHA1 Message Date
Francesco Abbate 1f276c0bcb Fix inactive divider intercepting mouse clicks
In the function Node:get_divider_overlapping_point() we check if we
hit a divider (separator between two nodes). If yes the event is
intercepted and used to set the cursor and drag the separator if
appropriate.

In reality, on mouse move events, when one of the node is a split
and one of its child is not resizable we don't set the cursor to
and we don't intercept the event. However on a mouse pressed event
the event was intercepted regardless of the fact that the child
nodes are resizable or not. This latter behavior was unwanted as it
prevents mouse clicks to be processed because of a divided that is
inactive.

In addition it prevented processing of mouse clicks when the child
node was invisible leading to issue #363. For this latter the issue
was the invisible NagView in the upper part of the window.

To fix the problem we provide a divider with
Node:get_divider_overlapping_point() only if its child node are
resizable. In this way the mouse clicks or movements are intercepted
only if the divider is actually active.
2021-08-04 22:13:56 +02:00
1 changed files with 10 additions and 10 deletions

View File

@ -240,6 +240,8 @@ end
function Node:get_divider_overlapping_point(px, py) function Node:get_divider_overlapping_point(px, py)
if self.type ~= "leaf" then if self.type ~= "leaf" then
local axis = self.type == "hsplit" and "x" or "y"
if self.a:is_resizable(axis) and self.b:is_resizable(axis) then
local p = 6 local p = 6
local x, y, w, h = self:get_divider_rect() local x, y, w, h = self:get_divider_rect()
x, y = x - p, y - p x, y = x - p, y - p
@ -247,6 +249,7 @@ function Node:get_divider_overlapping_point(px, py)
if px > x and py > y and px < x + w and py < y + h then if px > x and py > y and px < x + w and py < y + h then
return self return self
end end
end
return self.a:get_divider_overlapping_point(px, py) return self.a:get_divider_overlapping_point(px, py)
or self.b:get_divider_overlapping_point(px, py) or self.b:get_divider_overlapping_point(px, py)
end end
@ -823,10 +826,7 @@ function RootView:on_mouse_moved(x, y, dx, dy)
if node and node:get_scroll_button_index(x, y) then if node and node:get_scroll_button_index(x, y) then
core.request_cursor("arrow") core.request_cursor("arrow")
elseif div then elseif div then
local axis = (div.type == "hsplit" and "x" or "y")
if div.a:is_resizable(axis) and div.b:is_resizable(axis) then
core.request_cursor(div.type == "hsplit" and "sizeh" or "sizev") core.request_cursor(div.type == "hsplit" and "sizeh" or "sizev")
end
elseif tab_index then elseif tab_index then
core.request_cursor("arrow") core.request_cursor("arrow")
elseif node then elseif node then