Mercurial > pidgin.yaz
diff src/pounce.c @ 11935:cb73483c9f63
[gaim-migrate @ 14226]
Here are buddy-status-changed and buddy-idle-changed signals, to replace
buddy-away, buddy-back, buddy-idle, and buddy-unidle. It it now possible to
detect when a buddy goes from one away-state to another away-state without
coming back in between.
I'm not really sure I like how buddy-idle-changed works here, but it felt
better to keep it consistent. It currently only fires on idle and unidle and
not on just-more-idle, though that's easy to change if we decide plugins might
want to know as idle time increases.
I think I got all the doxygen and ChangeLog.API stuff, someone yell if I
missed something.
committer: Tailor Script <tailor@pidgin.im>
author | Etan Reisner <pidgin@unreliablesource.net> |
---|---|
date | Mon, 31 Oct 2005 22:02:30 +0000 |
parents | c9bd6decdec4 |
children | 06065a4847ff |
line wrap: on
line diff
--- a/src/pounce.c Mon Oct 31 20:35:59 2005 +0000 +++ b/src/pounce.c Mon Oct 31 22:02:30 2005 +0000 @@ -949,6 +949,34 @@ } static void +buddy_status_changed_cb(GaimBuddy *buddy, GaimStatus *old_status, + GaimStatus *status) +{ + gboolean old_available, available; + + available = gaim_status_is_available(status); + old_available = gaim_status_is_available(old_status); + + if (available && !old_available) + gaim_pounce_execute(buddy->account, buddy->name, + GAIM_POUNCE_AWAY_RETURN); + else if (!available && old_available) + gaim_pounce_execute(buddy->account, buddy->name, + GAIM_POUNCE_AWAY); +} + +static void +buddy_idle_changed_cb(GaimBuddy *buddy, gboolean old_idle, gboolean idle) +{ + if (idle && !old_idle) + gaim_pounce_execute(buddy->account, buddy->name, + GAIM_POUNCE_IDLE); + else if (!idle && old_idle) + gaim_pounce_execute(buddy->account, buddy->name, + GAIM_POUNCE_IDLE_RETURN); +} + +static void buddy_typing_cb(GaimAccount *account, const char *name, void *data) { GaimConversation *conv; @@ -983,18 +1011,10 @@ pounce_handlers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, free_pounce_handler); - gaim_signal_connect(blist_handle, "buddy-idle", - handle, GAIM_CALLBACK(buddy_state_cb), - GINT_TO_POINTER(GAIM_POUNCE_IDLE)); - gaim_signal_connect(blist_handle, "buddy-unidle", - handle, GAIM_CALLBACK(buddy_state_cb), - GINT_TO_POINTER(GAIM_POUNCE_IDLE_RETURN)); - gaim_signal_connect(blist_handle, "buddy-away", - handle, GAIM_CALLBACK(buddy_state_cb), - GINT_TO_POINTER(GAIM_POUNCE_AWAY)); - gaim_signal_connect(blist_handle, "buddy-back", - handle, GAIM_CALLBACK(buddy_state_cb), - GINT_TO_POINTER(GAIM_POUNCE_AWAY_RETURN)); + gaim_signal_connect(blist_handle, "buddy-idle-changed", + handle, GAIM_CALLBACK(buddy_idle_changed_cb), NULL); + gaim_signal_connect(blist_handle, "buddy-status-changed", + handle, GAIM_CALLBACK(buddy_status_changed_cb), NULL); gaim_signal_connect(blist_handle, "buddy-signed-on", handle, GAIM_CALLBACK(buddy_state_cb), GINT_TO_POINTER(GAIM_POUNCE_SIGNON));