# HG changeset patch # User Sean Egan # Date 1065301947 0 # Node ID 80a000885b2c6b1ebe739a7864c8e61609b6d096 # Parent cef309da8793cd7b1bc07d5a907810368ab3557d [gaim-migrate @ 7710] This is fun. committer: Tailor Script diff -r cef309da8793 -r 80a000885b2c src/gtkconv.c --- a/src/gtkconv.c Sat Oct 04 21:04:43 2003 +0000 +++ b/src/gtkconv.c Sat Oct 04 21:12:27 2003 +0000 @@ -1878,7 +1878,7 @@ /* Get the destination page number. */ dest_page_num = gaim_gtkconv_get_dest_tab_at_xy(dest_win, - e->x_root, e->y_root); + e->x_root, e->y_root); if (win == dest_win) { gaim_conv_window_move_conversation(win, @@ -1903,6 +1903,33 @@ return TRUE; } +static GdkPixbuf *get_tab_icon(GaimConversation *conv) +{ + GaimAccount *account = gaim_conversation_get_account(conv); + const char *name = gaim_conversation_get_name(conv); + GdkPixbuf *status = NULL; + + if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { + GaimBuddy *b = gaim_find_buddy(account, name); + if (b != NULL) { + status = gaim_gtk_blist_get_status_icon((GaimBlistNode*)b, + GAIM_STATUS_ICON_SMALL); + } + } + + if (!status) { + GdkPixbuf *pixbuf; + pixbuf = create_prpl_icon(account); + + if (pixbuf) { + status = gdk_pixbuf_scale_simple(pixbuf, 15, 15, + GDK_INTERP_BILINEAR); + g_object_unref(pixbuf); + } + } + return status; +} + static void switch_conv_cb(GtkNotebook *notebook, GtkWidget *page, gint page_num, gpointer user_data) @@ -1933,6 +1960,7 @@ /* Update the menubar */ if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { + GdkPixbuf *pixbuf; gtk_widget_show(gtkwin->menu.view_log); if (gc && prpl_info->options & OPT_PROTO_IM_IMAGE) { @@ -1951,7 +1979,7 @@ gtk_widget_show(gtkwin->menu.block); if (gaim_find_buddy(gaim_conversation_get_account(conv), - gaim_conversation_get_name(conv)) == NULL) { + gaim_conversation_get_name(conv)) == NULL) { gtk_widget_show(gtkwin->menu.add); gtk_widget_hide(gtkwin->menu.remove); @@ -1970,6 +1998,15 @@ if (gtkwin->menu.send_as != NULL) g_timeout_add(0, (GSourceFunc)update_send_as_selection, win); + + if (gtkconv->u.im->anim) { + pixbuf = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); + gtk_window_set_icon(GTK_WINDOW(gtkwin->window), pixbuf); + } else { + pixbuf = get_tab_icon(conv); + gtk_window_set_icon(GTK_WINDOW(gtkwin->window), pixbuf); + g_object_unref(G_OBJECT(pixbuf)); + } } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { gtk_widget_show(gtkwin->menu.invite); @@ -1986,7 +2023,7 @@ gtk_widget_hide(gtkwin->menu.block); if (gaim_find_chat(gaim_conversation_get_gc(conv), - gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv))) == NULL) { + gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv))) == NULL) { gtk_widget_show(gtkwin->menu.add); gtk_widget_hide(gtkwin->menu.remove); @@ -1998,23 +2035,23 @@ gtk_widget_set_sensitive(gtkwin->menu.add, FALSE); gtk_widget_set_sensitive(gtkwin->menu.remove, FALSE); - + if (gtkwin->menu.send_as != NULL) g_timeout_add(0, (GSourceFunc)update_send_as_selection, win); } - + update_typing_icon(conv); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkwin->menu.logging), - gaim_conversation_is_logging(conv)); - + gaim_conversation_is_logging(conv)); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkwin->menu.sounds), - gtkconv->make_sound); - + gtkconv->make_sound); + gtk_widget_grab_focus(gtkconv->entry); gtk_window_set_title(GTK_WINDOW(gtkwin->window), - gtk_label_get_text(GTK_LABEL(gtkconv->tab_label))); + gtk_label_get_text(GTK_LABEL(gtkconv->tab_label))); } /************************************************************************** @@ -3943,8 +3980,8 @@ gtkconv->make_sound = TRUE; g_signal_connect_swapped(G_OBJECT(pane), "focus", - G_CALLBACK(gtk_widget_grab_focus), - gtkconv->entry); + G_CALLBACK(gtk_widget_grab_focus), + gtkconv->entry); } gtkconv->tabby = tabby = gtk_hbox_new(FALSE, 5); @@ -3998,7 +4035,9 @@ gtk_widget_show(tabby); gtk_widget_show(menu_tabby); - + if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) + gaim_gtkconv_update_buddy_icon(conv); + /* Add this pane to the conversations notebook. */ gtk_notebook_append_page(GTK_NOTEBOOK(gtkwin->notebook), tab_cont, tabby); gtk_notebook_set_menu_label(GTK_NOTEBOOK(gtkwin->notebook), tab_cont, menu_tabby); @@ -4020,9 +4059,6 @@ focus_gtkconv = GAIM_GTK_CONVERSATION(focus_conv); gtk_widget_grab_focus(focus_gtkconv->entry); - if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) - gaim_gtkconv_update_buddy_icon(conv); - if (!new_ui) g_object_unref(gtkconv->tab_cont); @@ -4893,31 +4929,13 @@ GaimGtkConversation *gtkconv; GaimAccount *account; const char *name; - GaimBuddy *b; GdkPixbuf *status = NULL; gtkconv = GAIM_GTK_CONVERSATION(conv); name = gaim_conversation_get_name(conv); account = gaim_conversation_get_account(conv); - if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { - b = gaim_find_buddy(account, name); - if (b != NULL) { - status = gaim_gtk_blist_get_status_icon((GaimBlistNode*)b, - GAIM_STATUS_ICON_SMALL); - } - } - - if (!status) { - GdkPixbuf *pixbuf; - pixbuf = create_prpl_icon(account); - - if (pixbuf) { - status = gdk_pixbuf_scale_simple(pixbuf, 15, 15, - GDK_INTERP_BILINEAR); - g_object_unref(pixbuf); - } - } + status = get_tab_icon(conv); gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->icon), status); gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->menu_icon), status); @@ -5231,6 +5249,7 @@ gaim_gtkconv_update_buddy_icon(GaimConversation *conv) { GaimGtkConversation *gtkconv; + GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(conv)); char filename[256]; FILE *file; @@ -5371,6 +5390,10 @@ if (bm) g_object_unref(G_OBJECT(bm)); + + /* The buddy icon code needs badly to be fixed. */ + buf = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); + gtk_window_set_icon(GTK_WINDOW(gtkwin->window), buf); } void