Mercurial > pidgin.yaz
comparison plugins/docklet/docklet.c @ 4250:3b884e35e6b5
[gaim-migrate @ 4500]
The docklet now uses an icon factory. Thanks Robot101.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 08 Jan 2003 08:22:16 +0000 |
parents | 9c31ddae80a1 |
children | e252238f99df |
comparison
equal
deleted
inserted
replaced
4249:9c7fcb211886 | 4250:3b884e35e6b5 |
---|---|
55 | 55 |
56 /* globals */ | 56 /* globals */ |
57 static EggTrayIcon *docklet = NULL; | 57 static EggTrayIcon *docklet = NULL; |
58 static GtkWidget *icon; | 58 static GtkWidget *icon; |
59 static enum docklet_status status; | 59 static enum docklet_status status; |
60 static GtkIconFactory *icon_factory = NULL; | |
61 static GtkIconSize icon_size; | |
60 | 62 |
61 static void docklet_toggle_mute(GtkWidget *toggle, void *data) { | 63 static void docklet_toggle_mute(GtkWidget *toggle, void *data) { |
62 mute_sounds = GTK_CHECK_MENU_ITEM(toggle)->active; | 64 mute_sounds = GTK_CHECK_MENU_ITEM(toggle)->active; |
63 } | 65 } |
64 | 66 |
184 docklet_menu(event); | 186 docklet_menu(event); |
185 break; | 187 break; |
186 } | 188 } |
187 } | 189 } |
188 | 190 |
189 static void docklet_update_icon() { | 191 static void docklet_update_icon() |
190 gchar *filename = NULL; | 192 { |
191 GdkPixbuf *unscaled; | 193 const gchar *icon_name = NULL; |
192 | 194 |
193 switch (status) { | 195 switch (status) { |
194 case offline: | 196 case offline: |
195 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "offline.png", NULL); | 197 icon_name = "gaim-docklet-offline"; |
196 break; | 198 break; |
197 case offline_connecting: | 199 case offline_connecting: |
198 case online_connecting: | 200 case online_connecting: |
199 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "connect.png", NULL); | 201 icon_name = "gaim-docklet-connect"; |
200 break; | 202 break; |
201 case online: | 203 case online: |
202 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "online.png", NULL); | 204 icon_name = "gaim-docklet-online"; |
203 break; | 205 break; |
204 case online_pending: | 206 case online_pending: |
205 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "msgunread.png", NULL); | 207 icon_name = "gaim-docklet-msgunread"; |
206 break; | 208 break; |
207 case away: | 209 case away: |
208 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "away.png", NULL); | 210 icon_name = "gaim-docklet-away"; |
209 break; | 211 break; |
210 case away_pending: | 212 case away_pending: |
211 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "msgpend.png", NULL); | 213 icon_name = "gaim-docklet-msgpend"; |
212 break; | 214 break; |
213 } | 215 } |
214 | 216 |
215 unscaled = gdk_pixbuf_new_from_file(filename, NULL); | 217 gtk_image_set_from_stock(GTK_IMAGE(icon), icon_name, icon_size); |
216 | 218 |
217 if (unscaled) { | 219 debug_printf("Tray Icon: updated icon to '%s'\n",icon_name); |
218 GdkPixbuf *scaled; | |
219 | |
220 scaled = gdk_pixbuf_scale_simple(unscaled, 24, 24, GDK_INTERP_BILINEAR); | |
221 gtk_image_set_from_pixbuf(GTK_IMAGE(icon), scaled); | |
222 g_object_unref(unscaled); | |
223 g_object_unref(scaled); | |
224 | |
225 debug_printf("Tray Icon: updated icon to %s\n",filename); | |
226 } else { | |
227 debug_printf("Tray Icon: failed to load icon from %s\n",filename); | |
228 } | |
229 | |
230 g_free(filename); | |
231 } | 220 } |
232 | 221 |
233 static gboolean docklet_update_status() { | 222 static gboolean docklet_update_status() { |
234 enum docklet_status oldstatus; | 223 enum docklet_status oldstatus; |
235 | 224 |
354 } | 343 } |
355 | 344 |
356 static void gaim_new_conversation(char *who, void *data) { | 345 static void gaim_new_conversation(char *who, void *data) { |
357 } */ | 346 } */ |
358 | 347 |
348 static void docklet_register_icon(const char *name, char *fn) { | |
349 gchar *filename; | |
350 | |
351 filename = g_build_filename(DATADIR, "pixmaps", "gaim", fn, NULL); | |
352 gtk_icon_factory_add(icon_factory, name, | |
353 gtk_icon_set_new_from_pixbuf(gdk_pixbuf_new_from_file(filename, NULL))); | |
354 g_free(filename); | |
355 } | |
356 | |
357 static void docklet_register_icon_factory() { | |
358 icon_factory = gtk_icon_factory_new(); | |
359 | |
360 docklet_register_icon("gaim-docklet-offline", "offline.png"); | |
361 docklet_register_icon("gaim-docklet-connect", "connect.png"); | |
362 docklet_register_icon("gaim-docklet-online", "online.png"); | |
363 docklet_register_icon("gaim-docklet-msgunread", "msgunread.png"); | |
364 docklet_register_icon("gaim-docklet-away", "away.png"); | |
365 docklet_register_icon("gaim-docklet-msgpend", "msgpend.png"); | |
366 | |
367 gtk_icon_factory_add_default(icon_factory); | |
368 | |
369 icon_size = gtk_icon_size_register("gaim-docklet-size", 24, 24); | |
370 } | |
371 | |
372 static void docklet_unregister_icon_factory() { | |
373 /* does this actually free anything? it's a moot point seeing as | |
374 unloading the docklet crashes gaim, but it needs to be checked */ | |
375 gtk_icon_factory_remove_default(icon_factory); | |
376 } | |
377 | |
359 char *gaim_plugin_init(GModule *handle) { | 378 char *gaim_plugin_init(GModule *handle) { |
379 docklet_register_icon_factory(); | |
380 | |
360 docklet_create(NULL); | 381 docklet_create(NULL); |
361 | 382 |
362 gaim_signal_connect(handle, event_signon, gaim_signon, NULL); | 383 gaim_signal_connect(handle, event_signon, gaim_signon, NULL); |
363 gaim_signal_connect(handle, event_signoff, gaim_signoff, NULL); | 384 gaim_signal_connect(handle, event_signoff, gaim_signoff, NULL); |
364 gaim_signal_connect(handle, event_connecting, gaim_connecting, NULL); | 385 gaim_signal_connect(handle, event_connecting, gaim_connecting, NULL); |
383 g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_destroyed), NULL); | 404 g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_destroyed), NULL); |
384 gtk_widget_destroy(GTK_WIDGET(docklet)); | 405 gtk_widget_destroy(GTK_WIDGET(docklet)); |
385 | 406 |
386 g_object_unref(G_OBJECT(docklet)); | 407 g_object_unref(G_OBJECT(docklet)); |
387 docklet = NULL; | 408 docklet = NULL; |
409 | |
410 docklet_unregister_icon_factory(); | |
388 | 411 |
389 debug_printf("Tray Icon: removed\n"); | 412 debug_printf("Tray Icon: removed\n"); |
390 } | 413 } |
391 | 414 |
392 GtkWidget *gaim_plugin_config_gtk() { | 415 GtkWidget *gaim_plugin_config_gtk() { |