| 492 |
492 |
| 493 switch (param_id) { |
493 switch (param_id) { |
| 494 case PROP_ICON_SEL: |
494 case PROP_ICON_SEL: |
| 495 if (g_value_get_boolean(value)) { |
495 if (g_value_get_boolean(value)) { |
| 496 if (statusbox->account) { |
496 if (statusbox->account) { |
| 497 PurplePlugin *plug = purple_plugins_find_with_id(purple_account_get_protocol_id(statusbox->account)); |
497 PurplePluginProtocolInfo *prpl_info = |
| 498 if (plug) { |
498 purple_find_protocol_info(purple_account_get_protocol_id(statusbox->account)); |
| 499 PurplePluginProtocolInfo *prplinfo = PURPLE_PLUGIN_PROTOCOL_INFO(plug); |
499 if (prpl_info && prpl_info->icon_spec.format != NULL) |
| 500 if (prplinfo && prplinfo->icon_spec.format != NULL) |
500 setup_icon_box(statusbox); |
| 501 setup_icon_box(statusbox); |
|
| 502 } |
|
| 503 } else { |
501 } else { |
| 504 setup_icon_box(statusbox); |
502 setup_icon_box(statusbox); |
| 505 } |
503 } |
| 506 } else { |
504 } else { |
| 507 destroy_icon_box(statusbox); |
505 destroy_icon_box(statusbox); |
| 1450 buddy_icon_set_cb(const char *filename, PidginStatusBox *box) |
1448 buddy_icon_set_cb(const char *filename, PidginStatusBox *box) |
| 1451 { |
1449 { |
| 1452 PurpleStoredImage *img = NULL; |
1450 PurpleStoredImage *img = NULL; |
| 1453 |
1451 |
| 1454 if (box->account) { |
1452 if (box->account) { |
| 1455 PurplePlugin *plug = purple_find_protocol_info(purple_account_get_protocol_id(box->account)); |
1453 PurplePluginProtocolInfo *prpl_info = |
| 1456 if (plug) { |
1454 purple_find_protocol_info(purple_account_get_protocol_id(box->account)); |
| 1457 PurplePluginProtocolInfo *prplinfo = PURPLE_PLUGIN_PROTOCOL_INFO(plug); |
1455 if (prpl_info && prpl_info->icon_spec.format) { |
| 1458 if (prplinfo && prplinfo->icon_spec.format) { |
1456 gpointer data = NULL; |
| 1459 gpointer data = NULL; |
1457 size_t len = 0; |
| 1460 size_t len = 0; |
1458 if (filename) |
| 1461 if (filename) |
1459 data = pidgin_convert_buddy_icon(prpl_info, filename, &len); |
| 1462 data = pidgin_convert_buddy_icon(plug, filename, &len); |
1460 img = purple_buddy_icons_set_account_icon(box->account, data, len); |
| 1463 img = purple_buddy_icons_set_account_icon(box->account, data, len); |
1461 if (img) |
| 1464 if (img) |
1462 /* |
| 1465 /* |
1463 * set_account_icon doesn't give us a reference, but we |
| 1466 * set_account_icon doesn't give us a reference, but we |
1464 * unref one below (for the other code path) |
| 1467 * unref one below (for the other code path) |
1465 */ |
| 1468 */ |
1466 purple_imgstore_ref(img); |
| 1469 purple_imgstore_ref(img); |
1467 |
| 1470 |
1468 purple_account_set_buddy_icon_path(box->account, filename); |
| 1471 purple_account_set_buddy_icon_path(box->account, filename); |
1469 |
| 1472 |
1470 purple_account_set_bool(box->account, "use-global-buddyicon", (filename != NULL)); |
| 1473 purple_account_set_bool(box->account, "use-global-buddyicon", (filename != NULL)); |
|
| 1474 } |
|
| 1475 } |
1471 } |
| 1476 } else { |
1472 } else { |
| 1477 GList *accounts; |
1473 GList *accounts; |
| 1478 for (accounts = purple_accounts_get_all(); accounts != NULL; accounts = accounts->next) { |
1474 for (accounts = purple_accounts_get_all(); accounts != NULL; accounts = accounts->next) { |
| 1479 PurpleAccount *account = accounts->data; |
1475 PurpleAccount *account = accounts->data; |
| 1480 PurplePlugin *plug = purple_find_protocol_info(purple_account_get_protocol_id(account)); |
1476 PurplePluginProtocolInfo *prpl_info = |
| 1481 if (plug) { |
1477 purple_find_protocol_info(purple_account_get_protocol_id(account)); |
| 1482 PurplePluginProtocolInfo *prplinfo = PURPLE_PLUGIN_PROTOCOL_INFO(plug); |
1478 if (prpl_info != NULL && |
| 1483 if (prplinfo != NULL && |
1479 purple_account_get_bool(account, "use-global-buddyicon", TRUE) && |
| 1484 purple_account_get_bool(account, "use-global-buddyicon", TRUE) && |
1480 prpl_info->icon_spec.format) { |
| 1485 prplinfo->icon_spec.format) { |
1481 gpointer data = NULL; |
| 1486 gpointer data = NULL; |
1482 size_t len = 0; |
| 1487 size_t len = 0; |
1483 if (filename) |
| 1488 if (filename) |
1484 data = pidgin_convert_buddy_icon(prpl_info, filename, &len); |
| 1489 data = pidgin_convert_buddy_icon(plug, filename, &len); |
1485 purple_buddy_icons_set_account_icon(account, data, len); |
| 1490 purple_buddy_icons_set_account_icon(account, data, len); |
1486 purple_account_set_buddy_icon_path(account, filename); |
| 1491 purple_account_set_buddy_icon_path(account, filename); |
|
| 1492 } |
|
| 1493 } |
1487 } |
| 1494 } |
1488 } |
| 1495 |
1489 |
| 1496 /* Even if no accounts were processed, load the icon that was set. */ |
1490 /* Even if no accounts were processed, load the icon that was set. */ |
| 1497 if (filename != NULL) |
1491 if (filename != NULL) |