diff --git a/data/io.elementary.code.gschema.xml b/data/io.elementary.code.gschema.xml
index 185986686..0cfce65a0 100644
--- a/data/io.elementary.code.gschema.xml
+++ b/data/io.elementary.code.gschema.xml
@@ -58,6 +58,11 @@
Terminal visibility
Whether or not the terminal pane is visible
+
+ true
+ Sort open projects
+ Keep the open projects in alphabetical order
+
''
Last opened path
diff --git a/src/FolderManager/FileView.vala b/src/FolderManager/FileView.vala
index 31c858e96..1c1fa7276 100644
--- a/src/FolderManager/FileView.vala
+++ b/src/FolderManager/FileView.vala
@@ -83,6 +83,10 @@ public class Scratch.FolderManager.FileView : Code.Widgets.SourceList, Code.Pane
toplevel_action_group = get_action_group (MainWindow.ACTION_GROUP);
assert_nonnull (toplevel_action_group);
});
+
+ Scratch.saved_state.changed["order-folders"].connect (() => {
+ order_folders ();
+ });
}
private void action_close_folder (SimpleAction action, GLib.Variant? parameter) {
@@ -158,6 +162,10 @@ public class Scratch.FolderManager.FileView : Code.Widgets.SourceList, Code.Pane
}
public void order_folders () {
+ if (!Scratch.saved_state.get_boolean ("order-folders")) {
+ return;
+ }
+
var list = new Gee.ArrayList ();
foreach (var child in root.children) {
@@ -587,6 +595,8 @@ public class Scratch.FolderManager.FileView : Code.Widgets.SourceList, Code.Pane
});
yield;
+
+ order_folders ();
}
private bool is_open (File folder) {
diff --git a/src/MainWindow.vala b/src/MainWindow.vala
index 3a4d3260b..1e09bc066 100644
--- a/src/MainWindow.vala
+++ b/src/MainWindow.vala
@@ -78,7 +78,6 @@ namespace Scratch {
public const string ACTION_OPEN_FOLDER = "action-open-folder";
public const string ACTION_OPEN_PROJECT = "action-open-project";
public const string ACTION_COLLAPSE_ALL_FOLDERS = "action-collapse-all-folders";
- public const string ACTION_ORDER_FOLDERS = "action-order-folders";
public const string ACTION_GO_TO = "action-go-to";
public const string ACTION_SORT_LINES = "action-sort-lines";
public const string ACTION_NEW_TAB = "action-new-tab";
@@ -142,7 +141,6 @@ namespace Scratch {
{ ACTION_OPEN_FOLDER, action_open_folder, "s" },
{ ACTION_OPEN_PROJECT, action_open_project },
{ ACTION_COLLAPSE_ALL_FOLDERS, action_collapse_all_folders },
- { ACTION_ORDER_FOLDERS, action_order_folders },
{ ACTION_PREFERENCES, action_preferences },
{ ACTION_REVERT, action_revert },
{ ACTION_SAVE, action_save },
@@ -1121,10 +1119,6 @@ namespace Scratch {
folder_manager_view.collapse_all ();
}
- private void action_order_folders () {
- folder_manager_view.order_folders ();
- }
-
private void action_save () {
var doc = get_current_document (); /* may return null */
if (doc != null) {
diff --git a/src/Widgets/Sidebar.vala b/src/Widgets/Sidebar.vala
index 2f95327ea..0b6a7ef47 100644
--- a/src/Widgets/Sidebar.vala
+++ b/src/Widgets/Sidebar.vala
@@ -22,6 +22,8 @@ public class Code.Sidebar : Gtk.Grid {
URI_LIST
}
+ public const string SIDEBAR_ACTION_GROUP = "sidebar";
+ public const string SIDEBAR_ACTION_PREFIX = SIDEBAR_ACTION_GROUP + ".";
public Gtk.Stack stack { get; private set; }
public Code.ChooseProjectButton choose_project_button { get; private set; }
public Hdy.HeaderBar headerbar { get; private set; }
@@ -80,8 +82,15 @@ public class Code.Sidebar : Gtk.Grid {
var collapse_all_menu_item = new GLib.MenuItem (_("Collapse All"), Scratch.MainWindow.ACTION_PREFIX
+ Scratch.MainWindow.ACTION_COLLAPSE_ALL_FOLDERS);
- var order_projects_menu_item = new GLib.MenuItem (_("Alphabetize"), Scratch.MainWindow.ACTION_PREFIX
- + Scratch.MainWindow.ACTION_ORDER_FOLDERS);
+ var action_group = new SimpleActionGroup ();
+ var sort_action = Scratch.saved_state.create_action ("order-folders");
+ action_group.add_action (sort_action);
+ insert_action_group (SIDEBAR_ACTION_GROUP, action_group);
+
+ var order_projects_menu_item = new GLib.MenuItem (
+ _("Keep Sorted"),
+ SIDEBAR_ACTION_PREFIX + sort_action.name
+ );
var project_menu = new GLib.Menu ();
project_menu.append_item (collapse_all_menu_item);