diff options
author | Stefano Facchini <stefano.facchini@gmail.com> | 2012-10-01 22:52:15 +0200 |
---|---|---|
committer | Stefano Facchini <stefano.facchini@gmail.com> | 2012-10-02 18:09:14 +0200 |
commit | 6b1d976a47054b7a15c725355b7c21b51dbe3bc2 (patch) | |
tree | 4265d4261b58bfd793a6ef258d063be53262f055 /src/baobab-location-list.vala | |
parent | c74a1aa258099db35234c23ed86ccae251dd3054 (diff) | |
download | baobab-6b1d976a47054b7a15c725355b7c21b51dbe3bc2.tar.gz |
Sort recent info by MRU
Otherwise they show up in creation order
https://bugzilla.gnome.org/show_bug.cgi?id=685252
Diffstat (limited to 'src/baobab-location-list.vala')
-rw-r--r-- | src/baobab-location-list.vala | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/baobab-location-list.vala b/src/baobab-location-list.vala index a033a64..469e080 100644 --- a/src/baobab-location-list.vala +++ b/src/baobab-location-list.vala @@ -142,17 +142,24 @@ namespace Baobab { Gtk.RecentManager recent_manager = Gtk.RecentManager.get_default (); List<Gtk.RecentInfo> recent_items = recent_manager.get_items (); - int n_recents = 0; - foreach (var info in recent_items) { - if (n_recents >= MAX_RECENT_LOCATIONS) { - break; - } - if (info.has_group ("baobab") && info.exists ()) { - if (!already_present (File.new_for_uri (info.get_uri ()))) { - locations.append (new Location.for_recent_info (info)); - n_recents++; - } + unowned List<Gtk.RecentInfo> iter = recent_items; + while (iter != null) { + unowned List<Gtk.RecentInfo> next = iter.next; + if (!iter.data.has_group ("baobab") || !iter.data.exists () || already_present (File.new_for_uri (iter.data.get_uri ()))) { + recent_items.remove_link (iter); } + iter = next; + } + + recent_items.sort ((a, b) => { + return (int)(b.get_modified () - a.get_modified ()); + }); + + recent_items.nth (MAX_RECENT_LOCATIONS - 1).next = null; + recent_items.reverse (); + + foreach (var info in recent_items) { + locations.append (new Location.for_recent_info (info)); } update (); |