| 2440 } |
2440 } |
| 2441 |
2441 |
| 2442 static const char * |
2442 static const char * |
| 2443 get_chat_user_status_icon(PurpleChatConversation *chat, const char *name, PurpleChatUserFlags flags) |
2443 get_chat_user_status_icon(PurpleChatConversation *chat, const char *name, PurpleChatUserFlags flags) |
| 2444 { |
2444 { |
| 2445 const char *image = NULL; |
2445 const gchar *icon_name = NULL; |
| 2446 |
2446 |
| 2447 if (flags & PURPLE_CHAT_USER_FOUNDER) { |
2447 if (flags & PURPLE_CHAT_USER_FOUNDER) { |
| 2448 image = PIDGIN_STOCK_STATUS_FOUNDER; |
2448 icon_name = "pidgin-status-founder"; |
| 2449 } else if (flags & PURPLE_CHAT_USER_OP) { |
2449 } else if (flags & PURPLE_CHAT_USER_OP) { |
| 2450 image = PIDGIN_STOCK_STATUS_OPERATOR; |
2450 icon_name = "pidgin-status-operator"; |
| 2451 } else if (flags & PURPLE_CHAT_USER_HALFOP) { |
2451 } else if (flags & PURPLE_CHAT_USER_HALFOP) { |
| 2452 image = PIDGIN_STOCK_STATUS_HALFOP; |
2452 icon_name = "pidgin-status-halfop"; |
| 2453 } else if (flags & PURPLE_CHAT_USER_VOICE) { |
2453 } else if (flags & PURPLE_CHAT_USER_VOICE) { |
| 2454 image = PIDGIN_STOCK_STATUS_VOICE; |
2454 icon_name = "pidgin-status-voice"; |
| 2455 } else if ((!flags) && purple_chat_conversation_is_ignored_user(chat, name)) { |
2455 } else if ((!flags) && purple_chat_conversation_is_ignored_user(chat, name)) { |
| 2456 image = PIDGIN_STOCK_STATUS_IGNORED; |
2456 icon_name = "pidgin-status-ignored"; |
| 2457 } else { |
2457 } |
| 2458 return NULL; |
2458 return icon_name; |
| 2459 } |
|
| 2460 return image; |
|
| 2461 } |
2459 } |
| 2462 |
2460 |
| 2463 static void |
2461 static void |
| 2464 add_chat_user_common(PurpleChatConversation *chat, PurpleChatUser *cb, const char *old_name) |
2462 add_chat_user_common(PurpleChatConversation *chat, PurpleChatUser *cb, const char *old_name) |
| 2465 { |
2463 { |
| 2468 PidginChatPane *gtkchat; |
2466 PidginChatPane *gtkchat; |
| 2469 PurpleConnection *gc; |
2467 PurpleConnection *gc; |
| 2470 GtkTreeModel *tm; |
2468 GtkTreeModel *tm; |
| 2471 GtkListStore *ls; |
2469 GtkListStore *ls; |
| 2472 GtkTreePath *newpath; |
2470 GtkTreePath *newpath; |
| 2473 const char *stock; |
2471 const gchar *icon_name; |
| 2474 GtkTreeIter iter; |
2472 GtkTreeIter iter; |
| 2475 gboolean is_buddy; |
2473 gboolean is_buddy; |
| 2476 const gchar *name, *alias; |
2474 const gchar *name, *alias; |
| 2477 gchar *tmp, *alias_key; |
2475 gchar *tmp, *alias_key; |
| 2478 PurpleChatUserFlags flags; |
2476 PurpleChatUserFlags flags; |
| 2491 return; |
2489 return; |
| 2492 |
2490 |
| 2493 tm = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
2491 tm = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
| 2494 ls = GTK_LIST_STORE(tm); |
2492 ls = GTK_LIST_STORE(tm); |
| 2495 |
2493 |
| 2496 stock = get_chat_user_status_icon(chat, name, flags); |
2494 icon_name = get_chat_user_status_icon(chat, name, flags); |
| 2497 |
2495 |
| 2498 is_buddy = purple_chat_user_is_buddy(cb); |
2496 is_buddy = purple_chat_user_is_buddy(cb); |
| 2499 |
2497 |
| 2500 tmp = g_utf8_casefold(alias, -1); |
2498 tmp = g_utf8_casefold(alias, -1); |
| 2501 alias_key = g_utf8_collate_key(tmp, -1); |
2499 alias_key = g_utf8_collate_key(tmp, -1); |
| 2510 * It *might* be faster to search the gtk_list_store and set row accurately, |
2508 * It *might* be faster to search the gtk_list_store and set row accurately, |
| 2511 * but no one in #gtk+ seems to know anything about it either. |
2509 * but no one in #gtk+ seems to know anything about it either. |
| 2512 * Inserting in the "wrong" location has no visible ill effects. - F.P. |
2510 * Inserting in the "wrong" location has no visible ill effects. - F.P. |
| 2513 */ |
2511 */ |
| 2514 -1, /* "row" */ |
2512 -1, /* "row" */ |
| 2515 CHAT_USERS_ICON_STOCK_COLUMN, stock, |
2513 CHAT_USERS_ICON_NAME_COLUMN, icon_name, |
| 2516 CHAT_USERS_ALIAS_COLUMN, alias, |
2514 CHAT_USERS_ALIAS_COLUMN, alias, |
| 2517 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key, |
2515 CHAT_USERS_ALIAS_KEY_COLUMN, alias_key, |
| 2518 CHAT_USERS_NAME_COLUMN, name, |
2516 CHAT_USERS_NAME_COLUMN, name, |
| 2519 CHAT_USERS_FLAGS_COLUMN, flags, |
2517 CHAT_USERS_FLAGS_COLUMN, flags, |
| 2520 CHAT_USERS_COLOR_COLUMN, &color, |
2518 CHAT_USERS_COLOR_COLUMN, &color, |
| 2918 rend = gtk_cell_renderer_pixbuf_new(); |
2916 rend = gtk_cell_renderer_pixbuf_new(); |
| 2919 g_object_set(G_OBJECT(rend), |
2917 g_object_set(G_OBJECT(rend), |
| 2920 "stock-size", gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL), |
2918 "stock-size", gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL), |
| 2921 NULL); |
2919 NULL); |
| 2922 col = gtk_tree_view_column_new_with_attributes(NULL, rend, |
2920 col = gtk_tree_view_column_new_with_attributes(NULL, rend, |
| 2923 "stock-id", CHAT_USERS_ICON_STOCK_COLUMN, NULL); |
2921 "icon-name", CHAT_USERS_ICON_NAME_COLUMN, NULL); |
| 2924 gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_AUTOSIZE); |
2922 gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_AUTOSIZE); |
| 2925 gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); |
2923 gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); |
| 2926 ul_width = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/userlist_width"); |
2924 ul_width = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/conversations/chat/userlist_width"); |
| 2927 gtk_widget_set_size_request(lbox, ul_width, -1); |
2925 gtk_widget_set_size_request(lbox, ul_width, -1); |
| 2928 |
2926 |