Skip to content

Commit 8b55723

Browse files
author
Jeremy Wootten
authored
Fix startup warnings (#1250)
1 parent 9e9c3ef commit 8b55723

File tree

4 files changed

+39
-14
lines changed

4 files changed

+39
-14
lines changed

src/MainWindow.vala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -342,10 +342,6 @@ namespace Scratch {
342342
toolbar = new Scratch.HeaderBar ();
343343
toolbar.title = title;
344344

345-
sidebar.choose_project_button.project_chosen.connect (() => {
346-
folder_manager_view.collapse_other_projects ();
347-
});
348-
349345
// SearchBar
350346
search_bar = new Scratch.Widgets.SearchBar (this);
351347
search_revealer = new Gtk.Revealer ();
@@ -524,6 +520,10 @@ namespace Scratch {
524520
}
525521
});
526522

523+
sidebar.choose_project_button.project_chosen.connect (() => {
524+
folder_manager_view.collapse_other_projects ();
525+
});
526+
527527
set_widgets_sensitive (false);
528528
}
529529

src/Services/Document.vala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ namespace Scratch.Services {
215215
}
216216

217217
public void toggle_changed_handlers (bool enabled) {
218-
if (enabled) {
218+
if (enabled && onchange_handler_id == 0) {
219219
onchange_handler_id = this.source_view.buffer.changed.connect (() => {
220220
if (onchange_handler_id != 0) {
221221
this.source_view.buffer.disconnect (onchange_handler_id);
@@ -224,7 +224,7 @@ namespace Scratch.Services {
224224
// Signals for SourceView
225225
uint timeout_saving = 0;
226226
check_undoable_actions ();
227-
this.source_view.buffer.changed.connect (() => {
227+
onchange_handler_id = source_view.buffer.changed.connect (() => {
228228
check_undoable_actions ();
229229
// Save if autosave is ON
230230
if (Scratch.settings.get_boolean ("autosave")) {
@@ -240,8 +240,9 @@ namespace Scratch.Services {
240240
}
241241
});
242242
});
243-
} else if (onchange_handler_id != 0) {
243+
} else if (!enabled && onchange_handler_id != 0) {
244244
this.source_view.buffer.disconnect (onchange_handler_id);
245+
onchange_handler_id = 0;
245246
}
246247
}
247248

src/Services/GitManager.vala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ namespace Scratch.Services {
4141
}
4242

4343
private GitManager () {
44+
// Used to populate the ChooseProject popover in sorted order
4445
project_liststore = new ListStore (typeof (FolderManager.ProjectFolderItem));
4546
}
4647

src/Widgets/ChooseProjectButton.vala

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,22 @@ public class Code.ChooseProjectButton : Gtk.MenuButton {
8787

8888
popover = project_popover;
8989

90-
project_listbox.bind_model (
91-
Scratch.Services.GitManager.get_instance ().project_liststore,
92-
create_project_row
93-
);
90+
var model = Scratch.Services.GitManager.get_instance ().project_liststore;
91+
92+
model.items_changed.connect ((pos, n_removed, n_added) => {
93+
// This model is put in sort order by the GitManager so model pos the same as listbox index
94+
var project_folder = (Scratch.FolderManager.ProjectFolderItem)(model.get_item (pos));
95+
if (n_added > 0) {
96+
var row = create_project_row (project_folder);
97+
project_listbox.insert (row, (int)pos);
98+
} else {
99+
// Double check we are removing correct row (do not rely on pos)
100+
var row = find_row_for_path (project_folder.file.file.get_path ());
101+
if (row != null) {
102+
project_listbox.remove (row);
103+
}
104+
}
105+
});
94106

95107
project_listbox.remove.connect ((row) => {
96108
var project_row = row as ProjectRow;
@@ -109,9 +121,7 @@ public class Code.ChooseProjectButton : Gtk.MenuButton {
109121
});
110122
}
111123

112-
private Gtk.Widget create_project_row (GLib.Object object) {
113-
unowned var project_folder = (Scratch.FolderManager.ProjectFolderItem) object;
114-
124+
private Gtk.Widget create_project_row (Scratch.FolderManager.ProjectFolderItem project_folder) {
115125
var project_row = new ProjectRow (project_folder.file.file.get_path ());
116126
project_folder.bind_property ("name", project_row.project_radio, "label", BindingFlags.DEFAULT | BindingFlags.SYNC_CREATE,
117127
(binding, srcval, ref targetval) => {
@@ -132,6 +142,19 @@ public class Code.ChooseProjectButton : Gtk.MenuButton {
132142
return project_row;
133143
}
134144

145+
private ProjectRow? find_row_for_path (string project_path) {
146+
foreach (var child in project_listbox.get_children ()) {
147+
if (child is ProjectRow) {
148+
var row = (ProjectRow)child;
149+
if (row.project_path == project_path) {
150+
return row;
151+
}
152+
}
153+
}
154+
155+
return null;
156+
}
157+
135158
private void select_project (ProjectRow project_entry) {
136159
project_listbox.select_row (project_entry);
137160
label_widget.label = project_entry.project_name;

0 commit comments

Comments
 (0)