Mercurial > pidgin
diff src/protocols/irc/irc.c @ 4249:9c7fcb211886
[gaim-migrate @ 4499]
If anyone is curious, the commit before this fixed a bug which
didn't allow you to delete AIM or ICQ people from a deny list.
They'll show up when you sign back online, and will be deleteable
now.
This is a patch from the good Mr. McQueen.
"Twofold attack:
1) Make sure all the callback functions don't throw a mental if the gc
the dialog was asking about has disappeared. Make sure the functions
still free up the data structs as necessary in this case.
2) When setting up a ask dialog, plugins (including prpls) pass in their
handle. The ask dialog struct gets kept in a slist. When unloading a
plugin or prpl, Gaim checks the handle against the list, and sends a
cancel-type message for any outstanding dialogs.
Should avoid crashes from non-modal ask dialogs lying around."
Yeah, so that's a nice lil' improvement.
I also fixed a think where SSI "authorization denied" messages
would be gibberish. That was a bug from just a few hours ago.
Whoops.
Also, since this is like a grown up version of show and tell, I
thought this was funny:
* Robot101 fixes idiocy
<KingAnt> Does that mean I'm going to be nuetered?
committer: Tailor Script <tailor@pidgin.im>
| author | Mark Doliner <mark@kingant.net> |
|---|---|
| date | Wed, 08 Jan 2003 08:18:49 +0000 |
| parents | cd84b0fd63fc |
| children | 0c68d402f59f |
line wrap: on
line diff
--- a/src/protocols/irc/irc.c Wed Jan 08 07:28:54 2003 +0000 +++ b/src/protocols/irc/irc.c Wed Jan 08 08:18:49 2003 +0000 @@ -58,6 +58,8 @@ #define USEROPT_PORT 1 #define USEROPT_CHARSET 2 +static struct prpl *my_protocol = NULL; + /* for win32 compatability */ G_MODULE_IMPORT GSList *connections; @@ -1181,12 +1183,16 @@ static void dcc_chat_init(struct dcc_chat *data) { - proxy_connect(data->ip_address, data->port, dcc_chat_callback, data); + if (g_slist_find(connections, data->gc)) { + proxy_connect(data->ip_address, data->port, dcc_chat_callback, data); + } else { + g_free(data); + } } static void dcc_chat_cancel(struct dcc_chat *data){ - if (find_dcc_chat(data->gc, data->nick)) { + if (g_slist_find(connections, data->gc) && find_dcc_chat(data->gc, data->nick)) { dcc_chat_list = g_slist_remove(dcc_chat_list, data); gaim_input_remove (data->inpa); close (data->fd); @@ -1255,7 +1261,7 @@ dccchat->port=atoi(chat_args[4]); g_snprintf(dccchat->nick, sizeof(dccchat->nick), nick); g_snprintf(ask, sizeof(ask), _("%s would like to establish a DCC chat"), nick); - do_ask_dialog(ask, _("This requires a direct connection to be established between the two computers. Messages sent will not pass through the IRC server"), dccchat, _("Connect"), dcc_chat_init, _("Cancel"), dcc_chat_cancel, FALSE); + do_ask_dialog(ask, _("This requires a direct connection to be established between the two computers. Messages sent will not pass through the IRC server"), dccchat, _("Connect"), dcc_chat_init, _("Cancel"), dcc_chat_cancel, my_protocol->plug ? my_protocol->plug->handle : NULL, FALSE); } @@ -2658,8 +2664,6 @@ return m; } -static struct prpl *my_protocol = NULL; - G_MODULE_EXPORT void irc_init(struct prpl *ret) {
