diff --git a/data/core/init.lua b/data/core/init.lua index 95eb7973..992eb5de 100644 --- a/data/core/init.lua +++ b/data/core/init.lua @@ -194,6 +194,16 @@ local function project_scan_thread() end +function core.is_project_folder(dirname) + for _, dir in ipairs(core.project_directories) do + if dir.name == dirname then + return true + end + end + return false +end + + function core.scan_project_folder(dirname, filename) for _, dir in ipairs(core.project_directories) do if dir.name == dirname then diff --git a/data/plugins/treeview.lua b/data/plugins/treeview.lua index 8615343a..8214bda4 100644 --- a/data/plugins/treeview.lua +++ b/data/plugins/treeview.lua @@ -222,10 +222,19 @@ function TreeView:on_mouse_pressed(button, x, y, clicks) else if core.project_files_limit and not hovered_item.expanded then local filename, abs_filename = hovered_item.filename, hovered_item.abs_filename - local index = string.find(abs_filename, filename, 1, true) + local index = 0 + -- The loop below is used to find the first match starting from the end + -- in case there are multiple matches. + while index and index + #filename < #abs_filename do + index = string.find(abs_filename, filename, index + 1, true) + end + -- we assume here index is not nil because the abs_filename must contain the + -- relative filename local dirname = string.sub(abs_filename, 1, index - 2) - core.scan_project_folder(dirname, filename) - self:invalidate_cache(dirname) + if core.is_project_folder(dirname) then + core.scan_project_folder(dirname, filename) + self:invalidate_cache(dirname) + end end hovered_item.expanded = not hovered_item.expanded end