Skip to content

Commit 80b785a

Browse files
jeremypwzeebok
andauthored
ChooseProjectButton: prevent duplicate projects in dropdown (#1624)
* Check duplicate projects in before adding to project_liststore * Initialize ChooseProjectButton in second window properly --------- Co-authored-by: Ryan Kornheisl <[email protected]>
1 parent c106ee1 commit 80b785a

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

src/FolderManager/Item.vala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ namespace Scratch.FolderManager {
5151
file.rename (new_name);
5252
}
5353

54+
public bool equal (Item b) {
55+
return path == b.path;
56+
}
57+
5458
public void trash () {
5559
file.trash ();
5660
}

src/Services/GitManager.vala

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,19 @@ namespace Scratch.Services {
5151
}
5252

5353
public MonitoredRepository? add_project (FolderManager.ProjectFolderItem root_folder) {
54-
var root_path = root_folder.file.file.get_path ();
54+
var root_path = root_folder.path;
5555
MonitoredRepository? monitored_repo = null;
56+
uint position;
57+
if (project_liststore.find_with_equal_func (
58+
root_folder,
59+
(a, b) => { return ((FolderManager.Item) a).equal ((FolderManager.Item) b); },
60+
out position
61+
)) {
62+
63+
var repo = project_gitrepo_map.@get (root_path);
64+
return repo;
65+
}
66+
5667
try {
5768
var git_repo = Ggit.Repository.open (root_folder.file.file);
5869
if (!project_gitrepo_map.has_key (root_path)) {

src/Widgets/ChooseProjectButton.vala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,16 @@ public class Code.ChooseProjectButton : Gtk.MenuButton {
108108

109109
popover = project_popover;
110110

111+
// Initialise with any pre-existing projects (needed for second and subsequent window)
111112
var git_manager = Scratch.Services.GitManager.get_instance ();
113+
var src = git_manager.project_liststore;
114+
for (int index = 0; index < src.n_items; index++) {
115+
var item = src.get_object (index);
116+
if (item is Scratch.FolderManager.ProjectFolderItem) {
117+
var row = create_project_row ((Scratch.FolderManager.ProjectFolderItem)item);
118+
project_listbox.insert (row, index);
119+
}
120+
}
112121

113122
git_manager.project_liststore.items_changed.connect ((src, pos, n_removed, n_added) => {
114123
var rows = project_listbox.get_children ();

0 commit comments

Comments
 (0)