| 1403 GtkCellRenderer *renderer; |
1403 GtkCellRenderer *renderer; |
| 1404 GtkTreeSelection *sel; |
1404 GtkTreeSelection *sel; |
| 1405 GtkTreeViewColumn *column; |
1405 GtkTreeViewColumn *column; |
| 1406 GtkTreeIter iter; |
1406 GtkTreeIter iter; |
| 1407 GList *l; |
1407 GList *l; |
| 1408 GList *icons = NULL; |
1408 gboolean has_icons; |
| 1409 |
1409 |
| 1410 icons = purple_request_field_list_get_icons(field); |
1410 has_icons = purple_request_field_list_has_icons(field); |
| 1411 |
1411 |
| 1412 |
1412 |
| 1413 /* Create the list store */ |
1413 /* Create the list store */ |
| 1414 if (icons) |
1414 if (has_icons) { |
| 1415 store = gtk_list_store_new(3, G_TYPE_POINTER, G_TYPE_STRING, GDK_TYPE_PIXBUF); |
1415 store = gtk_list_store_new(3, G_TYPE_POINTER, G_TYPE_STRING, GDK_TYPE_PIXBUF); |
| 1416 else |
1416 } else { |
| 1417 store = gtk_list_store_new(2, G_TYPE_POINTER, G_TYPE_STRING); |
1417 store = gtk_list_store_new(2, G_TYPE_POINTER, G_TYPE_STRING); |
| |
1418 } |
| 1418 |
1419 |
| 1419 /* Create the tree view */ |
1420 /* Create the tree view */ |
| 1420 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); |
1421 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); |
| 1421 g_object_unref(G_OBJECT(store)); |
1422 g_object_unref(G_OBJECT(store)); |
| 1422 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE); |
1423 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE); |
| 1431 |
1432 |
| 1432 renderer = gtk_cell_renderer_text_new(); |
1433 renderer = gtk_cell_renderer_text_new(); |
| 1433 gtk_tree_view_column_pack_start(column, renderer, TRUE); |
1434 gtk_tree_view_column_pack_start(column, renderer, TRUE); |
| 1434 gtk_tree_view_column_add_attribute(column, renderer, "text", 1); |
1435 gtk_tree_view_column_add_attribute(column, renderer, "text", 1); |
| 1435 |
1436 |
| 1436 if (icons) |
1437 if (has_icons) { |
| 1437 { |
|
| 1438 renderer = gtk_cell_renderer_pixbuf_new(); |
1438 renderer = gtk_cell_renderer_pixbuf_new(); |
| 1439 gtk_tree_view_column_pack_start(column, renderer, TRUE); |
1439 gtk_tree_view_column_pack_start(column, renderer, TRUE); |
| 1440 gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", 2); |
1440 gtk_tree_view_column_add_attribute(column, renderer, "pixbuf", 2); |
| 1441 |
1441 |
| 1442 gtk_widget_set_size_request(treeview, 200, 400); |
1442 gtk_widget_set_size_request(treeview, 200, 400); |
| 1443 } |
1443 } |
| 1444 |
1444 |
| 1445 for (l = purple_request_field_list_get_items(field); l != NULL; l = l->next) |
1445 for (l = purple_request_field_list_get_items(field); l != NULL; l = l->next) |
| 1446 { |
1446 { |
| 1447 const char *text = (const char *)l->data; |
1447 PurpleKeyValuePair *item = l->data; |
| |
1448 const char *text = (const char *)item->key; |
| 1448 |
1449 |
| 1449 gtk_list_store_append(store, &iter); |
1450 gtk_list_store_append(store, &iter); |
| 1450 |
1451 |
| 1451 if (icons) |
1452 if (has_icons) { |
| 1452 { |
1453 const char *icon_path = (const char *)item->value; |
| 1453 const char *icon_path = (const char *)icons->data; |
|
| 1454 GdkPixbuf* pixbuf = NULL; |
1454 GdkPixbuf* pixbuf = NULL; |
| 1455 |
1455 |
| 1456 if (icon_path) |
1456 if (icon_path) |
| 1457 pixbuf = pidgin_pixbuf_new_from_file(icon_path); |
1457 pixbuf = pidgin_pixbuf_new_from_file(icon_path); |
| 1458 |
1458 |
| 1459 gtk_list_store_set(store, &iter, |
1459 gtk_list_store_set(store, &iter, |
| 1460 0, purple_request_field_list_get_data(field, text), |
1460 0, purple_request_field_list_get_data(field, text), |
| 1461 1, text, |
1461 1, text, |
| 1462 2, pixbuf, |
1462 2, pixbuf, |
| 1463 -1); |
1463 -1); |
| 1464 icons = icons->next; |
1464 } else { |
| 1465 } |
|
| 1466 else |
|
| 1467 gtk_list_store_set(store, &iter, |
1465 gtk_list_store_set(store, &iter, |
| 1468 0, purple_request_field_list_get_data(field, text), |
1466 0, purple_request_field_list_get_data(field, text), |
| 1469 1, text, |
1467 1, text, |
| 1470 -1); |
1468 -1); |
| 1471 |
1469 } |
| 1472 if (purple_request_field_list_is_selected(field, text)) |
1470 |
| |
1471 if (purple_request_field_list_is_selected(field, text)) { |
| 1473 gtk_tree_selection_select_iter(sel, &iter); |
1472 gtk_tree_selection_select_iter(sel, &iter); |
| |
1473 } |
| 1474 } |
1474 } |
| 1475 |
1475 |
| 1476 /* |
1476 /* |
| 1477 * We only want to catch changes made by the user, so it's important |
1477 * We only want to catch changes made by the user, so it's important |
| 1478 * that we wait until after the list is created to connect this |
1478 * that we wait until after the list is created to connect this |