various sorting fixes

This commit is contained in:
Bilal Elmoussaoui 2020-12-06 06:10:24 +01:00
parent 4845bcb3ea
commit 3a4161c46c
3 changed files with 17 additions and 5 deletions

View file

@ -15,6 +15,7 @@ mod imp {
#[template_child(id = "providers_list")]
pub providers_list: TemplateChild<gtk::ListBox>,
pub filter_model: gtk::FilterListModel,
pub sorter: ProviderSorter,
}
impl ObjectSubclass for ProvidersList {
@ -31,6 +32,7 @@ mod imp {
gtk::FilterListModel::new(gtk::NONE_FILTER_LIST_MODEL, gtk::NONE_FILTER);
Self {
providers_list: TemplateChild::default(),
sorter: ProviderSorter::new(),
filter_model,
}
}
@ -79,6 +81,7 @@ impl ProvidersList {
if let Some(filter) = self_.filter_model.get_filter() {
filter.changed(gtk::FilterChange::Different);
}
self_.sorter.changed(gtk::SorterChange::Different);
}
pub fn search(&self, text: String) {
@ -94,8 +97,7 @@ impl ProvidersList {
fn setup_widgets(&self) {
let self_ = imp::ProvidersList::from_instance(self);
let sorter = ProviderSorter::new();
let sort_model = gtk::SortListModel::new(Some(&self_.filter_model), Some(&sorter));
let sort_model = gtk::SortListModel::new(Some(&self_.filter_model), Some(&self_.sorter));
self_.providers_list.get().bind_model(
Some(&sort_model),
Some(Box::new(clone!(@weak self as list => move |obj| {
@ -104,7 +106,7 @@ impl ProvidersList {
row.connect_local("changed", false, clone!(@weak list => move |_| {
list.refilter();
None
}));
})).unwrap();
row.upcast::<gtk::Widget>()
}))),

View file

@ -118,7 +118,7 @@ impl ProviderRow {
let provider = self.provider();
let create_callback = clone!(@weak self as provider_row => move |account: &glib::Object| {
let create_callback = clone!(@weak self as provider_row, @weak sorter => move |account: &glib::Object| {
let account = account.clone().downcast::<Account>().unwrap();
let row = AccountRow::new(account.clone());
row.connect_local(
@ -130,6 +130,15 @@ impl ProviderRow {
provider_row.emit("changed", &[]).unwrap();
None
}),
).unwrap();
account.connect_local("notify::name",
false,
clone!(@weak provider_row, @weak sorter => move |_| {
// Re-sort in case the name was updated
sorter.changed(gtk::SorterChange::Different);
provider_row.emit("changed", &[]).unwrap();
None
}),
)
.unwrap();
row.upcast::<gtk::Widget>()

View file

@ -222,6 +222,7 @@ impl Window {
};
None
}),
);
)
.unwrap();
}
}