From 831cf953c6f412df84a0178a90645ab000555cd1 Mon Sep 17 00:00:00 2001 From: Julian Hofer Date: Wed, 15 Nov 2023 15:25:07 +0100 Subject: [PATCH] Preserve order when removing items from file model The files are stored in an index map. When removing from that map, `remove` does not guarantee to preserve order. However `shift_remove` does. Fixes #270 --- src/file_model.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/file_model.rs b/src/file_model.rs index ea8b46a..1bc2c59 100644 --- a/src/file_model.rs +++ b/src/file_model.rs @@ -231,7 +231,7 @@ impl LpFileModel { } pub fn remove(&self, file: &gio::File) -> Option { - self.imp().files.borrow_mut().remove(&file.uri()) + self.imp().files.borrow_mut().shift_remove(&file.uri()) } /// Currently sorts by name @@ -289,14 +289,14 @@ impl LpFileModel { } gio::FileMonitorEvent::Deleted | gio::FileMonitorEvent::MovedOut | gio::FileMonitorEvent::Unmounted => { let mut files = self.imp().files.borrow_mut(); - files.remove(&file_a.uri()).is_some() + files.shift_remove(&file_a.uri()).is_some() } gio::FileMonitorEvent::Renamed => { if let Some(file_b) = file_b { let mut changed = false; { let mut files = self.imp().files.borrow_mut(); - changed |= files.remove(&file_a.uri()).is_some(); + changed |= files.shift_remove(&file_a.uri()).is_some(); if Self::is_image_file(file_b) { changed |= files.insert(file_b.uri(), file_b.clone()).is_none(); if changed {