Mercurial > pidgin
diff doc/HOWTO @ 14191:009db0b357b5
This is a hand-crafted commit to migrate across subversion revisions
16854:16861, due to some vagaries of the way the original renames were
done. Witness that monotone can do in one revision what svn had to
spread across several.
author | Ethan Blanton <elb@pidgin.im> |
---|---|
date | Sat, 16 Dec 2006 04:59:55 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/HOWTO Sat Dec 16 04:59:55 2006 +0000 @@ -0,0 +1,83 @@ +Everything in this file should be considered old and potentially out of +date. For more reliable information, install doxygen and graphiz dot, +then run +make docs +in the gaim source tree. This will produce html docs in gaim/docs/html +that will provide an api reference and in the related pages section, +information on perl and c plugins. + + +Ok, this howto is going to be really short and sweet and to the point. + +First off, before you do anything else, in all of the files for your plugin, +put the lines + +#define GAIM_PLUGINS +#include "gaim.h" + +I mean this. Without this, all kinds of things will not work correctly. If you +really want to know exactly what this does, read ../src/gaim.h and learn. But +if you don't want to do that, just know that it's important. + +Now that you've put that there, make sure gaim.h is in your include path. + +Ok, now you're ready to write the plugin. + +The only function that is required is gaim_plugin_init(GModule *). This gets +called as soon as it gets loaded (sort of - man dlopen for more details). If +your function never returns, it will crash gaim! If your plugin uses up all +the memory in the system, it will crash gaim! Once your plugin gets loaded, +it effectively becomes a part of gaim, and anything that goes wrong will look +like it is a problem with gaim itself. I write bugfree code! :) Therefore, it +is your problem, not mine. (I'm usually nice and willing to help you with your +problems though.) + +The GModule* that gets passed to gaim_plugin_init is the handle for the plugin. +DO NOT CHANGE THIS POINTER! Bad things will happen. You've been warned. It's +needed for connecting to signals and things. It's a good idea to remember it +somehow. + +gaim_plugin_init should return a char*. If the char* returned is not NULL, it +is interpreted as an error, and used as an error message. See the ChangeLog +file in this directory for more details. + +You can basically do anything you want in the plugin. You can make function +calls, change public widgets, display new widgets, things like that. But the +really neat thing is you can do things at events. For example, when one of +your buddies signs on, you can instantly send them a message. You can modify +the incoming and outgoing text. You can do all kinds of crazy things. Whatever +you want. Check out SIGNALS for more information. + +Plugins can share globals with gaim, but will not share with other plugins. +This is so if you have a global variable GtkWidget *window in your plugin and +J. Random Hacker also has the same name on a global variable, you won't be +constantly overwriting each others' variables. Unfortunately, this also means +that plugins will have difficulty working together. But then again, that's +what shared memory is for. + +Plugins can be configured. This makes it so they don't have to be recompiled +in order to change things internal to them, and it's also just a cool feature +to have :). It's optional; to allow your plugin to be configured, add a +function called gaim_plugin_config(). The advised course of action is to have +it pop up a dialog window; but it's your plugin. + +When your plugin gets unloaded, gaim will try to call gaim_plugin_remove(). It +doesn't have to be there, but it's nice if, say, you create a window, and when +the plugin gets unloaded, it removes the window. Also, all the callbacks you +have attached to gaim signals will be removed. + +Plugins can also unload themselves. To do this, call gaim_plugin_unload(GModule *) +(the GModule* is the handle passed to gaim_plugin_init). When your plugin gets +unloaded, gaim will remove all of your callbacks. It will not call your +gaim_plugin_remove function, however, since it will assume you have already +done the necessary cleanup. + +Compilation of the plugins is fairly straight-forward; there is a Makefile in +this directory that has a rule for making the .so file from a .c file. No +modification of the Makefile should be necessary, unless if you simply want +to type 'make' to have it made; otherwise, 'make filename.so' will take +filename.c and make the .so plugin from it. If you need to link in with extra +libraries, you can set the environment variable PLUGIN_LIBS to be the libraries +you want to link with. + +There are a few examples in this directory. Enjoy.