pidgin/gtkstatusbox.c

branch
soc.2013.gobjectification.plugins
changeset 36424
477889a0073c
parent 36361
9e68a23150cf
child 36459
b52f5391d12d
equal deleted inserted replaced
36423:22981e338804 36424:477889a0073c
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)

mercurial