Mercurial > pidgin
view plugins/error.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 | cd938f18f3f8 |
children |
line wrap: on
line source
#define GAIM_PLUGINS #include "gaim.h" #include <stdlib.h> #include <time.h> char *gaim_plugin_error(int); char *gaim_plugin_init(GModule *handle) { int error; /* so here, we load any callbacks, do the normal stuff */ srand(time(NULL)); error = rand() % 3; error -= 2; /* there's a 1 in 3 chance there *won't* be an error :) */ return gaim_plugin_error(error); } void gaim_plugin_remove() { /* this only gets called if we get loaded successfully, and then * unloaded. */ } char *gaim_plugin_error(int error) { /* by the time we've gotten here, all our callbacks are removed. * we just have to deal with what the error was (as defined by us) * and do any other clean-up stuff we need to do. */ switch (error) { case -1: return "MY BAD"; case -2: return "Internal plugin error: exiting."; default: return NULL; } } struct gaim_plugin_description desc; struct gaim_plugin_description *gaim_plugin_desc() { desc.api_version = PLUGIN_API_VERSION; desc.name = g_strdup("Error Tester"); desc.version = g_strdup(VERSION); desc.description = g_strdup("A plugin that causes error messages."); desc.authors = g_strdup("Eric Warmehoven <eric@warmenhoven.org>"); desc.url = g_strdup(WEBSITE); return &desc; } char *name() { return "Error Tester " VERSION ; } char *description() { return "A nice little program that causes error messages"; }