Mercurial > pidgin.yaz
diff plugins/statenotify.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 | 077f956e41a1 |
children | e856f985a0b9 |
line wrap: on
line diff
--- a/plugins/statenotify.c Mon Oct 31 20:35:59 2005 +0000 +++ b/plugins/statenotify.c Mon Oct 31 22:02:30 2005 +0000 @@ -36,31 +36,33 @@ } static void -buddy_away_cb(GaimBuddy *buddy, void *data) +buddy_status_changed_cb(GaimBuddy *buddy, GaimStatus *old_status, + GaimStatus *status, void *data) { - if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_away")) - write_status(buddy, _("%s has gone away.")); + gboolean available, old_available; + + available = gaim_status_is_available(status); + old_available = gaim_status_is_available(old_status); + + if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_away")) { + if (available && !old_available) + write_status(buddy, _("%s is no longer away.")); + else if (!available && old_available) + write_status(buddy, _("%s has gone away.")); + } } static void -buddy_unaway_cb(GaimBuddy *buddy, void *data) -{ - if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_away")) - write_status(buddy, _("%s is no longer away.")); -} - -static void -buddy_idle_cb(GaimBuddy *buddy, void *data) +buddy_idle_changed_cb(GaimBuddy *buddy, gboolean old_idle, gboolean idle, + void *data) { - if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_idle")) - write_status(buddy, _("%s has become idle.")); -} - -static void -buddy_unidle_cb(GaimBuddy *buddy, void *data) -{ - if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_idle")) - write_status(buddy, _("%s is no longer idle.")); + if (gaim_prefs_get_bool("/plugins/core/statenotify/notify_idle")) { + if (idle) { + write_status(buddy, _("%s has become idle.")); + } else { + write_status(buddy, _("%s is no longer idle.")); + } + } } static void @@ -105,18 +107,14 @@ { void *blist_handle = gaim_blist_get_handle(); - gaim_signal_connect(blist_handle, "buddy-away", - plugin, GAIM_CALLBACK(buddy_away_cb), NULL); - gaim_signal_connect(blist_handle, "buddy-back", - plugin, GAIM_CALLBACK(buddy_unaway_cb), NULL); - gaim_signal_connect(blist_handle, "buddy-idle", - plugin, GAIM_CALLBACK(buddy_idle_cb), NULL); - gaim_signal_connect(blist_handle, "buddy-unidle", - plugin, GAIM_CALLBACK(buddy_unidle_cb), NULL); - gaim_signal_connect(blist_handle, "buddy-signed-on", - plugin, GAIM_CALLBACK(buddy_signon_cb), NULL); - gaim_signal_connect(blist_handle, "buddy-signed-off", - plugin, GAIM_CALLBACK(buddy_signoff_cb), NULL); + gaim_signal_connect(blist_handle, "buddy-status-changed", plugin, + GAIM_CALLBACK(buddy_status_changed_cb), NULL); + gaim_signal_connect(blist_handle, "buddy-idle-changed", plugin, + GAIM_CALLBACK(buddy_idle_changed_cb), NULL); + gaim_signal_connect(blist_handle, "buddy-signed-on", plugin, + GAIM_CALLBACK(buddy_signon_cb), NULL); + gaim_signal_connect(blist_handle, "buddy-signed-off", plugin, + GAIM_CALLBACK(buddy_signoff_cb), NULL); return TRUE; }