pidgin/gtkrequest.c

changeset 40836
b5eccef8404e
parent 40710
355aff4da4af
child 41058
18f3ea2e7e6d
equal deleted inserted replaced
40831:1ec9131142c3 40836:b5eccef8404e
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

mercurial