Fri, 06 Jan 2006 04:46:00 +0000
[gaim-migrate @ 15091]
" Adds an emblem to a buddy if they have a queued message
(hidden conversation). In the large buddy list it is
added in the northwest corner, sliding the existing
northwest emblem (if specified) to the northeast
position and discarding the northeast emblem. In the
small buddy list, the emblem is added to the southeast.
Attached is a patch and an emblem image to be dropped
in pixmaps/status/default/. The emblem image is a
scaled down version of the send-im.png image." -- Casey Harkins
as I asked for this patch, and since there don't seem to be objections to
it (yet), I'm going ahead and applying it.
committer: Luke Schierer <lschiere@pidgin.im>
| 5717 | 1 | /* |
|
10297
b36800725b7a
[gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents:
10211
diff
changeset
|
2 | * @file gtkconn.c GTK+ Connection API |
|
b36800725b7a
[gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents:
10211
diff
changeset
|
3 | * @ingroup gtkui |
|
b36800725b7a
[gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents:
10211
diff
changeset
|
4 | * |
| 5717 | 5 | * gaim |
| 6 | * | |
| 8046 | 7 | * Gaim is the legal property of its developers, whose names are too numerous |
| 8 | * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 9 | * source distribution. | |
| 5717 | 10 | * |
| 11 | * This program is free software; you can redistribute it and/or modify | |
| 12 | * it under the terms of the GNU General Public License as published by | |
| 13 | * the Free Software Foundation; either version 2 of the License, or | |
| 14 | * (at your option) any later version. | |
| 15 | * | |
| 16 | * This program is distributed in the hope that it will be useful, | |
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 19 | * GNU General Public License for more details. | |
| 20 | * | |
| 21 | * You should have received a copy of the GNU General Public License | |
| 22 | * along with this program; if not, write to the Free Software | |
| 23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 24 | */ | |
| 9791 | 25 | #include "internal.h" |
| 26 | #include "gtkgaim.h" | |
| 5717 | 27 | |
| 28 | #include "account.h" | |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5746
diff
changeset
|
29 | #include "debug.h" |
|
6460
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
30 | #include "notify.h" |
| 6216 | 31 | #include "prefs.h" |
| 10643 | 32 | #include "gtkblist.h" |
|
12404
657afdf0f596
[gaim-migrate @ 14711]
Richard Laager <rlaager@pidgin.im>
parents:
12296
diff
changeset
|
33 | #include "gtkconn.h" |
|
657afdf0f596
[gaim-migrate @ 14711]
Richard Laager <rlaager@pidgin.im>
parents:
12296
diff
changeset
|
34 | #include "gtkdialogs.h" |
| 10643 | 35 | #include "gtkstatusbox.h" |
|
10297
b36800725b7a
[gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents:
10211
diff
changeset
|
36 | #include "gtkstock.h" |
|
12404
657afdf0f596
[gaim-migrate @ 14711]
Richard Laager <rlaager@pidgin.im>
parents:
12296
diff
changeset
|
37 | #include "gtkutils.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5746
diff
changeset
|
38 | #include "util.h" |
| 5717 | 39 | |
| 11523 | 40 | #define INITIAL_RECON_DELAY 8000 |
|
11721
c74083492667
[gaim-migrate @ 14012]
Mark Doliner <markdoliner@pidgin.im>
parents:
11638
diff
changeset
|
41 | #define MAX_RECON_DELAY 600000 |
| 11523 | 42 | |
| 43 | typedef struct { | |
| 44 | int delay; | |
| 45 | guint timeout; | |
| 46 | } GaimAutoRecon; | |
| 47 | ||
| 48 | static GHashTable *hash = NULL; | |
| 49 | static GSList *accountReconnecting = NULL; | |
| 50 | ||
| 5717 | 51 | static void gaim_gtk_connection_connect_progress(GaimConnection *gc, |
| 52 | const char *text, size_t step, size_t step_count) | |
| 53 | { | |
| 10643 | 54 | GaimGtkBuddyList *gtkblist = gaim_gtk_blist_get_default_gtk_blist(); |
| 55 | if (!gtkblist) | |
| 56 | return; | |
| 57 | gtk_gaim_status_box_set_connecting(GTK_GAIM_STATUS_BOX(gtkblist->statusbox), | |
| 58 | (gaim_connections_get_connecting() != NULL)); | |
| 59 | gtk_gaim_status_box_pulse_connecting(GTK_GAIM_STATUS_BOX(gtkblist->statusbox)); | |
| 5717 | 60 | } |
| 61 | ||
| 62 | static void gaim_gtk_connection_connected(GaimConnection *gc) | |
| 63 | { | |
| 10643 | 64 | GaimGtkBuddyList *gtkblist = gaim_gtk_blist_get_default_gtk_blist(); |
| 11523 | 65 | GaimAccount *account = NULL; |
| 10643 | 66 | if (!gtkblist) |
| 67 | return; | |
| 68 | gtk_gaim_status_box_set_connecting(GTK_GAIM_STATUS_BOX(gtkblist->statusbox), | |
| 69 | (gaim_connections_get_connecting() != NULL)); | |
| 11523 | 70 | account = gaim_connection_get_account(gc); |
|
12607
4622f0adedf4
[gaim-migrate @ 14943]
Mark Doliner <markdoliner@pidgin.im>
parents:
12583
diff
changeset
|
71 | |
|
11536
f24fb5c6d2d5
[gaim-migrate @ 13790]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11523
diff
changeset
|
72 | if (hash != NULL) |
|
f24fb5c6d2d5
[gaim-migrate @ 13790]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11523
diff
changeset
|
73 | g_hash_table_remove(hash, account); |
| 11523 | 74 | if (accountReconnecting == NULL) |
| 75 | return; | |
| 76 | accountReconnecting = g_slist_remove(accountReconnecting, account); | |
| 77 | if (accountReconnecting == NULL) | |
| 78 | gtk_gaim_status_box_set_error(GTK_GAIM_STATUS_BOX(gtkblist->statusbox), NULL); | |
| 5717 | 79 | } |
| 80 | ||
|
6460
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
81 | static void gaim_gtk_connection_disconnected(GaimConnection *gc) |
| 5717 | 82 | { |
| 10643 | 83 | GaimGtkBuddyList *gtkblist = gaim_gtk_blist_get_default_gtk_blist(); |
| 84 | if (!gtkblist) | |
| 85 | return; | |
| 86 | gtk_gaim_status_box_set_connecting(GTK_GAIM_STATUS_BOX(gtkblist->statusbox), | |
| 87 | (gaim_connections_get_connecting() != NULL)); | |
|
5883
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
88 | |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
89 | if (gaim_connections_get_all() != NULL) |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
90 | return; |
|
290fe1d16e60
[gaim-migrate @ 6315]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
91 | |
|
9730
e59812364b8b
[gaim-migrate @ 10591]
Mark Doliner <markdoliner@pidgin.im>
parents:
9709
diff
changeset
|
92 | gaim_gtkdialogs_destroy_all(); |
| 5717 | 93 | } |
| 94 | ||
| 95 | static void gaim_gtk_connection_notice(GaimConnection *gc, | |
| 96 | const char *text) | |
| 97 | { | |
| 98 | } | |
| 99 | ||
|
7912
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
100 | |
| 11523 | 101 | static void |
| 102 | free_auto_recon(gpointer data) | |
| 7493 | 103 | { |
| 11523 | 104 | GaimAutoRecon *info = data; |
|
7912
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
105 | |
| 11523 | 106 | if (info->timeout != 0) |
| 107 | g_source_remove(info->timeout); | |
|
7912
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
108 | |
| 11523 | 109 | g_free(info); |
| 7493 | 110 | } |
| 111 | ||
| 11523 | 112 | static gboolean |
| 113 | do_signon(gpointer data) | |
|
7912
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
114 | { |
| 11523 | 115 | GaimAccount *account = data; |
| 116 | GaimAutoRecon *info; | |
|
10916
3de20dd2dade
[gaim-migrate @ 12675]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10915
diff
changeset
|
117 | |
| 11523 | 118 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", "do_signon called\n"); |
| 119 | g_return_val_if_fail(account != NULL, FALSE); | |
| 120 | info = g_hash_table_lookup(hash, account); | |
|
7912
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
121 | |
| 11523 | 122 | if (g_list_index(gaim_accounts_get_all(), account) < 0) |
| 123 | return FALSE; | |
| 124 | ||
| 125 | if (info) | |
| 126 | info->timeout = 0; | |
|
7912
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
127 | |
| 11523 | 128 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", "calling gaim_account_connect\n"); |
| 129 | gaim_account_connect(account); | |
| 130 | gaim_debug(GAIM_DEBUG_INFO, "autorecon", "done calling gaim_account_connect\n"); | |
|
7912
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
131 | |
| 11523 | 132 | return FALSE; |
|
7912
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
133 | } |
|
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
134 | |
| 11523 | 135 | static void gaim_gtk_connection_report_disconnect(GaimConnection *gc, const char *text) |
| 7399 | 136 | { |
|
12009
06852325c88f
[gaim-migrate @ 14302]
Mark Doliner <markdoliner@pidgin.im>
parents:
11721
diff
changeset
|
137 | GaimGtkBuddyList *gtkblist = gaim_gtk_blist_get_default_gtk_blist(); |
| 7431 | 138 | GaimAccount *account = NULL; |
| 11523 | 139 | GaimAutoRecon *info; |
| 140 | GSList* listAccount; | |
| 7808 | 141 | |
| 11523 | 142 | if (hash == NULL) { |
|
11721
c74083492667
[gaim-migrate @ 14012]
Mark Doliner <markdoliner@pidgin.im>
parents:
11638
diff
changeset
|
143 | hash = g_hash_table_new_full(g_int_hash, g_int_equal, NULL, |
|
c74083492667
[gaim-migrate @ 14012]
Mark Doliner <markdoliner@pidgin.im>
parents:
11638
diff
changeset
|
144 | free_auto_recon); |
| 11523 | 145 | } |
| 146 | account = gaim_connection_get_account(gc); | |
| 147 | info = g_hash_table_lookup(hash, account); | |
| 148 | if (accountReconnecting) | |
| 149 | listAccount = g_slist_find(accountReconnecting, account); | |
| 150 | else | |
| 151 | listAccount = NULL; | |
|
7912
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
152 | |
| 11523 | 153 | if (!gc->wants_to_die) { |
|
12009
06852325c88f
[gaim-migrate @ 14302]
Mark Doliner <markdoliner@pidgin.im>
parents:
11721
diff
changeset
|
154 | if (gtkblist != NULL) |
|
06852325c88f
[gaim-migrate @ 14302]
Mark Doliner <markdoliner@pidgin.im>
parents:
11721
diff
changeset
|
155 | gtk_gaim_status_box_set_error(GTK_GAIM_STATUS_BOX(gtkblist->statusbox), text); |
| 12583 | 156 | |
|
12009
06852325c88f
[gaim-migrate @ 14302]
Mark Doliner <markdoliner@pidgin.im>
parents:
11721
diff
changeset
|
157 | if (info == NULL) { |
| 11523 | 158 | info = g_new0(GaimAutoRecon, 1); |
| 159 | g_hash_table_insert(hash, account, info); | |
| 160 | info->delay = INITIAL_RECON_DELAY; | |
|
7483
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
161 | } else { |
| 11523 | 162 | info->delay = MIN(2 * info->delay, MAX_RECON_DELAY); |
| 163 | if (info->timeout != 0) | |
| 164 | g_source_remove(info->timeout); | |
|
7483
08237091e8a5
[gaim-migrate @ 8096]
Mark Doliner <markdoliner@pidgin.im>
parents:
7431
diff
changeset
|
165 | } |
| 11523 | 166 | info->timeout = g_timeout_add(info->delay, do_signon, account); |
|
7912
b8f84918e7c1
[gaim-migrate @ 8573]
Mark Doliner <markdoliner@pidgin.im>
parents:
7890
diff
changeset
|
167 | |
| 11523 | 168 | if (!listAccount) |
| 169 | accountReconnecting = g_slist_prepend(accountReconnecting, account); | |
| 11559 | 170 | } else { |
| 171 | char *p, *s, *n=NULL ; | |
|
11721
c74083492667
[gaim-migrate @ 14012]
Mark Doliner <markdoliner@pidgin.im>
parents:
11638
diff
changeset
|
172 | if (info != NULL) |
| 11559 | 173 | g_hash_table_remove(hash, account); |
|
11721
c74083492667
[gaim-migrate @ 14012]
Mark Doliner <markdoliner@pidgin.im>
parents:
11638
diff
changeset
|
174 | |
| 11559 | 175 | if (listAccount) |
| 176 | accountReconnecting = g_slist_delete_link(accountReconnecting, listAccount); | |
|
11721
c74083492667
[gaim-migrate @ 14012]
Mark Doliner <markdoliner@pidgin.im>
parents:
11638
diff
changeset
|
177 | |
| 11559 | 178 | if (gaim_account_get_alias(account)) { |
| 179 | n = g_strdup_printf("%s (%s) (%s)", | |
| 180 | gaim_account_get_username(account), | |
| 181 | gaim_account_get_alias(account), | |
| 182 | gaim_account_get_protocol_name(account)); | |
| 183 | } else { | |
| 184 | n = g_strdup_printf("%s (%s)", | |
| 185 | gaim_account_get_username(account), | |
| 186 | gaim_account_get_protocol_name(account)); | |
| 187 | } | |
|
11721
c74083492667
[gaim-migrate @ 14012]
Mark Doliner <markdoliner@pidgin.im>
parents:
11638
diff
changeset
|
188 | |
|
11638
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11574
diff
changeset
|
189 | p = g_strdup_printf(_("%s disconnected"), n); |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11574
diff
changeset
|
190 | s = g_strdup_printf(_("%s was disconnected due to an error. %s The account has been disabled. " |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11574
diff
changeset
|
191 | "Correct the error and reenable the account to connect."), n, text); |
| 11559 | 192 | gaim_notify_error(NULL, NULL, p, s); |
| 193 | g_free(p); | |
| 194 | g_free(s); | |
| 195 | g_free(n); | |
|
11638
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11574
diff
changeset
|
196 | /* XXX: do we really want to disable the account when it's disconnected by wants_to_die? |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11574
diff
changeset
|
197 | * This normally happens when you sign on from somewhere else. */ |
| 11559 | 198 | gaim_account_set_enabled(account, GAIM_GTK_UI, FALSE); |
| 7399 | 199 | } |
| 200 | } | |
| 201 | ||
| 5717 | 202 | static GaimConnectionUiOps conn_ui_ops = |
| 203 | { | |
| 204 | gaim_gtk_connection_connect_progress, | |
| 205 | gaim_gtk_connection_connected, | |
| 206 | gaim_gtk_connection_disconnected, | |
|
6460
fc288e7221ca
[gaim-migrate @ 6969]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
207 | gaim_gtk_connection_notice, |
| 11523 | 208 | gaim_gtk_connection_report_disconnect, |
| 5717 | 209 | }; |
| 210 | ||
|
7035
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6460
diff
changeset
|
211 | GaimConnectionUiOps * |
|
76bca80cd91d
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
6460
diff
changeset
|
212 | gaim_gtk_connections_get_ui_ops(void) |
| 5717 | 213 | { |
| 214 | return &conn_ui_ops; | |
| 215 | } |