comparison src/idle.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 9a4b76c288aa
children
comparison
equal deleted inserted replaced
14127:9a4b76c288aa 14128:a8a033a89ee0
56 static guint idle_timer = 0; 56 static guint idle_timer = 0;
57 57
58 static time_t last_active_time = 0; 58 static time_t last_active_time = 0;
59 59
60 static void 60 static void
61 set_account_autoaway(GaimConnection *gc)
62 {
63 GaimAccount *account;
64 GaimPresence *presence;
65 GaimStatus *status;
66
67 if (gc->is_auto_away)
68 /* This account is already auto-away! */
69 return;
70
71 account = gaim_connection_get_account(gc);
72 presence = gaim_account_get_presence(account);
73 status = gaim_presence_get_active_status(presence);
74
75 if (gaim_status_is_available(status))
76 {
77 GaimSavedStatus *saved_status;
78
79 gaim_debug_info("idle", "Making %s auto-away\n",
80 gaim_account_get_username(account));
81
82 saved_status = gaim_savedstatus_get_idleaway();
83 gaim_savedstatus_activate_for_account(saved_status, account);
84
85 gc->is_auto_away = GAIM_IDLE_AUTO_AWAY;
86 } else {
87 gc->is_auto_away = GAIM_IDLE_AWAY_BUT_NOT_AUTO_AWAY;
88 }
89 }
90
91 static void
92 unset_account_autoaway(GaimConnection *gc)
93 {
94 GaimAccount *account;
95 GaimSavedStatus *saved_status;
96
97 account = gaim_connection_get_account(gc);
98
99 if (!gc->is_auto_away)
100 /* This account is already not auto-away! */
101 return;
102
103 if (gc->is_auto_away == GAIM_IDLE_AWAY_BUT_NOT_AUTO_AWAY) {
104 gc->is_auto_away = GAIM_IDLE_NOT_AWAY;
105 } else {
106 gc->is_auto_away = GAIM_IDLE_NOT_AWAY;
107
108 gaim_debug_info("idle", "%s returning from auto-away\n",
109 gaim_account_get_username(account));
110
111 /* Return our account to its previous status */
112 saved_status = gaim_savedstatus_get_current();
113 gaim_savedstatus_activate_for_account(saved_status, account);
114 }
115 }
116
117 static void
118 set_account_idle(GaimAccount *account, int time_idle) 61 set_account_idle(GaimAccount *account, int time_idle)
119 { 62 {
120 GaimPresence *presence; 63 GaimPresence *presence;
121 64
122 presence = gaim_account_get_presence(account); 65 presence = gaim_account_get_presence(account);
201 /* Auto-away stuff */ 144 /* Auto-away stuff */
202 auto_away = gaim_prefs_get_bool("/core/away/away_when_idle"); 145 auto_away = gaim_prefs_get_bool("/core/away/away_when_idle");
203 if (auto_away && 146 if (auto_away &&
204 (time_idle > (60 * gaim_prefs_get_int("/core/away/mins_before_away")))) 147 (time_idle > (60 * gaim_prefs_get_int("/core/away/mins_before_away"))))
205 { 148 {
206 for (l = gaim_connections_get_all(); l != NULL; l = l->next) 149 gaim_savedstatus_set_idleaway(TRUE);
207 set_account_autoaway(l->data);
208 } 150 }
209 else if (time_idle < 60 * gaim_prefs_get_int("/core/away/mins_before_away")) 151 else if (time_idle < 60 * gaim_prefs_get_int("/core/away/mins_before_away"))
210 { 152 {
211 for (l = gaim_connections_get_all(); l != NULL; l = l->next) 153 gaim_savedstatus_set_idleaway(FALSE);
212 unset_account_autoaway(l->data);
213 } 154 }
214 155
215 /* Idle reporting stuff */ 156 /* Idle reporting stuff */
216 if (report_idle && (time_idle >= IDLEMARK)) 157 if (report_idle && (time_idle >= IDLEMARK))
217 { 158 {
250 { 191 {
251 GaimAccount *account; 192 GaimAccount *account;
252 193
253 account = gaim_connection_get_account(gc); 194 account = gaim_connection_get_account(gc);
254 set_account_unidle(account); 195 set_account_unidle(account);
255 unset_account_autoaway(gc);
256 } 196 }
257 197
258 void 198 void
259 gaim_idle_touch() 199 gaim_idle_touch()
260 { 200 {