Mercurial > pidgin.yaz
comparison pidgin/pidginstock.c @ 25332:9895d55d3877
explicit merge of 'a9579fef71ff6820f390a986132d30b079f590a0'
and '1ca0231d066e176a833be6e44e4a933acf14963a'
to branch 'im.pidgin.pidgin.next.minor'
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Thu, 27 Nov 2008 06:46:25 +0000 |
parents | 051c29d275de de3b12b70b5f |
children | 244863136504 |
comparison
equal
deleted
inserted
replaced
25331:10e1f3c1d0db | 25332:9895d55d3877 |
---|---|
230 /***************************************************************************** | 230 /***************************************************************************** |
231 * Private functions | 231 * Private functions |
232 *****************************************************************************/ | 232 *****************************************************************************/ |
233 | 233 |
234 static gchar * | 234 static gchar * |
235 find_file_common(const char *name) | |
236 { | |
237 gchar *filename; | |
238 #if GLIB_CHECK_VERSION(2,6,0) | |
239 const gchar *userdir; | |
240 const gchar * const *sysdirs; | |
241 | |
242 userdir = g_get_user_data_dir(); | |
243 filename = g_build_filename(userdir, name, NULL); | |
244 if (g_file_test(filename, G_FILE_TEST_EXISTS)) | |
245 return filename; | |
246 g_free(filename); | |
247 | |
248 sysdirs = g_get_system_data_dirs(); | |
249 for (; *sysdirs; sysdirs++) { | |
250 filename = g_build_filename(*sysdirs, name, NULL); | |
251 if (g_file_test(filename, G_FILE_TEST_EXISTS)) | |
252 return filename; | |
253 g_free(filename); | |
254 } | |
255 #endif | |
256 filename = g_build_filename(DATADIR, name, NULL); | |
257 if (g_file_test(filename, G_FILE_TEST_EXISTS)) | |
258 return filename; | |
259 g_free(filename); | |
260 return NULL; | |
261 } | |
262 | |
263 static gchar * | |
235 find_file(const char *dir, const char *base) | 264 find_file(const char *dir, const char *base) |
236 { | 265 { |
237 char *filename; | 266 char *filename; |
267 char *ret; | |
238 | 268 |
239 if (base == NULL) | 269 if (base == NULL) |
240 return NULL; | 270 return NULL; |
241 | 271 |
242 if (!strcmp(dir, "pidgin")) | 272 if (!strcmp(dir, "pidgin")) |
243 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", base, NULL); | 273 filename = g_build_filename("pixmaps", "pidgin", base, NULL); |
244 else | 274 else |
245 { | 275 filename = g_build_filename("pixmaps", "pidgin", dir, base, NULL); |
246 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, | 276 |
247 base, NULL); | 277 ret = find_file_common(filename); |
248 } | 278 g_free(filename); |
249 | 279 return ret; |
250 return filename; | |
251 } | 280 } |
252 | 281 |
253 | 282 |
254 /* Altered from do_colorshift in gnome-panel */ | 283 /* Altered from do_colorshift in gnome-panel */ |
255 static void | 284 static void |
290 static gchar * | 319 static gchar * |
291 find_icon_file(PidginStatusIconTheme *theme, const gchar *size, SizedStockIcon sized_icon, gboolean rtl) | 320 find_icon_file(PidginStatusIconTheme *theme, const gchar *size, SizedStockIcon sized_icon, gboolean rtl) |
292 { | 321 { |
293 const gchar *file, *dir; | 322 const gchar *file, *dir; |
294 gchar *file_full = NULL; | 323 gchar *file_full = NULL; |
324 gchar *tmp; | |
295 | 325 |
296 if (theme != NULL) { | 326 if (theme != NULL) { |
297 file = pidgin_icon_theme_get_icon(PIDGIN_ICON_THEME(theme), sized_icon.name); | 327 file = pidgin_icon_theme_get_icon(PIDGIN_ICON_THEME(theme), sized_icon.name); |
298 dir = purple_theme_get_dir(PURPLE_THEME(theme)); | 328 dir = purple_theme_get_dir(PURPLE_THEME(theme)); |
299 | 329 |
300 if (rtl) | 330 if (rtl) |
301 file_full = g_build_filename(dir, size, "rtl", file, NULL); | 331 file_full = g_build_filename(dir, size, "rtl", file, NULL); |
302 else file_full = g_build_filename(dir, size, file, NULL); | 332 else |
333 file_full = g_build_filename(dir, size, file, NULL); | |
303 | 334 |
304 if (g_file_test(file_full, G_FILE_TEST_IS_REGULAR)) | 335 if (g_file_test(file_full, G_FILE_TEST_IS_REGULAR)) |
305 return file_full; | 336 return file_full; |
306 | 337 |
307 g_free(file_full); | 338 g_free(file_full); |
308 } | 339 } |
309 | 340 |
310 if (rtl) | 341 if (rtl) |
311 return g_build_filename(DATADIR, "pixmaps", "pidgin", sized_icon.dir, size, sized_icon.filename, NULL); | 342 tmp = g_build_filename("pixmaps", "pidgin", sized_icon.dir, size, "rtl", sized_icon.filename, NULL); |
312 else return g_build_filename(DATADIR, "pixmaps", "pidgin", sized_icon.dir, size, sized_icon.filename, NULL); | 343 else |
344 tmp = g_build_filename("pixmaps", "pidgin", sized_icon.dir, size, sized_icon.filename, NULL); | |
345 | |
346 file_full = find_file_common(tmp); | |
347 g_free(tmp); | |
348 return file_full; | |
313 } | 349 } |
314 | 350 |
315 static void | 351 static void |
316 add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, PidginStatusIconTheme *theme, | 352 add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, PidginStatusIconTheme *theme, |
317 const char *size, SizedStockIcon sized_icon, gboolean translucent) | 353 const char *size, SizedStockIcon sized_icon, gboolean translucent) |
318 { | 354 { |
319 char *filename; | 355 char *filename; |
356 char *subpath; | |
320 GtkIconSource *source; | 357 GtkIconSource *source; |
321 GdkPixbuf *pixbuf; | 358 GdkPixbuf *pixbuf; |
322 | 359 |
323 filename = find_icon_file(theme, size, sized_icon, FALSE); | 360 filename = find_icon_file(theme, size, sized_icon, FALSE); |
361 g_return_if_fail(filename != NULL); | |
324 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); | 362 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); |
325 if (translucent) | 363 if (translucent) |
326 do_alphashift(pixbuf, pixbuf); | 364 do_alphashift(pixbuf, pixbuf); |
327 | 365 |
328 source = gtk_icon_source_new(); | 366 source = gtk_icon_source_new(); |
329 gtk_icon_source_set_pixbuf(source, pixbuf); | 367 gtk_icon_source_set_pixbuf(source, pixbuf); |
330 gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR); | 368 gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR); |
331 gtk_icon_source_set_direction_wildcarded(source, !sized_icon.rtl); | 369 gtk_icon_source_set_direction_wildcarded(source, !sized_icon.rtl); |
332 gtk_icon_source_set_size(source, sizeid); | 370 gtk_icon_source_set_size(source, sizeid); |
333 gtk_icon_source_set_size_wildcarded(source, FALSE); | 371 gtk_icon_source_set_size_wildcarded(source, FALSE); |
334 gtk_icon_source_set_state_wildcarded(source, TRUE); | 372 gtk_icon_source_set_state_wildcarded(source, TRUE); |
335 gtk_icon_set_add_source(iconset, source); | 373 gtk_icon_set_add_source(iconset, source); |
336 gtk_icon_source_free(source); | 374 gtk_icon_source_free(source); |
337 | 375 |
338 if (sizeid == gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)) { | 376 if (sizeid == gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)) { |
339 source = gtk_icon_source_new(); | 377 source = gtk_icon_source_new(); |
340 gtk_icon_source_set_pixbuf(source, pixbuf); | 378 gtk_icon_source_set_pixbuf(source, pixbuf); |
341 gtk_icon_source_set_direction_wildcarded(source, TRUE); | 379 gtk_icon_source_set_direction_wildcarded(source, TRUE); |
342 gtk_icon_source_set_size(source, GTK_ICON_SIZE_MENU); | 380 gtk_icon_source_set_size(source, GTK_ICON_SIZE_MENU); |
343 gtk_icon_source_set_size_wildcarded(source, FALSE); | 381 gtk_icon_source_set_size_wildcarded(source, FALSE); |
344 gtk_icon_source_set_state_wildcarded(source, TRUE); | 382 gtk_icon_source_set_state_wildcarded(source, TRUE); |
345 gtk_icon_set_add_source(iconset, source); | 383 gtk_icon_set_add_source(iconset, source); |
346 gtk_icon_source_free(source); | 384 gtk_icon_source_free(source); |
347 } | 385 } |
348 g_free(filename); | 386 g_free(filename); |
349 g_object_unref(pixbuf); | 387 g_object_unref(pixbuf); |
350 | 388 |
351 if (sized_icon.rtl) { | 389 if (sized_icon.rtl) { |
352 filename = find_icon_file(theme, size, sized_icon, TRUE); | 390 filename = find_icon_file(theme, size, sized_icon, TRUE); |
391 g_return_if_fail(filename != NULL); | |
353 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); | 392 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); |
354 if (translucent) | 393 if (translucent) |
355 do_alphashift(pixbuf, pixbuf); | 394 do_alphashift(pixbuf, pixbuf); |
356 | 395 |
357 source = gtk_icon_source_new(); | 396 source = gtk_icon_source_new(); |
358 gtk_icon_source_set_pixbuf(source, pixbuf); | 397 gtk_icon_source_set_pixbuf(source, pixbuf); |
359 gtk_icon_source_set_filename(source, filename); | 398 gtk_icon_source_set_filename(source, filename); |
360 gtk_icon_source_set_direction(source, GTK_TEXT_DIR_RTL); | 399 gtk_icon_source_set_direction(source, GTK_TEXT_DIR_RTL); |
361 gtk_icon_source_set_size(source, sizeid); | 400 gtk_icon_source_set_size(source, sizeid); |
362 gtk_icon_source_set_size_wildcarded(source, FALSE); | 401 gtk_icon_source_set_size_wildcarded(source, FALSE); |
363 gtk_icon_source_set_state_wildcarded(source, TRUE); | 402 gtk_icon_source_set_state_wildcarded(source, TRUE); |
364 gtk_icon_set_add_source(iconset, source); | 403 gtk_icon_set_add_source(iconset, source); |
365 g_free(filename); | 404 g_free(filename); |
366 g_object_unref(pixbuf); | 405 g_object_unref(pixbuf); |
367 gtk_icon_source_free(source); | 406 gtk_icon_source_free(source); |
368 } | 407 } |
369 } | 408 } |
370 | 409 |
371 /***************************************************************************** | 410 /***************************************************************************** |
372 * Public API functions | 411 * Public API functions |
373 *****************************************************************************/ | 412 *****************************************************************************/ |
485 gtk_icon_source_set_filename(source, filename); | 524 gtk_icon_source_set_filename(source, filename); |
486 gtk_icon_source_set_direction_wildcarded(source, TRUE); | 525 gtk_icon_source_set_direction_wildcarded(source, TRUE); |
487 gtk_icon_source_set_size_wildcarded(source, TRUE); | 526 gtk_icon_source_set_size_wildcarded(source, TRUE); |
488 gtk_icon_source_set_state_wildcarded(source, TRUE); | 527 gtk_icon_source_set_state_wildcarded(source, TRUE); |
489 | 528 |
490 | |
491 iconset = gtk_icon_set_new(); | 529 iconset = gtk_icon_set_new(); |
492 gtk_icon_set_add_source(iconset, source); | 530 gtk_icon_set_add_source(iconset, source); |
493 | 531 |
494 gtk_icon_source_free(source); | 532 gtk_icon_source_free(source); |
495 g_free(filename); | 533 g_free(filename); |