From ceb131d85dfc5513e119367126faeedac541104f Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Wed, 2 Jul 2025 15:10:33 +0100 Subject: [PATCH 1/2] Check duplicate projects in before adding to project_liststore --- src/FolderManager/Item.vala | 4 ++++ src/Services/GitManager.vala | 13 ++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/FolderManager/Item.vala b/src/FolderManager/Item.vala index 19cb84f112..5a1ad924c7 100644 --- a/src/FolderManager/Item.vala +++ b/src/FolderManager/Item.vala @@ -51,6 +51,10 @@ namespace Scratch.FolderManager { file.rename (new_name); } + public bool equal (Item b) { + return path == b.path; + } + public void trash () { file.trash (); } diff --git a/src/Services/GitManager.vala b/src/Services/GitManager.vala index 5b80d3084e..0c627930b8 100644 --- a/src/Services/GitManager.vala +++ b/src/Services/GitManager.vala @@ -51,8 +51,19 @@ namespace Scratch.Services { } public MonitoredRepository? add_project (FolderManager.ProjectFolderItem root_folder) { - var root_path = root_folder.file.file.get_path (); + var root_path = root_folder.path; MonitoredRepository? monitored_repo = null; + uint position; + if (project_liststore.find_with_equal_func ( + root_folder, + (a, b) => { return ((FolderManager.Item) a).equal ((FolderManager.Item) b); }, + out position + )) { + + var repo = project_gitrepo_map.@get (root_path); + return repo; + } + try { var git_repo = Ggit.Repository.open (root_folder.file.file); if (!project_gitrepo_map.has_key (root_path)) { From b8e8ce92e289ffe889169798515b2c716cbf1886 Mon Sep 17 00:00:00 2001 From: Jeremy Wootten Date: Wed, 2 Jul 2025 15:11:23 +0100 Subject: [PATCH 2/2] Initialize ChooseProjectButton in second window properly --- src/Widgets/ChooseProjectButton.vala | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Widgets/ChooseProjectButton.vala b/src/Widgets/ChooseProjectButton.vala index 3b035c5b2d..4e68f6d704 100644 --- a/src/Widgets/ChooseProjectButton.vala +++ b/src/Widgets/ChooseProjectButton.vala @@ -99,7 +99,16 @@ public class Code.ChooseProjectButton : Gtk.MenuButton { popover = project_popover; + // Initialise with any pre-existing projects (needed for second and subsequent window) var git_manager = Scratch.Services.GitManager.get_instance (); + var src = git_manager.project_liststore; + for (int index = 0; index < src.n_items; index++) { + var item = src.get_object (index); + if (item is Scratch.FolderManager.ProjectFolderItem) { + var row = create_project_row ((Scratch.FolderManager.ProjectFolderItem)item); + project_listbox.insert (row, index); + } + } git_manager.project_liststore.items_changed.connect ((src, pos, n_removed, n_added) => { var rows = project_listbox.get_children ();