Mercurial > pidgin.yaz
diff src/savedstatuses.c @ 14128:a8a033a89ee0
[gaim-migrate @ 16766]
I'm hoping this will fix a lot of the remaining idle-away problems,
like not correctly returning from idle-away. This change also
causes the gtkstatusbox to show your idle-away status when you are
idle-away.
Please test everything and let me know if there are any problems.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 15 Aug 2006 08:22:29 +0000 |
parents | ec858948d292 |
children |
line wrap: on
line diff
--- a/src/savedstatuses.c Tue Aug 15 07:23:13 2006 +0000 +++ b/src/savedstatuses.c Tue Aug 15 08:22:29 2006 +0000 @@ -25,6 +25,7 @@ #include "internal.h" #include "debug.h" +#include "idle.h" #include "notify.h" #include "savedstatuses.h" #include "dbus-maybe.h" @@ -676,9 +677,9 @@ * If we just deleted our current status or our idleaway status, * then set the appropriate pref back to 0. */ - current = gaim_prefs_get_int("/core/savedstatus/current"); + current = gaim_prefs_get_int("/core/savedstatus/default"); if (current == creation_time) - gaim_prefs_set_int("/core/savedstatus/current", 0); + gaim_prefs_set_int("/core/savedstatus/default", 0); idleaway = gaim_prefs_get_int("/core/savedstatus/idleaway"); if (idleaway == creation_time) @@ -725,12 +726,21 @@ } GaimSavedStatus * -gaim_savedstatus_get_current() +gaim_savedstatus_get_current(void) +{ + if (gaim_savedstatus_is_idleaway()) + return gaim_savedstatus_get_idleaway(); + else + return gaim_savedstatus_get_default(); +} + +GaimSavedStatus * +gaim_savedstatus_get_default() { int creation_time; GaimSavedStatus *saved_status = NULL; - creation_time = gaim_prefs_get_int("/core/savedstatus/current"); + creation_time = gaim_prefs_get_int("/core/savedstatus/default"); if (creation_time != 0) saved_status = g_hash_table_lookup(creation_times, &creation_time); @@ -744,7 +754,7 @@ * using? In any case, add a default status. */ saved_status = gaim_savedstatus_new(NULL, GAIM_STATUS_AVAILABLE); - gaim_prefs_set_int("/core/savedstatus/current", + gaim_prefs_set_int("/core/savedstatus/default", gaim_savedstatus_get_creation_time(saved_status)); } @@ -780,6 +790,51 @@ return saved_status; } +gboolean +gaim_savedstatus_is_idleaway() +{ + return gaim_prefs_get_bool("/core/savedstatus/isidleaway"); +} + +void +gaim_savedstatus_set_idleaway(gboolean idleaway) +{ + GList *accounts, *node; + GaimSavedStatus *old, *saved_status; + + if (gaim_savedstatus_is_idleaway() == idleaway) + /* Don't need to do anything */ + return; + + /* Changing our status makes us un-idle */ + if (!idleaway) + gaim_idle_touch(); + + old = gaim_savedstatus_get_current(); + gaim_prefs_set_bool("/core/savedstatus/isidleaway", idleaway); + saved_status = gaim_savedstatus_get_current(); + + accounts = gaim_accounts_get_all_active(); + for (node = accounts; node != NULL; node = node->next) + { + GaimAccount *account; + GaimPresence *presence; + GaimStatus *status; + + account = node->data; + presence = gaim_account_get_presence(account); + status = gaim_presence_get_active_status(presence); + + if (!idleaway || gaim_status_is_available(status)) + gaim_savedstatus_activate_for_account(saved_status, account); + } + + g_list_free(accounts); + + gaim_signal_emit(gaim_savedstatuses_get_handle(), "savedstatus-changed", + saved_status, old); +} + GaimSavedStatus * gaim_savedstatus_get_startup() { @@ -1001,12 +1056,12 @@ g_list_free(accounts); - gaim_prefs_set_int("/core/savedstatus/current", + gaim_prefs_set_int("/core/savedstatus/default", gaim_savedstatus_get_creation_time(saved_status)); + gaim_savedstatus_set_idleaway(FALSE); gaim_signal_emit(gaim_savedstatuses_get_handle(), "savedstatus-changed", saved_status, old); - } void @@ -1070,10 +1125,11 @@ * saved status and return that to the user. */ gaim_prefs_add_none("/core/savedstatus"); - gaim_prefs_add_int("/core/savedstatus/current", 0); + gaim_prefs_add_int("/core/savedstatus/default", 0); gaim_prefs_add_int("/core/savedstatus/startup", 0); gaim_prefs_add_bool("/core/savedstatus/startup_current_status", TRUE); gaim_prefs_add_int("/core/savedstatus/idleaway", 0); + gaim_prefs_add_bool("/core/savedstatus/isidleaway", FALSE); load_statuses();