libpurple/idle.c

Fri, 14 Nov 2008 06:45:16 +0000

author
Richard Laager <rlaager@pidgin.im>
date
Fri, 14 Nov 2008 06:45:16 +0000
branch
next.minor
changeset 24981
ceddb7033bc8
parent 23196
ee37c234be19
child 25859
b42be7bb9dac
permissions
-rw-r--r--

propagate from branch 'im.pidgin.pidgin' (head cc1cc6c659d3878f285641153244b04df2f15eb7)
to branch 'im.pidgin.pidgin.next.minor' (head c195415b5fdfa94009870ddc8e23cf4a653ae351)

12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
2 * purple
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
6 * source distribution.
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
7 *
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
11 * (at your option) any later version.
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
12 *
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
16 * GNU General Public License for more details.
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
17 *
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19569
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
21 *
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
22 */
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
23 #include "internal.h"
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
24
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
25 #include "connection.h"
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
26 #include "debug.h"
22351
6ca0640b3d31 Change some g_idle_add(...) calls in libpurple to purple_timeout_add(0, ...)
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
27 #include "eventloop.h"
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
28 #include "idle.h"
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
29 #include "log.h"
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
30 #include "prefs.h"
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
31 #include "savedstatuses.h"
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
32 #include "signals.h"
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
33
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
34 typedef enum
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
35 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
36 PURPLE_IDLE_NOT_AWAY = 0,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
37 PURPLE_IDLE_AUTO_AWAY,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
38 PURPLE_IDLE_AWAY_BUT_NOT_AUTO_AWAY
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
39
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
40 } PurpleAutoAwayState;
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
41
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
42 static PurpleIdleUiOps *idle_ui_ops = NULL;
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
43
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
44 /**
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
45 * This is needed for the I'dle Mak'er plugin to work correctly. We
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
46 * use it to determine if we're the ones who set our accounts idle
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
47 * or if someone else did it (the I'dle Mak'er plugin, for example).
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
48 * Basically we just keep track of which accounts were set idle by us,
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
49 * and then we'll only set these specific accounts unidle when the
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
50 * user returns.
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
51 */
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
52 static GList *idled_accts = NULL;
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
53
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
54 static guint idle_timer = 0;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
55
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
56 static time_t last_active_time = 0;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
57
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
58 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
59 set_account_idle(PurpleAccount *account, int time_idle)
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
60 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
61 PurplePresence *presence;
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
62
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
63 presence = purple_account_get_presence(account);
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
64
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
65 if (purple_presence_is_idle(presence))
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
66 /* This account is already idle! */
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
67 return;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
68
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
69 purple_debug_info("idle", "Setting %s idle %d seconds\n",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
70 purple_account_get_username(account), time_idle);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
71 purple_presence_set_idle(presence, TRUE, time(NULL) - time_idle);
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
72 idled_accts = g_list_prepend(idled_accts, account);
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
73 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
74
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
75 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
76 set_account_unidle(PurpleAccount *account)
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
77 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
78 PurplePresence *presence;
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
79
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
80 presence = purple_account_get_presence(account);
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
81
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
82 idled_accts = g_list_remove(idled_accts, account);
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
83
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
84 if (!purple_presence_is_idle(presence))
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
85 /* This account is already unidle! */
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
86 return;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
87
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
88 purple_debug_info("idle", "Setting %s unidle\n",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
89 purple_account_get_username(account));
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
90 purple_presence_set_idle(presence, FALSE, 0);
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
91 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
92
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
93
17579
4c3e8468d487 Clean up the idle checking callback slightly.
Daniel Atallah <datallah@pidgin.im>
parents: 17536
diff changeset
94 static gboolean no_away = FALSE;
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
95 static gint time_until_next_idle_event;
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
96 /*
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
97 * This function should be called when you think your idle state
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
98 * may have changed. Maybe you're over the 10-minute mark and
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
99 * Purple should start reporting idle time to the server. Maybe
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
100 * you've returned from being idle. Maybe your auto-away message
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
101 * should be set.
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
102 *
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
103 * There is no harm to calling this many many times, other than
17349
c5abad45e8a7 Update a comment: We don't check idle status every 5 seconds any more.
Richard Laager <rlaager@pidgin.im>
parents: 17248
diff changeset
104 * it will be kinda slow. This is called by a timer set when
c5abad45e8a7 Update a comment: We don't check idle status every 5 seconds any more.
Richard Laager <rlaager@pidgin.im>
parents: 17248
diff changeset
105 * Purple starts. It is also called when you send an IM, a chat, etc.
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
106 *
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
107 * This function has 3 sections.
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
108 * 1. Get your idle time. It will query XScreenSaver or Windows
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
109 * or use the Purple idle time. Whatever.
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
110 * 2. Set or unset your auto-away message.
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
111 * 3. Report your current idle time to the IM server.
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
112 */
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
113
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
114 static void
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
115 check_idleness(void)
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
116 {
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
117 time_t time_idle;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
118 gboolean auto_away;
12573
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
119 const gchar *idle_reporting;
17579
4c3e8468d487 Clean up the idle checking callback slightly.
Daniel Atallah <datallah@pidgin.im>
parents: 17536
diff changeset
120 gboolean report_idle = TRUE;
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
121 gint away_seconds = 0;
17536
b04036df5ac6 Compiler be quiet! Fixes this compile warning:
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17349
diff changeset
122 gint idle_recheck_interval = 0;
18949
7ba397b0f34e Fix idle reporting as discussed on devel@. Poll as needed when we're not idle, and poll frequently (once every three seconds) when we are. Fixes #1357
Sean Egan <seanegan@pidgin.im>
parents: 18191
diff changeset
123 gint idle_poll_seconds = purple_prefs_get_int("/purple/away/mins_before_away") * 60;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
124 purple_signal_emit(purple_blist_get_handle(), "update-idle");
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
125
16478
19107605c565 Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@pidgin.im>
parents: 15884
diff changeset
126 idle_reporting = purple_prefs_get_string("/purple/away/idle_reporting");
17579
4c3e8468d487 Clean up the idle checking callback slightly.
Daniel Atallah <datallah@pidgin.im>
parents: 17536
diff changeset
127 auto_away = purple_prefs_get_bool("/purple/away/away_when_idle");
4c3e8468d487 Clean up the idle checking callback slightly.
Daniel Atallah <datallah@pidgin.im>
parents: 17536
diff changeset
128
12573
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
129 if (!strcmp(idle_reporting, "system") &&
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
130 (idle_ui_ops != NULL) && (idle_ui_ops->get_time_idle != NULL))
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
131 {
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
132 /* Use system idle time (mouse or keyboard movement, etc.) */
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
133 time_idle = idle_ui_ops->get_time_idle();
18949
7ba397b0f34e Fix idle reporting as discussed on devel@. Poll as needed when we're not idle, and poll frequently (once every three seconds) when we are. Fixes #1357
Sean Egan <seanegan@pidgin.im>
parents: 18191
diff changeset
134 idle_recheck_interval = 1;
12573
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
135 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
136 else if (!strcmp(idle_reporting, "purple"))
12573
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
137 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
138 /* Use 'Purple idle' */
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
139 time_idle = time(NULL) - last_active_time;
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
140 idle_recheck_interval = 0;
12573
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
141 }
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
142 else
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
143 {
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
144 /* Don't report idle time */
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
145 time_idle = 0;
1fc347b54974 [gaim-migrate @ 14895]
Mark Doliner <markdoliner@pidgin.im>
parents: 12412
diff changeset
146 report_idle = FALSE;
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
147
17579
4c3e8468d487 Clean up the idle checking callback slightly.
Daniel Atallah <datallah@pidgin.im>
parents: 17536
diff changeset
148 /* If we're not reporting idle, we can still do auto-away.
4c3e8468d487 Clean up the idle checking callback slightly.
Daniel Atallah <datallah@pidgin.im>
parents: 17536
diff changeset
149 * First try "system" and if that isn't possible, use "purple" */
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
150 if (auto_away)
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
151 {
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
152 if ((idle_ui_ops != NULL) && (idle_ui_ops->get_time_idle != NULL))
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
153 {
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
154 time_idle = idle_ui_ops->get_time_idle();
18949
7ba397b0f34e Fix idle reporting as discussed on devel@. Poll as needed when we're not idle, and poll frequently (once every three seconds) when we are. Fixes #1357
Sean Egan <seanegan@pidgin.im>
parents: 18191
diff changeset
155 idle_recheck_interval = 1;
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
156 }
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
157 else
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
158 {
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
159 time_idle = time(NULL) - last_active_time;
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
160 idle_recheck_interval = 0;
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
161 }
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
162 }
14999
7b3992f19766 [gaim-migrate @ 17709]
Daniel Atallah <datallah@pidgin.im>
parents: 14254
diff changeset
163 else
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
164 {
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
165 if (!no_away)
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
166 {
19569
dcc2a321208e Prevent recursive idle handling loop. Patch from 'Gambit'
Sean Egan <seanegan@pidgin.im>
parents: 18949
diff changeset
167 no_away = TRUE;
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
168 purple_savedstatus_set_idleaway(FALSE);
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
169 }
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
170 time_until_next_idle_event = 0;
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
171 return;
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
172 }
14999
7b3992f19766 [gaim-migrate @ 17709]
Daniel Atallah <datallah@pidgin.im>
parents: 14254
diff changeset
173 }
7b3992f19766 [gaim-migrate @ 17709]
Daniel Atallah <datallah@pidgin.im>
parents: 14254
diff changeset
174
18949
7ba397b0f34e Fix idle reporting as discussed on devel@. Poll as needed when we're not idle, and poll frequently (once every three seconds) when we are. Fixes #1357
Sean Egan <seanegan@pidgin.im>
parents: 18191
diff changeset
175 time_until_next_idle_event = idle_poll_seconds - time_idle;
17161
c4e7791b276f Move the time_until_next_idle_event < 0 check to clarify.
Richard Laager <rlaager@pidgin.im>
parents: 17160
diff changeset
176 if (time_until_next_idle_event < 0)
c4e7791b276f Move the time_until_next_idle_event < 0 check to clarify.
Richard Laager <rlaager@pidgin.im>
parents: 17160
diff changeset
177 {
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
178 /* If we're already idle, check again as appropriate. */
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
179 time_until_next_idle_event = idle_recheck_interval;
17161
c4e7791b276f Move the time_until_next_idle_event < 0 check to clarify.
Richard Laager <rlaager@pidgin.im>
parents: 17160
diff changeset
180 }
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
181
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
182 if (auto_away || !no_away)
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
183 away_seconds = 60 * purple_prefs_get_int("/purple/away/mins_before_away");
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
184
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
185 if (auto_away && time_idle > away_seconds)
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
186 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
187 purple_savedstatus_set_idleaway(TRUE);
17579
4c3e8468d487 Clean up the idle checking callback slightly.
Daniel Atallah <datallah@pidgin.im>
parents: 17536
diff changeset
188 no_away = FALSE;
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
189 }
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
190 else if (!no_away && time_idle < away_seconds)
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
191 {
17579
4c3e8468d487 Clean up the idle checking callback slightly.
Daniel Atallah <datallah@pidgin.im>
parents: 17536
diff changeset
192 no_away = TRUE;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
193 purple_savedstatus_set_idleaway(FALSE);
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
194 if (time_until_next_idle_event == 0 || (away_seconds - time_idle) < time_until_next_idle_event)
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
195 time_until_next_idle_event = away_seconds - time_idle;
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
196 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
197
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
198 /* Idle reporting stuff */
18949
7ba397b0f34e Fix idle reporting as discussed on devel@. Poll as needed when we're not idle, and poll frequently (once every three seconds) when we are. Fixes #1357
Sean Egan <seanegan@pidgin.im>
parents: 18191
diff changeset
199 if (report_idle && (time_idle >= idle_poll_seconds))
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
200 {
18122
9bf9970c1b6a disapproval of revision '2d8ea56b90971e7851442d96b7d74ecb4f052126'
Richard Laager <rlaager@pidgin.im>
parents: 18121
diff changeset
201 GList *l;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
202 for (l = purple_connections_get_all(); l != NULL; l = l->next)
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
203 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
204 PurpleConnection *gc = l->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
205 set_account_idle(purple_connection_get_account(gc), time_idle);
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
206 }
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
207 }
18949
7ba397b0f34e Fix idle reporting as discussed on devel@. Poll as needed when we're not idle, and poll frequently (once every three seconds) when we are. Fixes #1357
Sean Egan <seanegan@pidgin.im>
parents: 18191
diff changeset
208 else if (!report_idle || (time_idle < idle_poll_seconds ))
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
209 {
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
210 while (idled_accts != NULL)
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
211 set_account_unidle(idled_accts->data);
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
212 }
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
213 }
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
214
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
215
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
216 /*
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
217 * Check idle and set the timer to fire at the next idle-worth event
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
218 */
22108
cb9819851163 Squash some compiler warnings, some from my -Wstrict-prototypes fixing.
Richard Laager <rlaager@pidgin.im>
parents: 22104
diff changeset
219 static gboolean
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
220 check_idleness_timer(void)
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
221 {
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
222 check_idleness();
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
223 if (time_until_next_idle_event == 0)
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
224 idle_timer = 0;
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
225 else
18069
a8c10d130374 Raise the timeouts one second so they'll work every time (for certain) with
Richard Laager <rlaager@pidgin.im>
parents: 18068
diff changeset
226 {
a8c10d130374 Raise the timeouts one second so they'll work every time (for certain) with
Richard Laager <rlaager@pidgin.im>
parents: 18068
diff changeset
227 /* +1 for the boundary,
a8c10d130374 Raise the timeouts one second so they'll work every time (for certain) with
Richard Laager <rlaager@pidgin.im>
parents: 18068
diff changeset
228 * +1 more for g_timeout_add_seconds rounding. */
22108
cb9819851163 Squash some compiler warnings, some from my -Wstrict-prototypes fixing.
Richard Laager <rlaager@pidgin.im>
parents: 22104
diff changeset
229 idle_timer = purple_timeout_add_seconds(time_until_next_idle_event + 2, (GSourceFunc)check_idleness_timer, NULL);
18069
a8c10d130374 Raise the timeouts one second so they'll work every time (for certain) with
Richard Laager <rlaager@pidgin.im>
parents: 18068
diff changeset
230 }
17130
aebbbe87a06c Part of a patch from:
Richard Laager <rlaager@pidgin.im>
parents: 16478
diff changeset
231 return FALSE;
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
232 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
233
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
234 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
235 im_msg_sent_cb(PurpleAccount *account, const char *receiver,
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
236 const char *message, void *data)
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
237 {
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
238 /* Check our idle time after an IM is sent */
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
239 check_idleness();
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
240 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
241
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
242 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
243 signing_on_cb(PurpleConnection *gc, void *data)
14189
74a8004419ec [gaim-migrate @ 16765]
Kevin Stange <kstange@pidgin.im>
parents: 13724
diff changeset
244 {
74a8004419ec [gaim-migrate @ 16765]
Kevin Stange <kstange@pidgin.im>
parents: 13724
diff changeset
245 /* When signing on a new account, check if the account should be idle */
74a8004419ec [gaim-migrate @ 16765]
Kevin Stange <kstange@pidgin.im>
parents: 13724
diff changeset
246 check_idleness();
74a8004419ec [gaim-migrate @ 16765]
Kevin Stange <kstange@pidgin.im>
parents: 13724
diff changeset
247 }
74a8004419ec [gaim-migrate @ 16765]
Kevin Stange <kstange@pidgin.im>
parents: 13724
diff changeset
248
74a8004419ec [gaim-migrate @ 16765]
Kevin Stange <kstange@pidgin.im>
parents: 13724
diff changeset
249 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
250 signing_off_cb(PurpleConnection *gc, void *data)
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
251 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
252 PurpleAccount *account;
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
253
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
254 account = purple_connection_get_account(gc);
23196
ee37c234be19 applied changes from 7f7111ed9e5924db9e740ad354fce8fb82445b1e
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22958
diff changeset
255 set_account_unidle(account);
12825
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
256 }
0989792c930b [gaim-migrate @ 15173]
Mark Doliner <markdoliner@pidgin.im>
parents: 12573
diff changeset
257
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
258 static void
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
259 idle_reporting_cb(const char *name, PurplePrefType type, gconstpointer val, gpointer data)
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
260 {
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
261 if (idle_timer)
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
262 purple_timeout_remove(idle_timer);
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
263 idle_timer = 0;
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
264 check_idleness_timer();
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
265 }
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
266
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
267 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
268 purple_idle_touch()
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
269 {
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
270 time(&last_active_time);
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
271 if (!no_away)
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
272 {
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
273 if (idle_timer)
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
274 purple_timeout_remove(idle_timer);
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
275 idle_timer = 0;
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
276 check_idleness_timer();
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
277 }
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
278 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
279
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
280 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
281 purple_idle_set(time_t time)
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
282 {
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
283 last_active_time = time;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
284 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
285
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
286 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
287 purple_idle_set_ui_ops(PurpleIdleUiOps *ops)
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
288 {
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
289 idle_ui_ops = ops;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
290 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
291
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
292 PurpleIdleUiOps *
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
293 purple_idle_get_ui_ops(void)
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
294 {
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
295 return idle_ui_ops;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
296 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
297
12412
8abe3226695e [gaim-migrate @ 14719]
Richard Laager <rlaager@pidgin.im>
parents: 12272
diff changeset
298 static void *
22104
56970903b8e9 Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@pidgin.im>
parents: 19859
diff changeset
299 purple_idle_get_handle(void)
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
300 {
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
301 static int handle;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
302
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
303 return &handle;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
304 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
305
17741
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
306 static gboolean _do_purple_idle_touch_cb(gpointer data)
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
307 {
18949
7ba397b0f34e Fix idle reporting as discussed on devel@. Poll as needed when we're not idle, and poll frequently (once every three seconds) when we are. Fixes #1357
Sean Egan <seanegan@pidgin.im>
parents: 18191
diff changeset
308 int idle_poll_minutes = purple_prefs_get_int("/purple/away/mins_before_away");
7ba397b0f34e Fix idle reporting as discussed on devel@. Poll as needed when we're not idle, and poll frequently (once every three seconds) when we are. Fixes #1357
Sean Egan <seanegan@pidgin.im>
parents: 18191
diff changeset
309
7ba397b0f34e Fix idle reporting as discussed on devel@. Poll as needed when we're not idle, and poll frequently (once every three seconds) when we are. Fixes #1357
Sean Egan <seanegan@pidgin.im>
parents: 18191
diff changeset
310 /* +1 more for g_timeout_add_seconds rounding. */
22108
cb9819851163 Squash some compiler warnings, some from my -Wstrict-prototypes fixing.
Richard Laager <rlaager@pidgin.im>
parents: 22104
diff changeset
311 idle_timer = purple_timeout_add_seconds((idle_poll_minutes * 60) + 2, (GSourceFunc)check_idleness_timer, NULL);
18949
7ba397b0f34e Fix idle reporting as discussed on devel@. Poll as needed when we're not idle, and poll frequently (once every three seconds) when we are. Fixes #1357
Sean Egan <seanegan@pidgin.im>
parents: 18191
diff changeset
312
17741
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
313 purple_idle_touch();
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
314
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
315 return FALSE;
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
316 }
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
317
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
318
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
319 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
320 purple_idle_init()
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
321 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
322 purple_signal_connect(purple_conversations_get_handle(), "sent-im-msg",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
323 purple_idle_get_handle(),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
324 PURPLE_CALLBACK(im_msg_sent_cb), NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
325 purple_signal_connect(purple_connections_get_handle(), "signing-on",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
326 purple_idle_get_handle(),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
327 PURPLE_CALLBACK(signing_on_cb), NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
328 purple_signal_connect(purple_connections_get_handle(), "signing-off",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
329 purple_idle_get_handle(),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
330 PURPLE_CALLBACK(signing_off_cb), NULL);
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
331
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
332 purple_prefs_connect_callback(purple_idle_get_handle(), "/purple/away/idle_reporting",
17163
8c150fc133c3 Add a missing semi-colon so this will compile.
Richard Laager <rlaager@pidgin.im>
parents: 17162
diff changeset
333 idle_reporting_cb, NULL);
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
334
17741
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
335 /* Initialize the idleness asynchronously so it doesn't check idleness,
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
336 * and potentially try to change the status before the UI is initialized */
22351
6ca0640b3d31 Change some g_idle_add(...) calls in libpurple to purple_timeout_add(0, ...)
Mark Doliner <markdoliner@pidgin.im>
parents: 22108
diff changeset
337 purple_timeout_add(0, _do_purple_idle_touch_cb, NULL);
17741
5075c0d3a19a I think this will fix the problem that elb had where bonjour (and probably other accounts too) were signing on initially when -n was specified.
Daniel Atallah <datallah@pidgin.im>
parents: 17579
diff changeset
338
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
339 }
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
340
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
341 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
342 purple_idle_uninit()
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
343 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
344 purple_signals_disconnect_by_handle(purple_idle_get_handle());
17162
38f0cf5afda1 When using Purple idle, don't run a timer at all when idleaway. When using
Richard Laager <rlaager@pidgin.im>
parents: 17161
diff changeset
345 purple_prefs_disconnect_by_handle(purple_idle_get_handle());
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
346
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
347 /* Remove the idle timer */
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
348 if (idle_timer > 0)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
349 purple_timeout_remove(idle_timer);
12272
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
350 idle_timer = 0;
4eee92ead973 [gaim-migrate @ 14574]
Mark Doliner <markdoliner@pidgin.im>
parents:
diff changeset
351 }

mercurial