| 108 gboolean medium; |
123 gboolean medium; |
| 109 gboolean large; |
124 gboolean large; |
| 110 gboolean huge; |
125 gboolean huge; |
| 111 gboolean rtl; |
126 gboolean rtl; |
| 112 const char *translucent_name; |
127 const char *translucent_name; |
| 113 } const sized_stock_icons [] = { |
128 } SizedStockIcon; |
| 114 { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I }, |
129 |
| 115 { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I }, |
130 const SizedStockIcon sized_stock_icons [] = { |
| 116 { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I }, |
131 |
| 117 { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 118 { PIDGIN_STOCK_STATUS_INVISIBLE,"status", "invisible.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 119 { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, |
|
| 120 { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, |
|
| 121 { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, |
|
| 122 { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I }, |
|
| 123 { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 124 { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
|
| 125 |
|
| 126 { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
132 { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 127 { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
133 { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 128 { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
134 { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 129 { PIDGIN_STOCK_STATUS_HALFOP, "emblems", "half-operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
135 { PIDGIN_STOCK_STATUS_HALFOP, "emblems", "half-operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 130 { PIDGIN_STOCK_STATUS_VOICE, "emblems", "voice.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
136 { PIDGIN_STOCK_STATUS_VOICE, "emblems", "voice.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 173 { PIDGIN_STOCK_ANIMATION_TYPING2, "animations", "typing2.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
179 { PIDGIN_STOCK_ANIMATION_TYPING2, "animations", "typing2.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 174 { PIDGIN_STOCK_ANIMATION_TYPING3, "animations", "typing3.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
180 { PIDGIN_STOCK_ANIMATION_TYPING3, "animations", "typing3.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 175 { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
181 { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 176 { PIDGIN_STOCK_ANIMATION_TYPING5, "animations", "typing5.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
182 { PIDGIN_STOCK_ANIMATION_TYPING5, "animations", "typing5.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 177 |
183 |
| 178 { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
184 { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 179 { PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
185 { PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 180 { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
186 { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 181 { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
187 { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 182 { PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
188 { PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 183 { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
189 { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 184 { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
190 { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 185 { PIDGIN_STOCK_TOOLBAR_INSERT, "toolbar", "insert.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
191 { PIDGIN_STOCK_TOOLBAR_INSERT, "toolbar", "insert.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 186 { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
192 { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 187 { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
193 { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 188 { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
194 { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 189 { PIDGIN_STOCK_TOOLBAR_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
195 { PIDGIN_STOCK_TOOLBAR_PENDING, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 190 { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
196 { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 191 { PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
197 { PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 192 { PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, |
198 { PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 193 { PIDGIN_STOCK_TOOLBAR_SEND_FILE, "toolbar", "send-file.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
199 { PIDGIN_STOCK_TOOLBAR_SEND_FILE, "toolbar", "send-file.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| 194 { PIDGIN_STOCK_TOOLBAR_TRANSFER, "toolbar", "transfer.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
200 { PIDGIN_STOCK_TOOLBAR_TRANSFER, "toolbar", "transfer.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL } |
| 195 |
|
| 196 { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 197 { PIDGIN_STOCK_TRAY_INVISIBLE, "tray", "tray-invisible.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 198 { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 199 { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 200 { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 201 { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 202 { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 203 { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
|
| 204 { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } |
|
| 205 }; |
201 }; |
| 206 |
202 |
| 207 static void |
203 const SizedStockIcon sized_status_icons [] = { |
| 208 add_sized_icon_common(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, |
204 |
| 209 gboolean rtl, const char *size, const char *file, |
205 { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I }, |
| 210 gboolean translucent); |
206 { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I }, |
| |
207 { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I }, |
| |
208 { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
209 { PIDGIN_STOCK_STATUS_INVISIBLE, "status", "invisible.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
210 { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, |
| |
211 { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, |
| |
212 { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, |
| |
213 { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I }, |
| |
214 { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
215 { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
| |
216 |
| |
217 { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
218 { PIDGIN_STOCK_TRAY_INVISIBLE, "tray", "tray-invisible.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
219 { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
220 { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
221 { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
222 { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
223 { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
224 { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, |
| |
225 { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } |
| |
226 }; |
| |
227 |
| |
228 /***************************************************************************** |
| |
229 * Private functions |
| |
230 *****************************************************************************/ |
| 211 |
231 |
| 212 static gchar * |
232 static gchar * |
| 213 find_file_common(const char *name) |
233 find_file_common(const char *name) |
| 214 { |
234 { |
| 215 gchar *filename; |
235 gchar *filename; |
| 369 g_object_unref(pixbuf); |
402 g_object_unref(pixbuf); |
| 370 gtk_icon_source_free(source); |
403 gtk_icon_source_free(source); |
| 371 } |
404 } |
| 372 } |
405 } |
| 373 |
406 |
| |
407 /***************************************************************************** |
| |
408 * Public API functions |
| |
409 *****************************************************************************/ |
| |
410 |
| |
411 void |
| |
412 pidgin_stock_load_status_icon_theme(PidginStatusIconTheme *theme) |
| |
413 { |
| |
414 GtkIconFactory *icon_factory; |
| |
415 gint i; |
| |
416 GtkIconSet *normal; |
| |
417 GtkIconSet *translucent = NULL; |
| |
418 GtkWidget *win; |
| |
419 |
| |
420 if (theme != NULL) { |
| |
421 purple_prefs_set_string(PIDGIN_PREFS_ROOT "/status/icon-theme", |
| |
422 purple_theme_get_name(PURPLE_THEME(theme))); |
| |
423 purple_prefs_set_path(PIDGIN_PREFS_ROOT "/status/icon-theme-dir", |
| |
424 purple_theme_get_dir(PURPLE_THEME(theme))); |
| |
425 } |
| |
426 else { |
| |
427 purple_prefs_set_string(PIDGIN_PREFS_ROOT "/status/icon-theme", ""); |
| |
428 purple_prefs_set_path(PIDGIN_PREFS_ROOT "/status/icon-theme-dir", ""); |
| |
429 } |
| |
430 |
| |
431 icon_factory = gtk_icon_factory_new(); |
| |
432 |
| |
433 gtk_icon_factory_add_default(icon_factory); |
| |
434 |
| |
435 win = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
| |
436 gtk_widget_realize(win); |
| |
437 |
| |
438 for (i = 0; i < G_N_ELEMENTS(sized_status_icons); i++) |
| |
439 { |
| |
440 normal = gtk_icon_set_new(); |
| |
441 if (sized_status_icons[i].translucent_name) |
| |
442 translucent = gtk_icon_set_new(); |
| |
443 |
| |
444 #define ADD_SIZED_ICON(name, size) if (sized_status_icons[i].name) { \ |
| |
445 add_sized_icon(normal, name, theme, size, sized_status_icons[i], FALSE); \ |
| |
446 if (sized_status_icons[i].translucent_name) \ |
| |
447 add_sized_icon(translucent, name, theme, size, sized_status_icons[i], TRUE); \ |
| |
448 } |
| |
449 ADD_SIZED_ICON(microscopic, "11"); |
| |
450 ADD_SIZED_ICON(extra_small, "16"); |
| |
451 ADD_SIZED_ICON(small, "22"); |
| |
452 ADD_SIZED_ICON(medium, "32"); |
| |
453 ADD_SIZED_ICON(large, "48"); |
| |
454 ADD_SIZED_ICON(huge, "64"); |
| |
455 #undef ADD_SIZED_ICON |
| |
456 |
| |
457 gtk_icon_factory_add(icon_factory, sized_status_icons[i].name, normal); |
| |
458 gtk_icon_set_unref(normal); |
| |
459 |
| |
460 if (sized_status_icons[i].translucent_name) { |
| |
461 gtk_icon_factory_add(icon_factory, sized_status_icons[i].translucent_name, translucent); |
| |
462 gtk_icon_set_unref(translucent); |
| |
463 } |
| |
464 } |
| |
465 |
| |
466 |
| |
467 gtk_widget_destroy(win); |
| |
468 g_object_unref(G_OBJECT(icon_factory)); |
| |
469 } |
| |
470 |
| 374 void |
471 void |
| 375 pidgin_stock_init(void) |
472 pidgin_stock_init(void) |
| 376 { |
473 { |
| 377 static gboolean stock_initted = FALSE; |
|
| 378 GtkIconFactory *icon_factory; |
474 GtkIconFactory *icon_factory; |
| 379 size_t i; |
475 size_t i; |
| 380 GtkWidget *win; |
476 GtkWidget *win; |
| 381 GtkIconSize microscopic, extra_small, small, medium, large, huge; |
477 PidginIconThemeLoader *loader; |
| |
478 const gchar *path = NULL; |
| 382 |
479 |
| 383 if (stock_initted) |
480 if (stock_initted) |
| 384 return; |
481 return; |
| 385 |
482 |
| 386 stock_initted = TRUE; |
483 stock_initted = TRUE; |
| |
484 |
| |
485 /* Setup the status icon theme */ |
| |
486 loader = g_object_new(PIDGIN_TYPE_ICON_THEME_LOADER, "type", "status-icon", NULL); |
| |
487 purple_theme_manager_register_type(PURPLE_THEME_LOADER(loader)); |
| |
488 purple_prefs_add_string(PIDGIN_PREFS_ROOT "/status/icon-theme", ""); |
| |
489 purple_prefs_add_path(PIDGIN_PREFS_ROOT "/status/icon-theme-dir", ""); |
| 387 |
490 |
| 388 /* Setup the icon factory. */ |
491 /* Setup the icon factory. */ |
| 389 icon_factory = gtk_icon_factory_new(); |
492 icon_factory = gtk_icon_factory_new(); |
| 390 |
493 |
| 391 gtk_icon_factory_add_default(icon_factory); |
494 gtk_icon_factory_add_default(icon_factory); |
| 392 |
495 |
| 393 /* Er, yeah, a hack, but it works. :) */ |
496 /* Er, yeah, a hack, but it works. :) */ |
| 394 win = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
497 win = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
| 395 gtk_widget_realize(win); |
498 gtk_widget_realize(win); |
| 396 |
499 |
| |
500 /* All non-sized icons */ |
| 397 for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) |
501 for (i = 0; i < G_N_ELEMENTS(stock_icons); i++) |
| 398 { |
502 { |
| 399 GtkIconSource *source; |
503 GtkIconSource *source; |
| 400 GtkIconSet *iconset; |
504 GtkIconSet *iconset; |
| 401 gchar *filename; |
505 gchar *filename; |
| 430 |
534 |
| 431 gtk_icon_set_unref(iconset); |
535 gtk_icon_set_unref(iconset); |
| 432 } |
536 } |
| 433 |
537 |
| 434 /* register custom icon sizes */ |
538 /* register custom icon sizes */ |
| 435 |
|
| 436 microscopic = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC, 11, 11); |
539 microscopic = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC, 11, 11); |
| 437 extra_small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL, 16, 16); |
540 extra_small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL, 16, 16); |
| 438 small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_SMALL, 22, 22); |
541 small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_SMALL, 22, 22); |
| 439 medium = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MEDIUM, 32, 32); |
542 medium = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MEDIUM, 32, 32); |
| 440 large = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_LARGE, 48, 48); |
543 large = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_LARGE, 48, 48); |
| 441 huge = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_HUGE, 64, 64); |
544 huge = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_HUGE, 64, 64); |
| 442 |
545 |
| |
546 /* All non-status sized icons */ |
| 443 for (i = 0; i < G_N_ELEMENTS(sized_stock_icons); i++) |
547 for (i = 0; i < G_N_ELEMENTS(sized_stock_icons); i++) |
| 444 { |
548 { |
| 445 GtkIconSet *iconset; |
549 GtkIconSet *iconset = gtk_icon_set_new(); |
| 446 |
550 |
| 447 iconset = gtk_icon_set_new(); |
551 #define ADD_SIZED_ICON(name, size) if (sized_stock_icons[i].name) \ |
| 448 |
552 add_sized_icon(iconset, name, NULL, size, sized_stock_icons[i], FALSE); |
| 449 #define ADD_SIZED_ICON(name, size) do { \ |
|
| 450 if (sized_stock_icons[i].name) \ |
|
| 451 add_sized_icon(iconset, name, \ |
|
| 452 sized_stock_icons[i].dir, sized_stock_icons[i].rtl, \ |
|
| 453 size, sized_stock_icons[i].filename); \ |
|
| 454 } while (0) |
|
| 455 ADD_SIZED_ICON(microscopic, "11"); |
553 ADD_SIZED_ICON(microscopic, "11"); |
| 456 ADD_SIZED_ICON(extra_small, "16"); |
554 ADD_SIZED_ICON(extra_small, "16"); |
| 457 ADD_SIZED_ICON(small, "22"); |
555 ADD_SIZED_ICON(small, "22"); |
| 458 ADD_SIZED_ICON(medium, "32"); |
556 ADD_SIZED_ICON(medium, "32"); |
| 459 ADD_SIZED_ICON(large, "48"); |
557 ADD_SIZED_ICON(large, "48"); |
| 460 ADD_SIZED_ICON(huge, "64"); |
558 ADD_SIZED_ICON(huge, "64"); |
| 461 #undef ADD_SIZED_ICON |
559 #undef ADD_SIZED_ICON |
| 462 |
560 |
| 463 gtk_icon_factory_add(icon_factory, sized_stock_icons[i].name, iconset); |
561 gtk_icon_factory_add(icon_factory, sized_stock_icons[i].name, iconset); |
| 464 gtk_icon_set_unref(iconset); |
562 gtk_icon_set_unref(iconset); |
| 465 |
|
| 466 if (sized_stock_icons[i].translucent_name) { |
|
| 467 iconset = gtk_icon_set_new(); |
|
| 468 |
|
| 469 #define ADD_TRANS_ICON(name, size) do { \ |
|
| 470 if (sized_stock_icons[i].name) \ |
|
| 471 add_translucent_sized_icon(iconset, name, \ |
|
| 472 sized_stock_icons[i].dir, sized_stock_icons[i].rtl, \ |
|
| 473 size, sized_stock_icons[i].filename); \ |
|
| 474 } while (0) |
|
| 475 ADD_TRANS_ICON(microscopic, "11"); |
|
| 476 ADD_TRANS_ICON(extra_small, "16"); |
|
| 477 ADD_TRANS_ICON(small, "22"); |
|
| 478 ADD_TRANS_ICON(medium, "32"); |
|
| 479 ADD_TRANS_ICON(large, "48"); |
|
| 480 ADD_TRANS_ICON(huge, "64"); |
|
| 481 #undef ADD_TRANS_ICON |
|
| 482 |
|
| 483 gtk_icon_factory_add(icon_factory, sized_stock_icons[i].translucent_name, iconset); |
|
| 484 gtk_icon_set_unref(iconset); |
|
| 485 } |
|
| 486 } |
563 } |
| 487 |
564 |
| 488 gtk_widget_destroy(win); |
565 gtk_widget_destroy(win); |
| 489 g_object_unref(G_OBJECT(icon_factory)); |
566 g_object_unref(G_OBJECT(icon_factory)); |
| 490 |
567 |
| |
568 /* Pre-load Status icon theme - this avoids a bug with displaying the correct icon in the tray, theme is destroyed after*/ |
| |
569 if (purple_prefs_get_string(PIDGIN_PREFS_ROOT "/icon/status/theme") && |
| |
570 (path = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/status/icon-theme-dir"))) { |
| |
571 |
| |
572 PidginStatusIconTheme *theme = PIDGIN_STATUS_ICON_THEME(purple_theme_loader_build(PURPLE_THEME_LOADER(loader), path)); |
| |
573 pidgin_stock_load_status_icon_theme(theme); |
| |
574 g_object_unref(G_OBJECT(theme)); |
| |
575 |
| |
576 } else pidgin_stock_load_status_icon_theme(NULL); |
| |
577 |
| 491 /* Register the stock items. */ |
578 /* Register the stock items. */ |
| 492 gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items)); |
579 gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items)); |
| 493 } |
580 } |