Mercurial > pidgin.yaz
comparison plugins/ChangeLog @ 425:ae7c762775cd
[gaim-migrate @ 435]
More mods to how plugins work.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Fri, 23 Jun 2000 04:15:51 +0000 |
parents | 3d94cc1dc424 |
children | e4c34ca88d9b |
comparison
equal
deleted
inserted
replaced
424:22700acd9b49 | 425:ae7c762775cd |
---|---|
1 version 0.9.20: | 1 version 0.9.20: |
2 It's 3 am the night before finals, it's obviously a good time to hack | 2 It's 3 am the night before finals, it's obviously a good time to hack |
3 gaim. | 3 gaim. |
4 | |
5 This became quite long, and if you don't want to read it all, here's | |
6 the important stuff summed up: | |
7 - 9 new events (see SIGNALS file for more details) | |
8 - int gaim_plugin_init(void *) (no longer returns void, see error.c) | |
9 - void gaim_plugin_unload(void *) (to allow plugin to remove itself) | |
10 - can only load 1 instance of the same plugin | |
4 | 11 |
5 The first thing to note is that there are about 9 new events plugins | 12 The first thing to note is that there are about 9 new events plugins |
6 can attach to, most of them dealing with chat, since I know that was a | 13 can attach to, most of them dealing with chat, since I know that was a |
7 big thing that was missing. Please note that I was nice and decided to | 14 big thing that was missing. Please note that I was nice and decided to |
8 tack these extra events onto the end of the enum, which means that | 15 tack these extra events onto the end of the enum, which means that |
9 plugins do not have to be recompiled in order for them to still work. | 16 plugins do not have to be recompiled in order for them to still work. |
10 | 17 |
11 The big thing to note is that gaim_plugin_init no longer returns void, | 18 The big change is that gaim_plugin_init no longer returns void, but |
12 but int. If it returns 0+, gaim interprets this as there being no | 19 int. If it returns 0+, gaim interprets this as there being no error, |
13 error, and continues with loading as normal. (This should be backwards- | 20 and continues with loading as normal. (This should be backwards- |
14 compatible: returning 0/1 is the equivalent of returning void.) If it | 21 compatible: returning 0/1 is the equivalent of returning void.) If it |
15 returns a number less than 0, there was an error loading detected by | 22 returns a number less than 0, there was an error loading detected by |
16 the plugin. At that point, gaim will try to clean things up by removing | 23 the plugin. At that point, gaim will try to clean things up by removing |
17 any callbacks that have been added by the plugin. It will then try to | 24 any callbacks that have been added by the plugin. It will then try to |
18 call the plugin's gaim_plugin_error function, if there is one. The | 25 call the plugin's gaim_plugin_error function, if there is one. The |
19 function should take an int (the int returned by gaim_plugin_init) and | 26 function should take an int (the int returned by gaim_plugin_init) and |
20 return a char*. If the char* is not NULL, it is displayed by gaim as an | 27 return a char*. If the char* is not NULL, it is displayed by gaim as an |
21 error message. The plugin is then unloaded and closed and life goes | 28 error message. The plugin is then unloaded and closed and life goes |
22 back to normal. If any of that was confusing, it was confusing to me, | 29 back to normal. If any of that was confusing, it was confusing to me, |
23 too. I added a plugin, error.c, which should help clear things up. | 30 too. I added a plugin, error.c, which should help clear things up. |
31 | |
32 Another big thing to note is that plugins can unload themselves. A good | |
33 example of why this is useful is a ticker plugin. If the user closes | |
34 the ticker window, they obviously want the plugin to be unloaded. Gaim | |
35 has no way of knowing that; therefore, the plugin must tell gaim that | |
36 it is to be unloaded. To have a plugin unload itself, simply call | |
37 gaim_plugin_unload(void *) (the void* is the handle passed to | |
38 gaim_plugin_init). Because you are explicitly asking to be removed, | |
39 gaim assumes that you have done any cleanup already, and so does not | |
40 call gaim_plugin_remove. Rather, it simply removes your callbacks and | |
41 unloads the plugin. (There is some trickery to this. Think about it: | |
42 your plugin calls the function, your plugin is unloaded, and execution | |
43 returns to your plugin, which no longer exists. This would cause a | |
44 segfault if it behaved exactly as described. Instead, the plugin is | |
45 removed from the list of plugins, and removed 5 seconds later. By then | |
46 the plugin should be effectively gone, though still in memory.) | |
47 | |
48 In previous versions of gaim, you could load multiple copies of the | |
49 same plugin. This is no longer the case. The reason for this was that | |
50 there were not two instances of the plugin in memory; rather, one copy | |
51 and two structures representing the same plugin. Then, the callbacks | |
52 would be called twice (since the plugin would most likely act the same | |
53 across multiple instances), and when one was unloaded, all callbacks | |
54 for both instances would be removed. Rather than deal with two copies | |
55 of the same plugin, it is easier and cleaner to only handle one. | |
24 | 56 |
25 There is a new event, event_quit, which signifies that gaim has exited | 57 There is a new event, event_quit, which signifies that gaim has exited |
26 correctly (i.e. didn't segfault). Also, after this event is called, all | 58 correctly (i.e. didn't segfault). Also, after this event is called, all |
27 plugins are removed, and their gaim_plugin_remove function is called. | 59 plugins are removed, and their gaim_plugin_remove function is called. |
28 This behavior is different from previous versions; however, it is the | 60 This behavior is different from previous versions; however, it is the |