Mercurial > pidgin.yaz
comparison pidgin/pidginstock.c @ 23694:2d419a0fc0e4
partially working status icon theme stuff
author | Justin Rodriguez <ffdragon@soc.pidgin.im> |
---|---|
date | Fri, 08 Aug 2008 01:42:46 +0000 |
parents | 62b5d52c3d66 |
children | f29e173320a7 |
comparison
equal
deleted
inserted
replaced
23693:d93578eb7244 | 23694:2d419a0fc0e4 |
---|---|
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA | 24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
25 * | 25 * |
26 */ | 26 */ |
27 #include "internal.h" | 27 #include "internal.h" |
28 #include "pidgin.h" | 28 #include "pidgin.h" |
29 #include "prefs.h" | |
30 | |
31 #include "gtkicon-loader.h" | |
32 #include "theme-manager.h" | |
29 | 33 |
30 #include "pidginstock.h" | 34 #include "pidginstock.h" |
35 | |
36 /************************************************************************** | |
37 * Globals | |
38 **************************************************************************/ | |
39 | |
40 static gboolean stock_initted = FALSE; | |
41 static GtkIconSize microscopic, extra_small, small, medium, large, huge; | |
42 | |
43 /************************************************************************** | |
44 * Structures | |
45 **************************************************************************/ | |
31 | 46 |
32 static struct StockIcon | 47 static struct StockIcon |
33 { | 48 { |
34 const char *name; | 49 const char *name; |
35 const char *dir; | 50 const char *dir; |
36 const char *filename; | 51 const char *filename; |
37 | 52 |
38 } const stock_icons[] = | 53 } const stock_icons[] = { |
39 { | 54 |
40 { PIDGIN_STOCK_ACTION, NULL, GTK_STOCK_EXECUTE }, | 55 { PIDGIN_STOCK_ACTION, NULL, GTK_STOCK_EXECUTE }, |
41 #if GTK_CHECK_VERSION(2,6,0) | 56 #if GTK_CHECK_VERSION(2,6,0) |
42 { PIDGIN_STOCK_ALIAS, NULL, GTK_STOCK_EDIT }, | 57 { PIDGIN_STOCK_ALIAS, NULL, GTK_STOCK_EDIT }, |
43 #else | 58 #else |
44 { PIDGIN_STOCK_ALIAS, "buttons", "edit.png" }, | 59 { PIDGIN_STOCK_ALIAS, "buttons", "edit.png" }, |
93 { PIDGIN_STOCK_MODIFY, N_("_Modify"), 0, 0, NULL }, | 108 { PIDGIN_STOCK_MODIFY, N_("_Modify"), 0, 0, NULL }, |
94 { PIDGIN_STOCK_OPEN_MAIL, N_("_Open Mail"), 0, 0, NULL }, | 109 { PIDGIN_STOCK_OPEN_MAIL, N_("_Open Mail"), 0, 0, NULL }, |
95 { PIDGIN_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, | 110 { PIDGIN_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, |
96 }; | 111 }; |
97 | 112 |
98 static struct SizedStockIcon { | 113 typedef struct { |
99 const char *name; | 114 const char *name; |
100 const char *dir; | 115 const char *dir; |
101 const char *filename; | 116 const char *filename; |
102 gboolean microscopic; | 117 gboolean microscopic; |
103 gboolean extra_small; | 118 gboolean extra_small; |
105 gboolean medium; | 120 gboolean medium; |
106 gboolean large; | 121 gboolean large; |
107 gboolean huge; | 122 gboolean huge; |
108 gboolean rtl; | 123 gboolean rtl; |
109 const char *translucent_name; | 124 const char *translucent_name; |
110 } const sized_stock_icons [] = { | 125 } SizedStockIcon; |
111 { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I }, | 126 |
112 { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I }, | 127 const SizedStockIcon sized_stock_icons [] = { |
113 { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I }, | |
114 { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
115 { PIDGIN_STOCK_STATUS_INVISIBLE,"status", "invisible.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
116 { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, | |
117 { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, | |
118 { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, | |
119 { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I }, | |
120 { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
121 { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | |
122 | 128 |
123 { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 129 { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
124 { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 130 { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
125 { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 131 { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
126 { PIDGIN_STOCK_STATUS_HALFOP, "emblems", "half-operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 132 { PIDGIN_STOCK_STATUS_HALFOP, "emblems", "half-operator.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
148 { PIDGIN_STOCK_ANIMATION_TYPING2, "animations", "typing2.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 154 { PIDGIN_STOCK_ANIMATION_TYPING2, "animations", "typing2.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
149 { PIDGIN_STOCK_ANIMATION_TYPING3, "animations", "typing3.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 155 { PIDGIN_STOCK_ANIMATION_TYPING3, "animations", "typing3.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
150 { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 156 { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
151 { PIDGIN_STOCK_ANIMATION_TYPING5, "animations", "typing5.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 157 { PIDGIN_STOCK_ANIMATION_TYPING5, "animations", "typing5.png",FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
152 | 158 |
153 { PIDGIN_STOCK_TOOLBAR_ACCOUNTS, "toolbar", "accounts.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 159 { PIDGIN_STOCK_TOOLBAR_ACCOUNTS, "toolbar", "accounts.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
154 { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 160 { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
155 { PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 161 { PIDGIN_STOCK_TOOLBAR_BLOCK, "emblems", "blocked.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
156 { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 162 { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
157 { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 163 { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
158 { PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 164 { PIDGIN_STOCK_TOOLBAR_FONT_FACE, "toolbar", "font-face.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
159 { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 165 { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
160 { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 166 { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
161 { PIDGIN_STOCK_TOOLBAR_INSERT, "toolbar", "insert.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 167 { PIDGIN_STOCK_TOOLBAR_INSERT, "toolbar", "insert.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
162 { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 168 { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
163 { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 169 { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
164 { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 170 { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
165 { PIDGIN_STOCK_TOOLBAR_PENDING, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 171 { PIDGIN_STOCK_TOOLBAR_PENDING, "toolbar", "message-new.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
166 { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 172 { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
167 { PIDGIN_STOCK_TOOLBAR_TYPING, "toolbar", "typing.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 173 { PIDGIN_STOCK_TOOLBAR_TYPING, "toolbar", "typing.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
168 { PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 174 { PIDGIN_STOCK_TOOLBAR_UNBLOCK, "toolbar", "unblock.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
169 { PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, | 175 { PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR, "toolbar", "select-avatar.png", FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL }, |
170 { PIDGIN_STOCK_TOOLBAR_SEND_FILE, "toolbar", "send-file.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 176 { PIDGIN_STOCK_TOOLBAR_SEND_FILE, "toolbar", "send-file.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, |
171 { PIDGIN_STOCK_TOOLBAR_TRANSFER, "toolbar", "transfer.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | 177 { PIDGIN_STOCK_TOOLBAR_TRANSFER, "toolbar", "transfer.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL } |
172 | |
173 { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
174 { PIDGIN_STOCK_TRAY_INVISIBLE, "tray", "tray-invisible.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
175 { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
176 { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
177 { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
178 { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
179 { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
180 { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
181 { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } | |
182 }; | 178 }; |
179 | |
180 const SizedStockIcon sized_status_icons [] = { | |
181 | |
182 { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AVAILABLE_I }, | |
183 { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_AWAY_I }, | |
184 { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_BUSY_I }, | |
185 { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
186 { PIDGIN_STOCK_STATUS_INVISIBLE, "status", "invisible.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
187 { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, PIDGIN_STOCK_STATUS_XA_I }, | |
188 { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, | |
189 { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, | |
190 { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I }, | |
191 { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
192 { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, | |
193 | |
194 { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
195 { PIDGIN_STOCK_TRAY_INVISIBLE, "tray", "tray-invisible.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
196 { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
197 { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
198 { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
199 { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
200 { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
201 { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-new-im.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, | |
202 { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } | |
203 }; | |
204 | |
205 /***************************************************************************** | |
206 * Private functions | |
207 *****************************************************************************/ | |
183 | 208 |
184 static gchar * | 209 static gchar * |
185 find_file(const char *dir, const char *base) | 210 find_file(const char *dir, const char *base) |
186 { | 211 { |
187 char *filename; | 212 char *filename; |
333 gtk_icon_set_add_source(iconset, source); | 358 gtk_icon_set_add_source(iconset, source); |
334 g_free(filename); | 359 g_free(filename); |
335 g_object_unref(pixbuf); | 360 g_object_unref(pixbuf); |
336 gtk_icon_source_free(source); | 361 gtk_icon_source_free(source); |
337 } | 362 } |
338 | 363 } |
339 | 364 |
340 } | 365 static void |
341 | 366 build_sized_icon_sets(GtkIconSet *normal, GtkIconSet *translucent, SizedStockIcon icon, |
367 GtkIconSize size, PidginIconTheme *theme, const gchar *pix) | |
368 { | |
369 const gchar *file, *dir; | |
370 gchar *file_full; | |
371 gboolean use_theme; | |
372 | |
373 if ((use_theme = theme != NULL)) { | |
374 file = pidgin_icon_theme_get_file(theme, icon.name); | |
375 dir = purple_theme_get_dir(PURPLE_THEME(theme)); | |
376 | |
377 file_full = g_build_filename(dir, pix, file, NULL); | |
378 use_theme = g_file_test(file_full, G_FILE_TEST_IS_REGULAR); | |
379 g_free(file_full); | |
380 } | |
381 | |
382 if (!use_theme) { | |
383 file = icon.filename; | |
384 dir = icon.dir; | |
385 } | |
386 | |
387 add_sized_icon(normal, size, dir, icon.rtl, pix, file); | |
388 if (translucent != NULL) | |
389 add_translucent_sized_icon(translucent, size, dir, icon.rtl, pix, file); | |
390 } | |
391 | |
392 /***************************************************************************** | |
393 * Public API functions | |
394 *****************************************************************************/ | |
395 | |
396 void | |
397 pidgin_stock_load_status_icon_theme(PidginIconTheme *theme) | |
398 { | |
399 GtkIconFactory *icon_factory; | |
400 gint i; | |
401 GtkIconSet *normal; | |
402 GtkIconSet *translucent = NULL; | |
403 GtkWidget *win; | |
404 | |
405 g_return_if_fail(stock_initted); | |
406 | |
407 icon_factory = gtk_icon_factory_new(); | |
408 | |
409 gtk_icon_factory_add_default(icon_factory); | |
410 | |
411 win = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
412 gtk_widget_realize(win); | |
413 | |
414 for (i = 0; i < G_N_ELEMENTS(sized_status_icons); i++) | |
415 { | |
416 normal = gtk_icon_set_new(); | |
417 if (sized_status_icons[i].translucent_name) | |
418 translucent = gtk_icon_set_new(); | |
419 | |
420 if (sized_status_icons[i].microscopic) | |
421 build_sized_icon_sets(normal, translucent, sized_status_icons[i], microscopic, theme, "11"); | |
422 if (sized_status_icons[i].extra_small) | |
423 build_sized_icon_sets(normal, translucent, sized_status_icons[i], extra_small, theme, "16"); | |
424 if (sized_status_icons[i].small) | |
425 build_sized_icon_sets(normal, translucent, sized_status_icons[i], small, theme, "22"); | |
426 if (sized_status_icons[i].medium) | |
427 build_sized_icon_sets(normal, translucent, sized_status_icons[i], medium, theme, "32"); | |
428 if (sized_status_icons[i].large) | |
429 build_sized_icon_sets(normal, translucent, sized_status_icons[i], large, theme, "48"); | |
430 if (sized_status_icons[i].huge) | |
431 build_sized_icon_sets(normal, translucent, sized_status_icons[i], huge, theme, "64"); | |
432 | |
433 gtk_icon_factory_add(icon_factory, sized_status_icons[i].name, normal); | |
434 gtk_icon_set_unref(normal); | |
435 | |
436 if (sized_status_icons[i].translucent_name) { | |
437 gtk_icon_factory_add(icon_factory, sized_status_icons[i].translucent_name, translucent); | |
438 gtk_icon_set_unref(translucent); | |
439 } | |
440 } | |
441 | |
442 gtk_widget_destroy(win); | |
443 g_object_unref(G_OBJECT(icon_factory)); | |
444 } | |
342 | 445 |
343 void | 446 void |
344 pidgin_stock_init(void) | 447 pidgin_stock_init(void) |
345 { | 448 { |
346 static gboolean stock_initted = FALSE; | |
347 GtkIconFactory *icon_factory; | 449 GtkIconFactory *icon_factory; |
348 size_t i; | 450 size_t i; |
349 GtkWidget *win; | 451 GtkWidget *win; |
350 GtkIconSize microscopic, extra_small, small, medium, large, huge; | |
351 | 452 |
352 if (stock_initted) | 453 if (stock_initted) |
353 return; | 454 return; |
354 | 455 |
355 stock_initted = TRUE; | 456 stock_initted = TRUE; |
457 | |
458 /* Setup the theme */ | |
459 purple_theme_manager_register_type(g_object_new(PIDGIN_TYPE_ICON_THEME_LOADER, "type", "icon", NULL)); | |
460 purple_prefs_add_none(PIDGIN_PREFS_ROOT "/icon/status"); | |
461 purple_prefs_add_string(PIDGIN_PREFS_ROOT "/icon/status/theme", ""); | |
356 | 462 |
357 /* Setup the icon factory. */ | 463 /* Setup the icon factory. */ |
358 icon_factory = gtk_icon_factory_new(); | 464 icon_factory = gtk_icon_factory_new(); |
359 | 465 |
360 gtk_icon_factory_add_default(icon_factory); | 466 gtk_icon_factory_add_default(icon_factory); |
400 | 506 |
401 gtk_icon_set_unref(iconset); | 507 gtk_icon_set_unref(iconset); |
402 } | 508 } |
403 | 509 |
404 /* register custom icon sizes */ | 510 /* register custom icon sizes */ |
405 | |
406 microscopic = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC, 11, 11); | 511 microscopic = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC, 11, 11); |
407 extra_small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL, 16, 16); | 512 extra_small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL, 16, 16); |
408 small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_SMALL, 22, 22); | 513 small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_SMALL, 22, 22); |
409 medium = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MEDIUM, 32, 32); | 514 medium = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MEDIUM, 32, 32); |
410 large = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_LARGE, 48, 48); | 515 large = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_LARGE, 48, 48); |
414 { | 519 { |
415 GtkIconSet *iconset; | 520 GtkIconSet *iconset; |
416 | 521 |
417 iconset = gtk_icon_set_new(); | 522 iconset = gtk_icon_set_new(); |
418 | 523 |
419 #define ADD_SIZED_ICON(name, size) do { \ | 524 if (sized_stock_icons[i].microscopic) |
420 if (sized_stock_icons[i].name) \ | 525 build_sized_icon_sets(iconset, NULL, sized_stock_icons[i], microscopic, NULL, "11"); |
421 add_sized_icon(iconset, name, \ | 526 if (sized_stock_icons[i].extra_small) |
422 sized_stock_icons[i].dir, sized_stock_icons[i].rtl, \ | 527 build_sized_icon_sets(iconset, NULL, sized_stock_icons[i], extra_small, NULL, "16"); |
423 size, sized_stock_icons[i].filename); \ | 528 if (sized_stock_icons[i].small) |
424 } while (0) | 529 build_sized_icon_sets(iconset, NULL, sized_stock_icons[i], small, NULL, "22"); |
425 ADD_SIZED_ICON(microscopic, "11"); | 530 if (sized_stock_icons[i].medium) |
426 ADD_SIZED_ICON(extra_small, "16"); | 531 build_sized_icon_sets(iconset, NULL, sized_stock_icons[i], medium, NULL, "32"); |
427 ADD_SIZED_ICON(small, "22"); | 532 if (sized_stock_icons[i].large) |
428 ADD_SIZED_ICON(medium, "32"); | 533 build_sized_icon_sets(iconset, NULL, sized_stock_icons[i], large, NULL, "48"); |
429 ADD_SIZED_ICON(large, "48"); | 534 if (sized_stock_icons[i].huge) |
430 ADD_SIZED_ICON(huge, "64"); | 535 build_sized_icon_sets(iconset, NULL, sized_stock_icons[i], huge, NULL, "64"); |
431 #undef ADD_SIZED_ICON | |
432 | 536 |
433 gtk_icon_factory_add(icon_factory, sized_stock_icons[i].name, iconset); | 537 gtk_icon_factory_add(icon_factory, sized_stock_icons[i].name, iconset); |
434 gtk_icon_set_unref(iconset); | 538 gtk_icon_set_unref(iconset); |
435 | |
436 if (sized_stock_icons[i].translucent_name) { | |
437 iconset = gtk_icon_set_new(); | |
438 | |
439 #define ADD_TRANS_ICON(name, size) do { \ | |
440 if (sized_stock_icons[i].name) \ | |
441 add_translucent_sized_icon(iconset, name, \ | |
442 sized_stock_icons[i].dir, sized_stock_icons[i].rtl, \ | |
443 size, sized_stock_icons[i].filename); \ | |
444 } while (0) | |
445 ADD_TRANS_ICON(microscopic, "11"); | |
446 ADD_TRANS_ICON(extra_small, "16"); | |
447 ADD_TRANS_ICON(small, "22"); | |
448 ADD_TRANS_ICON(medium, "32"); | |
449 ADD_TRANS_ICON(large, "48"); | |
450 ADD_TRANS_ICON(huge, "64"); | |
451 #undef ADD_TRANS_ICON | |
452 | |
453 gtk_icon_factory_add(icon_factory, sized_stock_icons[i].translucent_name, iconset); | |
454 gtk_icon_set_unref(iconset); | |
455 } | |
456 } | 539 } |
457 | 540 |
458 gtk_widget_destroy(win); | 541 gtk_widget_destroy(win); |
459 g_object_unref(G_OBJECT(icon_factory)); | 542 g_object_unref(G_OBJECT(icon_factory)); |
460 | 543 |
544 pidgin_stock_load_status_icon_theme(NULL); | |
545 | |
461 /* Register the stock items. */ | 546 /* Register the stock items. */ |
462 gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items)); | 547 gtk_stock_add_static(stock_items, G_N_ELEMENTS(stock_items)); |
463 } | 548 } |