Mercurial > pidgin
annotate plugins/ticker/ticker.c @ 6251:8208ae37affc
[gaim-migrate @ 6747]
it.po and POTFILES.in updates from Claudio Satriano
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Sun, 20 Jul 2003 23:55:45 +0000 |
parents | 914f2d5da21c |
children | 8f94cce8faa5 |
rev | line source |
---|---|
6122 | 1 /* |
2 * Gaim Ticker Plugin | |
3 * The line below doesn't apply at all, does it? It should be Syd, Sean, and | |
4 * maybe Nathan, I believe. | |
3391 | 5 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald |
6 * | |
7 * This library is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU Library General Public | |
9 * License as published by the Free Software Foundation; either | |
10 * version 2 of the License, or (at your option) any later version. | |
11 * | |
12 * This library is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Library General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Library General Public | |
18 * License along with this library; if not, write to the | |
19 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
20 * Boston, MA 02111-1307, USA. | |
21 */ | |
22 | |
23 /* | |
24 * ticker.c -- Syd Logan, Summer 2000 | |
25 * pluginized- Sean Egan, Summer 2002 | |
26 */ | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
27 #include "internal.h" |
3391 | 28 |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
29 #include "blist.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
30 #include "conversation.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
31 #include "debug.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
32 #include "prpl.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
33 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
34 #include "gtkblist.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
35 #include "gtkplugin.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
36 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5607
diff
changeset
|
37 #include "gtkticker.h" |
3391 | 38 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
39 #define TICKER_PLUGIN_ID "gtk-ticker" |
3867 | 40 |
3391 | 41 static GtkWidget *tickerwindow = NULL; |
42 static GtkWidget *ticker; | |
43 | |
44 typedef struct { | |
5170 | 45 struct buddy *buddy; |
3391 | 46 GtkWidget *ebox; |
47 GtkWidget *label; | |
5170 | 48 GtkWidget *icon; |
6122 | 49 guint timeout; |
3391 | 50 } TickerData; |
51 | |
5170 | 52 GList *tickerbuds = NULL; |
3391 | 53 |
5172 | 54 static gboolean buddy_ticker_destroy_window(GtkWidget *window, |
55 GdkEventAny *event, gpointer data) { | |
56 if(window) | |
57 gtk_widget_hide(window); | |
58 | |
59 return TRUE; /* don't actually destroy the window */ | |
3391 | 60 } |
61 | |
5170 | 62 static void buddy_ticker_create_window() { |
63 if(tickerwindow) { | |
64 gtk_widget_show(tickerwindow); | |
65 return; | |
66 } | |
3391 | 67 |
5170 | 68 tickerwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
5286 | 69 gtk_window_set_default_size(GTK_WINDOW(tickerwindow), 500, -1); |
5172 | 70 g_signal_connect(G_OBJECT(tickerwindow), "delete_event", |
5170 | 71 G_CALLBACK (buddy_ticker_destroy_window), NULL); |
72 gtk_window_set_title (GTK_WINDOW(tickerwindow), _("Buddy Ticker")); | |
4850 | 73 gtk_window_set_role (GTK_WINDOW(tickerwindow), "ticker"); |
3391 | 74 |
4850 | 75 ticker = gtk_ticker_new(); |
5170 | 76 gtk_ticker_set_spacing(GTK_TICKER(ticker), 20); |
77 gtk_container_add(GTK_CONTAINER(tickerwindow), ticker); | |
78 gtk_ticker_set_interval(GTK_TICKER(ticker), 500); | |
79 gtk_ticker_set_scootch(GTK_TICKER(ticker), 10); | |
80 gtk_ticker_start_scroll(GTK_TICKER(ticker)); | |
5286 | 81 gtk_widget_set_size_request(ticker, 1, -1); |
3391 | 82 |
5170 | 83 gtk_widget_show_all(tickerwindow); |
3391 | 84 } |
85 | |
5170 | 86 static gboolean buddy_click_cb(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { |
87 struct buddy *b = user_data; | |
4850 | 88 |
5170 | 89 gaim_conversation_new(GAIM_CONV_IM, b->account, b->name); |
3391 | 90 return TRUE; |
91 } | |
92 | |
5170 | 93 static TickerData *buddy_ticker_find_buddy(struct buddy *b) { |
94 GList *tb; | |
95 for(tb = tickerbuds; tb; tb = tb->next) { | |
96 TickerData *td = tb->data; | |
97 if(td->buddy == b) | |
98 return td; | |
99 } | |
100 return NULL; | |
101 } | |
102 | |
103 static void buddy_ticker_set_pixmap(struct buddy *b) { | |
104 TickerData *td = buddy_ticker_find_buddy(b); | |
105 GdkPixbuf *pixbuf; | |
3391 | 106 |
5170 | 107 if(!td) |
3391 | 108 return; |
5170 | 109 |
110 if(!td->icon) | |
111 td->icon = gtk_image_new(); | |
3391 | 112 |
5234 | 113 pixbuf = gaim_gtk_blist_get_status_icon((GaimBlistNode*)b, |
114 GAIM_STATUS_ICON_SMALL); | |
5170 | 115 gtk_image_set_from_pixbuf(GTK_IMAGE(td->icon), pixbuf); |
116 g_object_unref(G_OBJECT(pixbuf)); | |
117 } | |
118 | |
6122 | 119 static gboolean buddy_ticker_set_pixmap_cb(gpointer data) { |
120 TickerData *td = data; | |
121 | |
122 gaim_debug(GAIM_DEBUG_ERROR, "XXX", "we're updating the pixmap, you bitch\n"); | |
123 buddy_ticker_set_pixmap(td->buddy); | |
124 td->timeout = 0; | |
125 | |
126 return FALSE; | |
127 } | |
128 | |
5170 | 129 static void buddy_ticker_add_buddy(struct buddy *b) { |
130 GtkWidget *hbox; | |
131 TickerData *td; | |
132 | |
133 buddy_ticker_create_window(); | |
5172 | 134 |
3391 | 135 if (!ticker) |
136 return; | |
137 | |
6122 | 138 if (buddy_ticker_find_buddy(b)) |
3391 | 139 return; |
140 | |
5170 | 141 td = g_new0(TickerData, 1); |
142 td->buddy = b; | |
143 tickerbuds = g_list_append(tickerbuds, td); | |
3391 | 144 |
5170 | 145 td->ebox = gtk_event_box_new(); |
146 gtk_ticker_add(GTK_TICKER(ticker), td->ebox); | |
147 hbox = gtk_hbox_new(FALSE, 0); | |
148 gtk_container_add(GTK_CONTAINER(td->ebox), hbox); | |
149 buddy_ticker_set_pixmap(b); | |
150 gtk_box_pack_start(GTK_BOX(hbox), td->icon, FALSE, FALSE, 5); | |
3391 | 151 |
5170 | 152 g_signal_connect(G_OBJECT(td->ebox), "button-press-event", |
153 G_CALLBACK(buddy_click_cb), b); | |
3391 | 154 |
5170 | 155 td->label = gtk_label_new(gaim_get_buddy_alias(b)); |
156 gtk_box_pack_start(GTK_BOX(hbox), td->label, FALSE, FALSE, 5); | |
157 | |
158 gtk_widget_show_all(td->ebox); | |
159 gtk_widget_show(tickerwindow); | |
6122 | 160 |
161 /* | |
162 * Update the icon in a few seconds (after the open door icon has | |
163 * changed). This is somewhat ugly. | |
164 */ | |
165 td->timeout = g_timeout_add(11000, buddy_ticker_set_pixmap_cb, td); | |
3391 | 166 } |
167 | |
5170 | 168 static void buddy_ticker_remove_buddy(struct buddy *b) { |
169 TickerData *td = buddy_ticker_find_buddy(b); | |
3391 | 170 |
5170 | 171 if (!td) |
172 return; | |
3391 | 173 |
5172 | 174 /* pop up the ticker window again */ |
175 buddy_ticker_create_window(); | |
176 | |
5170 | 177 gtk_ticker_remove(GTK_TICKER(ticker), td->ebox); |
178 tickerbuds = g_list_remove(tickerbuds, td); | |
6122 | 179 if (td->timeout != 0) |
180 g_source_remove(td->timeout); | |
5170 | 181 g_free(td); |
3391 | 182 } |
183 | |
5170 | 184 static void buddy_ticker_show() |
3391 | 185 { |
5170 | 186 struct gaim_buddy_list *list = gaim_get_blist(); |
187 GaimBlistNode *gnode, *bnode; | |
188 struct buddy *b; | |
3391 | 189 |
5170 | 190 if(!list) |
191 return; | |
3391 | 192 |
5170 | 193 for(gnode = list->root; gnode; gnode = gnode->next) { |
194 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
195 continue; | |
196 for(bnode = gnode->child; bnode; bnode = bnode->next) { | |
197 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
198 continue; | |
199 b = (struct buddy *)bnode; | |
200 if(GAIM_BUDDY_IS_ONLINE(b)) | |
201 buddy_ticker_add_buddy(b); | |
3391 | 202 } |
203 } | |
204 } | |
205 | |
6122 | 206 void signoff_cb(GaimConnection *gc) { |
207 TickerData *td; | |
208 if (!gaim_connections_get_all()) { | |
209 while (tickerbuds) { | |
210 td = tickerbuds->data; | |
211 tickerbuds = g_list_delete_link(tickerbuds, tickerbuds); | |
212 if (td->timeout != 0) | |
213 g_source_remove(td->timeout); | |
214 g_free(td); | |
215 } | |
216 gtk_widget_destroy(tickerwindow); | |
217 tickerwindow = NULL; | |
218 ticker = NULL; | |
219 } else { | |
220 GList *t = tickerbuds; | |
221 while (t) { | |
222 td = t->data; | |
223 t = t->next; | |
224 if (td->buddy->account == gc->account) { | |
225 tickerbuds = g_list_remove(tickerbuds, td); | |
226 if (td->timeout != 0) | |
227 g_source_remove(td->timeout); | |
228 g_free(td); | |
229 } | |
230 } | |
231 } | |
232 } | |
233 | |
234 void buddy_signon_cb(GaimConnection *gc, char *who) { | |
4850 | 235 struct buddy *b = gaim_find_buddy(gc->account, who); |
5170 | 236 if(buddy_ticker_find_buddy(b)) |
237 buddy_ticker_set_pixmap(b); | |
238 else | |
239 buddy_ticker_add_buddy(b); | |
3391 | 240 } |
241 | |
5587
1c55b1540e18
[gaim-migrate @ 5991]
Christian Hammond <chipx86@chipx86.com>
parents:
5286
diff
changeset
|
242 void buddy_signoff_cb(GaimConnection *gc, char *who) { |
5170 | 243 struct buddy *b = gaim_find_buddy(gc->account, who); |
244 buddy_ticker_remove_buddy(b); | |
5185 | 245 if(!tickerbuds) |
246 gtk_widget_hide(tickerwindow); | |
3391 | 247 } |
248 | |
5587
1c55b1540e18
[gaim-migrate @ 5991]
Christian Hammond <chipx86@chipx86.com>
parents:
5286
diff
changeset
|
249 void away_cb(GaimConnection *gc, char *who) { |
4850 | 250 struct buddy *b = gaim_find_buddy(gc->account, who); |
5170 | 251 if(buddy_ticker_find_buddy(b)) |
252 buddy_ticker_set_pixmap(b); | |
253 else | |
254 buddy_ticker_add_buddy(b); | |
3391 | 255 } |
256 | |
3630 | 257 /* |
258 * EXPORTED FUNCTIONS | |
259 */ | |
260 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
261 static gboolean |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
262 plugin_load(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
263 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
264 gaim_signal_connect(plugin, event_signoff, signoff_cb, NULL); |
6122 | 265 gaim_signal_connect(plugin, event_buddy_signon, buddy_signon_cb, NULL); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
266 gaim_signal_connect(plugin, event_buddy_signoff, buddy_signoff_cb, NULL); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
267 gaim_signal_connect(plugin, event_buddy_away, away_cb, NULL); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
268 gaim_signal_connect(plugin, event_buddy_back, away_cb, NULL); |
3391 | 269 |
5607 | 270 if (gaim_connections_get_all()) |
5170 | 271 buddy_ticker_show(); |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
272 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
273 return TRUE; |
3391 | 274 } |
275 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
276 static gboolean |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
277 plugin_unload(GaimPlugin *plugin) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
278 { |
6122 | 279 TickerData *td; |
280 | |
281 while (tickerbuds) { | |
282 td = tickerbuds->data; | |
5186 | 283 tickerbuds = g_list_delete_link(tickerbuds, tickerbuds); |
6122 | 284 if (td->timeout != 0) |
285 g_source_remove(td->timeout); | |
286 g_free(td); | |
5185 | 287 } |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
288 |
5984
c55b32640690
[gaim-migrate @ 6432]
Christian Hammond <chipx86@chipx86.com>
parents:
5983
diff
changeset
|
289 if (tickerwindow != NULL) { |
5983
e0be64ced3d7
[gaim-migrate @ 6431]
Christian Hammond <chipx86@chipx86.com>
parents:
5920
diff
changeset
|
290 gtk_widget_destroy(tickerwindow); |
5984
c55b32640690
[gaim-migrate @ 6432]
Christian Hammond <chipx86@chipx86.com>
parents:
5983
diff
changeset
|
291 tickerwindow = NULL; |
c55b32640690
[gaim-migrate @ 6432]
Christian Hammond <chipx86@chipx86.com>
parents:
5983
diff
changeset
|
292 } |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
293 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
294 return TRUE; |
3391 | 295 } |
5170 | 296 |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
297 static GaimGtkPluginUiInfo ui_info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
298 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
299 NULL /**< get_config_frame */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
300 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
301 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
302 static GaimPluginInfo info = |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
303 { |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
304 2, /**< api_version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
305 GAIM_PLUGIN_STANDARD, /**< type */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
306 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
307 0, /**< flags */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
308 NULL, /**< dependencies */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
309 GAIM_PRIORITY_DEFAULT, /**< priority */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
310 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
311 TICKER_PLUGIN_ID, /**< id */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
312 N_("Buddy Ticker"), /**< name */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
313 VERSION, /**< version */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
314 /** summary */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
315 N_("A horizontal scrolling version of the buddy list."), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
316 /** description */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
317 N_("A horizontal scrolling version of the buddy list."), |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
318 "Syd Logan", /**< author */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
319 WEBSITE, /**< homepage */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
320 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
321 plugin_load, /**< load */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
322 plugin_unload, /**< unload */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
323 NULL, /**< destroy */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
324 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
325 &ui_info, /**< ui_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
326 NULL /**< extra_info */ |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
327 }; |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
328 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
329 static void |
5920
7d385de2f9cd
[gaim-migrate @ 6360]
Christian Hammond <chipx86@chipx86.com>
parents:
5873
diff
changeset
|
330 init_plugin(GaimPlugin *plugin) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
331 { |
3551 | 332 } |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5186
diff
changeset
|
333 |
6063 | 334 GAIM_INIT_PLUGIN(ticker, init_plugin, info) |