diff --git a/src/subscription.rs b/src/subscription.rs index e2580c0..bc102c3 100644 --- a/src/subscription.rs +++ b/src/subscription.rs @@ -174,7 +174,18 @@ impl Subscription { fn handle_event(&self, ev: ListenerEvent) { match ev { ListenerEvent::Message(msg) => { - self.imp().messages.append(&glib::BoxedAnyObject::new(msg)); + let time = msg.time; + let messages = &self.imp().messages; + let pos = (0..messages.n_items()) + .find(|&i| { + messages + .item(i) + .and_then(|item| item.downcast::().ok()) + .map(|b| b.borrow::().time > time) + .unwrap_or(false) + }) + .unwrap_or(messages.n_items() as u32); + messages.insert(pos, &glib::BoxedAnyObject::new(msg)); self.update_unread_count(); } ListenerEvent::ConnectionStateChanged(connection_state) => {