Index: src/gtkblist.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkblist.c,v retrieving revision 1.131 diff -u -p -u -p -r1.131 gtkblist.c --- src/gtkblist.c 9 Jul 2004 22:33:06 -0000 1.131 +++ src/gtkblist.c 10 Jul 2004 15:09:12 -0000 @@ -2030,6 +2030,7 @@ static void gaim_gtk_blist_drag_data_rcv gaim_debug(GAIM_DEBUG_ERROR, "conv dnd", "%s\n", (converr ? converr->message : "g_filename_from_uri error")); + g_error_free(converr); return; } file = g_strchomp(file); Index: src/gtkconv.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkconv.c,v retrieving revision 1.420 diff -u -p -u -p -r1.420 gtkconv.c --- src/gtkconv.c 9 Jul 2004 22:33:06 -0000 1.420 +++ src/gtkconv.c 10 Jul 2004 15:09:13 -0000 @@ -599,7 +599,7 @@ info_cb(GtkWidget *widget, GaimConversat sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); if (gtk_tree_selection_get_selected(sel, NULL, &iter)) - gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 1, &name, -1); + gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1); else return; @@ -633,7 +633,6 @@ static void send_file_cb(GtkWidget *widget, GaimConversation *conv) { serv_send_file(gaim_conversation_get_gc(conv), gaim_conversation_get_name(conv), NULL); - } static void @@ -1311,7 +1310,7 @@ chat_im_button_cb(GtkWidget *widget, Gai sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); if (gtk_tree_selection_get_selected(sel, NULL, &iter)) - gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 1, &name, -1); + gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1); else return; @@ -1338,7 +1337,7 @@ ignore_cb(GtkWidget *w, GaimConversation sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); if (gtk_tree_selection_get_selected(sel, NULL, &iter)) { - gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 1, &name, -1); + gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1); gtk_list_store_remove(GTK_LIST_STORE(model), &iter); } else @@ -1457,7 +1456,7 @@ create_chat_menu(GaimConversation *conv, gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); gtk_widget_show(button); } - + if (gaim_conv_chat_is_user_ignored(GAIM_CONV_CHAT(conv), who)) button = gtk_menu_item_new_with_label(_("Un-Ignore")); else @@ -1536,7 +1535,7 @@ gtkconv_chat_popup_menu_cb(GtkWidget *wi if(!gtk_tree_selection_get_selected(sel, NULL, &iter)) return FALSE; - gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 1, &who, -1); + gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1); menu = create_chat_menu (conv, who, prpl_info, gc); gtk_menu_popup(GTK_MENU(menu), NULL, NULL, gaim_gtk_treeview_popup_menu_position_func, widget, @@ -1582,7 +1581,7 @@ right_click_chat_cb(GtkWidget *widget, G gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list))), path); gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path); - gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 1, &who, -1); + gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1); if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { chat_do_im(conv, who); @@ -3312,6 +3311,30 @@ generate_invite_user_names(GaimConnectio return tmp; } +static GdkPixbuf * +get_chat_user_status_icon(GaimConvChat *chat, const char *name) +{ + GdkPixbuf *pixbuf, *scale; + char *filename; + + /* Eventually this should compose the pixbuf based on user status (op, voice, etc.) + * and ignored status and any other fancy things we want to show. For now though, + * it's just ignored users that have the privilege of an icon */ + + if(gaim_conv_chat_is_user_ignored(chat, name)) { + filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "ignored.svg", NULL); + pixbuf = gdk_pixbuf_new_from_file(filename, NULL); + g_free(filename); + if (!pixbuf) + return NULL; + scale = gdk_pixbuf_scale_simple(pixbuf, 15, 15, GDK_INTERP_BILINEAR); + g_object_unref(pixbuf); + return scale; + } + + return NULL; +} + static void add_chat_buddy_common(GaimConversation *conv, const char *name, int pos) { @@ -3320,6 +3343,7 @@ add_chat_buddy_common(GaimConversation * GaimConvChat *chat; GtkTreeIter iter; GtkListStore *ls; + GdkPixbuf *pixbuf; chat = GAIM_CONV_CHAT(conv); gtkconv = GAIM_GTK_CONVERSATION(conv); @@ -3327,11 +3351,12 @@ add_chat_buddy_common(GaimConversation * ls = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list))); + pixbuf = get_chat_user_status_icon(chat, name); + gtk_list_store_append(ls, &iter); - gtk_list_store_set(ls, &iter, 0, - (gaim_conv_chat_is_user_ignored(chat, name) ? "X" : " "), - 1, name, -1); - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), 1, + gtk_list_store_set(ls, &iter, CHAT_USERS_ICON_COLUMN, pixbuf, + CHAT_USERS_NAME_COLUMN, name, -1); + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), CHAT_USERS_NAME_COLUMN, GTK_SORT_ASCENDING); } @@ -3588,7 +3613,7 @@ setup_menubar(GaimConvWindow *win) gtkwin->menu.send_file = gtk_item_factory_get_widget(gtkwin->menu.item_factory, N_("/Conversation/Send File...")); - + gtkwin->menu.add_pounce = gtk_item_factory_get_widget(gtkwin->menu.item_factory, N_("/Conversation/Add Buddy Pounce...")); @@ -4008,26 +4033,29 @@ setup_chat_pane(GaimConversation *conv) gtk_box_pack_start(GTK_BOX(lbox), sw, TRUE, TRUE, 0); gtk_widget_show(sw); - ls = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), 1, + ls = gtk_list_store_new(CHAT_USERS_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING); + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), CHAT_USERS_NAME_COLUMN, GTK_SORT_ASCENDING); list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ls)); - rend = gtk_cell_renderer_text_new(); + rend = gtk_cell_renderer_pixbuf_new(); + col = gtk_tree_view_column_new_with_attributes(NULL, rend, - "text", 0, NULL); - gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(col), TRUE); + "pixbuf", CHAT_USERS_ICON_COLUMN, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); g_signal_connect(G_OBJECT(list), "button_press_event", G_CALLBACK(right_click_chat_cb), conv); g_signal_connect(G_OBJECT(list), "popup-menu", G_CALLBACK(gtkconv_chat_popup_menu_cb), conv); + rend = gtk_cell_renderer_text_new(); + gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); col = gtk_tree_view_column_new_with_attributes(NULL, rend, - "text", 1, NULL); + "text", CHAT_USERS_NAME_COLUMN, NULL); gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(col), TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); @@ -4373,6 +4401,7 @@ conv_dnd_recv(GtkWidget *widget, GdkDrag gaim_debug(GAIM_DEBUG_ERROR, "conv dnd", "%s\n", (converr ? converr->message : "g_filename_from_uri error")); + g_error_free(converr); return; } file = g_strchomp(file); @@ -5286,7 +5315,7 @@ gaim_gtkconv_chat_rename_user(GaimConver while (f != 0) { char *val; - gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 1, &val, -1); + gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &val, -1); if (!gaim_utf8_strcasecmp(old_name, val)) { gtk_list_store_remove(GTK_LIST_STORE(model), &iter); @@ -5344,7 +5373,7 @@ gaim_gtkconv_chat_remove_user(GaimConver while (f != 0) { char *val; - gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, 1, &val, -1); + gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &val, -1); if (!gaim_utf8_strcasecmp(user, val)) gtk_list_store_remove(GTK_LIST_STORE(model), &iter); @@ -5410,7 +5439,7 @@ gaim_gtkconv_chat_remove_users(GaimConve char *val; gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, - 1, &val, -1); + CHAT_USERS_NAME_COLUMN, &val, -1); if (!gaim_utf8_strcasecmp((char *)l->data, val)) gtk_list_store_remove(GTK_LIST_STORE(model), &iter); Index: src/gtkconv.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkconv.h,v retrieving revision 1.44 diff -u -p -u -p -r1.44 gtkconv.h --- src/gtkconv.h 9 Jul 2004 00:44:11 -0000 1.44 +++ src/gtkconv.h 10 Jul 2004 15:09:13 -0000 @@ -28,6 +28,12 @@ #include "conversation.h" +enum { + CHAT_USERS_ICON_COLUMN, + CHAT_USERS_NAME_COLUMN, + CHAT_USERS_COLUMNS +}; + /************************************************************************** * @name Structures **************************************************************************/ Index: pixmaps/status/default/Makefile.am =================================================================== RCS file: /cvsroot/gaim/gaim/pixmaps/status/default/Makefile.am,v retrieving revision 1.21 diff -u -p -u -p -r1.21 Makefile.am --- pixmaps/status/default/Makefile.am 23 May 2004 21:57:45 -0000 1.21 +++ pixmaps/status/default/Makefile.am 10 Jul 2004 15:09:13 -0000 @@ -12,6 +12,7 @@ EXTRA_DIST = \ game.png \ hiptop.png \ icq.png \ + ignored.svg \ invisible.png \ irc.png \ jabber.png \ Index: pixmaps/status/default/ignored.svg =================================================================== RCS file: pixmaps/status/default/ignored.svg diff -N pixmaps/status/default/ignored.svg --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ pixmaps/status/default/ignored.svg 10 Jul 2004 15:09:13 -0000 @@ -0,0 +1,17 @@ + + +