diff -Naur psi-0.10-test3-orig/src/contactview.cpp psi-0.10-test3/src/contactview.cpp --- psi-0.10-test3-orig/src/contactview.cpp 2005-11-15 00:44:16.000000000 +0000 +++ psi-0.10-test3/src/contactview.cpp 2005-11-15 00:49:24.000000000 +0000 @@ -376,8 +376,8 @@ QPtrListIterator it(e->cvi); for(ContactViewItem *i; (i = it.current()); ++it) { i->setContact(&e->u); - if(!u.isAvailable()) - i->stopAnimateNick(); + //if(!u.isAvailable()) + // i->stopAnimateNick(); } } @@ -475,13 +475,17 @@ return; } else if (!e->alerting && + (e->cvi.getFirst() == 0 || + !e->cvi.getFirst()->isAnimatingNick()) && option.contactVisible.contains(u.jid().bare()) && option.contactVisible[u.jid().bare()] != -1) { if (option.contactVisible[u.jid().bare()] == 0 && !d->cv->isShowHidden()) return; } else { - if(!e->alerting) { + if (!e->alerting && + (e->cvi.getFirst() == 0 || + !e->cvi.getFirst()->isAnimatingNick())) { if((!d->cv->isShowOffline() && !u.isAvailable()) || (!d->cv->isShowAway() && u.isAway()) || (!d->cv->isShowHidden() && u.isHidden())) return; } @@ -3693,6 +3697,10 @@ d->animatingNick = false; repaint(); + + // in case this was an offline animation, we need to remove the contact item now + //d->cp->updateEntry(d->u); + d->cp->removeAllUnneededContactItems(); } void ContactViewItem::setAnimateNick() diff -Naur psi-0.10-test3-orig/src/psiaccount.cpp psi-0.10-test3/src/psiaccount.cpp --- psi-0.10-test3-orig/src/psiaccount.cpp 2005-11-15 00:44:16.000000000 +0000 +++ psi-0.10-test3/src/psiaccount.cpp 2005-11-15 00:46:10.000000000 +0000 @@ -1468,6 +1468,7 @@ QPtrList list = findRelavent(j); QPtrListIterator it(list); for(UserListItem *u; (u = it.current()); ++it) { + bool doAnim = false; local = false; if(u->isSelf() && res.name() == d->client->resource()) local = true; @@ -1487,10 +1488,14 @@ if(!isDisconnecting && !local && !u->isHidden()) { doSound = true; doPopup = true; + if (notifyOnlineOk) doAnim = true; } } } + if(doAnim && option.rosterAnim) + d->cp->animateNick(u->jid()); + u->setPresenceError(""); cpUpdate(*u, res.name(), true); }