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() {