# HG changeset patch # User Marcus Lundblad # Date 1230202129 0 # Node ID cf29591fe78a5f42dd2753f6efc248edc0644df6 # Parent 6185767dc03ce04b5fc2df1bbf9294e0e025eb05 Only update the idle time on a buddy when getting info if the buddy already has an idle time set. This will avoid setting idle time on a resource that won't send an updated idle (going unidle) in a later on (thus getting "stuck" idle). diff -r 6185767dc03c -r cf29591fe78a libpurple/protocols/jabber/buddy.c --- a/libpurple/protocols/jabber/buddy.c Wed Dec 24 22:51:16 2008 +0000 +++ b/libpurple/protocols/jabber/buddy.c Thu Dec 25 10:48:49 2008 +0000 @@ -1646,15 +1646,26 @@ if (jb) { resource = jabber_get_resource(from); buddy_name = jabber_get_bare_jid(from); + /* if the resource already has an idle time set, we + must have gotten it originally from a presence. In + this case we update it. Otherwise don't update it, to + avoid setting an idle and not getting informed about + the resource getting unidle */ if (resource && buddy_name) { jbr = jabber_buddy_find_resource(jb, resource); - jbr->idle = time(NULL) - sec; - if (jbr == - jabber_buddy_find_resource(jb, NULL) && - jbr->idle) { - purple_prpl_got_user_idle(js->gc->account, - buddy_name, jbr->idle, jbr->idle); + if (jbr->idle) { + if (sec) { + jbr->idle = time(NULL) - sec; + } else { + jbr->idle = 0; + } + + if (jbr == + jabber_buddy_find_resource(jb, NULL)) { + purple_prpl_got_user_idle(js->gc->account, + buddy_name, jbr->idle, jbr->idle); + } } } g_free(resource);