# HG changeset patch # User Sean Egan # Date 1028263968 0 # Node ID 3b00d97d59aadbb81e778dbcd3b10fe07538ef69 # Parent 120e08ea5aeef6d3a53c5b48f8418a50c5d9b623 [gaim-migrate @ 3386] There'll be more tommorow! Thanks for coming to the party. committer: Tailor Script diff -r 120e08ea5aee -r 3b00d97d59aa src/buddy.c --- a/src/buddy.c Fri Aug 02 04:49:23 2002 +0000 +++ b/src/buddy.c Fri Aug 02 04:52:48 2002 +0000 @@ -51,6 +51,8 @@ #include "pixmaps/away_small.xpm" #include "pixmaps/away_big.xpm" +#include "pixmaps/block_small.xpm" + #include "pixmaps/add_small.xpm" #include "pixmaps/import_small.xpm" /*#include "pixmaps/export_small.xpm"*/ @@ -2746,6 +2748,8 @@ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), protomenu); do_proto_menu(); + gaim_new_item_with_pixmap(menu, _("Privacy"), block_small_xpm, + GTK_SIGNAL_FUNC(show_privacy_options), NULL, 0, 0, 0); gaim_new_item_with_pixmap(menu, _("Preferences"), prefs_small_xpm, GTK_SIGNAL_FUNC(show_prefs), NULL, 'p', GDK_CONTROL_MASK, "Ctl+P"); gaim_new_item_with_pixmap(menu, _("View System Log"), prefs_small_xpm, diff -r 120e08ea5aee -r 3b00d97d59aa src/buddy_chat.c --- a/src/buddy_chat.c Fri Aug 02 04:49:23 2002 +0000 +++ b/src/buddy_chat.c Fri Aug 02 04:52:48 2002 +0000 @@ -728,7 +728,10 @@ play_sound(SND_CHAT_SAY); } } - write_to_conv(b, message, flag, who, mtime, -1); + + if (chat_options & OPT_CHAT_COLORIZE) + flag |= WFLAG_COLORIZE; + write_to_conv(b, message, flag, who, mtime, -1); } diff -r 120e08ea5aee -r 3b00d97d59aa src/conversation.c --- a/src/conversation.c Fri Aug 02 04:49:23 2002 +0000 +++ b/src/conversation.c Fri Aug 02 04:52:48 2002 +0000 @@ -271,7 +271,7 @@ gtk_widget_destroy(c->link_dialog); if (c->log_dialog) gtk_widget_destroy(c->log_dialog); -#if USE_PIXBUF +#if USE_PIXBUF || GTK_CHECK_VERSION(1,3,0) if (c->save_icon) gtk_widget_destroy(c->save_icon); #endif @@ -1751,6 +1751,10 @@ /* Takin care of the window.. */ /*------------------------------------------------------------------------*/ +static char* nick_colors[] = {"#ff0000", "#ff00ff", "#00ffff", "#04a241", + "#ffae00", "#bd008a", "#4c9f9c", "#7f0000", + "#6477a2"}; +#define NUM_NICK_COLORS 9 /* this is going to be interesting since the conversation could either be a * normal IM conversation or a chat window. but hopefully it won't matter */ @@ -1897,7 +1901,20 @@ g_snprintf(str, 1024, "%s:", who); if (flags & WFLAG_NICK) strcpy(colour, "#af7f00"); - else if (flags & WFLAG_RECV) + else if (flags & WFLAG_RECV) { + if (flags & WFLAG_COLORIZE) { + char *u = who; + int m = 0; + while (*u) { + m = m + *u; + u++; + } + m = m % NUM_NICK_COLORS; + strcpy(colour, nick_colors[m]); + } else { + strcpy(colour, "#ff0000"); + } + } else if (flags & WFLAG_RECV) strcpy(colour, "#ff0000"); else if (flags & WFLAG_SEND) strcpy(colour, "#0000ff"); @@ -3291,7 +3308,7 @@ } } -#if USE_PIXBUF +#if USE_PIXBUF || GTK_CHECK_VERSION(1,3,0) #include #define SCALE(x) ((gdk_pixbuf_animation_get_width(x) <= 48 && gdk_pixbuf_animation_get_height(x) <= 48) \ @@ -3308,6 +3325,9 @@ GdkPixmap *src; GdkPixmap *pm; GdkBitmap *bm; +#if GTK_CHECK_VERSION(1,3,0) + GdkPixbufAnimationIter *iter; +#endif GdkGC *gc; gint delay; @@ -3316,6 +3336,23 @@ return FALSE; } +#if GTK_CHECK_VERSION(1,3,0) + gdk_pixbuf_animation_iter_advance(c->iter, NULL); + buf = gdk_pixbuf_animation_iter_get_pixbuf(c->iter); + scale = gdk_pixbuf_scale_simple(buf, + MAX(gdk_pixbuf_get_width(buf) * SCALE(c->anim) / + gdk_pixbuf_animation_get_width(c->anim), 1), + MAX(gdk_pixbuf_get_height(buf) * SCALE(c->anim) / + gdk_pixbuf_animation_get_height(c->anim), 1), + GDK_INTERP_NEAREST); + gdk_pixbuf_render_pixmap_and_mask(scale, &pm, &bm, 100); + gdk_pixbuf_unref(scale); + gtk_pixmap_set(GTK_PIXMAP(c->icon), pm, bm); + gdk_pixmap_unref(pm); + if (bm) + gdk_bitmap_unref(bm); + delay = MAX(gdk_pixbuf_animation_iter_get_delay_time(c->iter), 13); +#else frames = gdk_pixbuf_animation_get_frames(c->anim); frame = g_list_nth_data(frames, c->frame); switch (gdk_pixbuf_frame_get_action(frame)) { @@ -3383,8 +3420,9 @@ c->frame = (c->frame + 1) % g_list_length(frames); delay = MAX(gdk_pixbuf_frame_get_delay_time(frame), 13); +#endif + c->icon_timer = gtk_timeout_add(delay * 10, redraw_icon, c); - return FALSE; } @@ -3400,10 +3438,13 @@ GList *frames; GdkPixbufFrame *frame; int delay; - +#if GTK_CHECK_VERSION(1,3,0) + delay = gdk_pixbuf_animation_iter_get_delay_time(c->iter); +#else frames = gdk_pixbuf_animation_get_frames(c->anim); frame = g_list_nth_data(frames, c->frame); delay = MAX(gdk_pixbuf_frame_get_delay_time(frame), 13); +#endif if (c->anim) c->icon_timer = gtk_timeout_add(delay * 10, redraw_icon, c); } @@ -3490,7 +3531,13 @@ gtk_signal_connect(GTK_OBJECT(button), "activate", GTK_SIGNAL_FUNC(stop_anim), c); gtk_menu_append(GTK_MENU(menu), button); gtk_widget_show(button); - } else if (c->anim && (gdk_pixbuf_animation_get_num_frames(c->anim) > 1)) { + } +#if GTK_CHECK_VERSION(1,3,0) + else if (c->anim && !(gdk_pixbuf_animation_is_static_image(c->anim))) +#else + else if (c->anim && (gdk_pixbuf_animation_get_num_frames(c->anim) > 1)) +#endif + { button = gtk_menu_item_new_with_label(_("Enable Animation")); gtk_signal_connect(GTK_OBJECT(button), "activate", GTK_SIGNAL_FUNC(start_anim), c); gtk_menu_append(GTK_MENU(menu), button); @@ -3516,7 +3563,7 @@ void remove_icon(struct conversation *c) { -#if USE_PIXBUF +#if USE_PIXBUF || GTK_CHECK_VERSION(1,3,0) if (c->icon) gtk_container_remove(GTK_CONTAINER(c->bbox), c->icon->parent->parent); c->icon = NULL; @@ -3526,8 +3573,12 @@ if (c->icon_timer) gtk_timeout_remove(c->icon_timer); c->icon_timer = 0; +#if GTK_CHECK_VERSION(1,3,0) + g_object_unref(c->iter); +#else c->frame = 0; #endif +#endif } void update_smilies(struct conversation *c) @@ -3558,12 +3609,14 @@ void update_icon(struct conversation *c) { -#if USE_PIXBUF +#if USE_PIXBUF || GTK_CHECK_VERSION(1,3,0) char filename[256]; FILE *file; - +#if GTK_CHECK_VERSION(1,3,0) + GError *err; +#endif void *data; - int len; + int len, delay; GList *frames; GdkPixbuf *buf; @@ -3599,28 +3652,47 @@ fwrite(data, 1, len, file); fclose(file); +#if GTK_CHECK_VERSION(1,3,0) + c->anim = gdk_pixbuf_animation_new_from_file(filename, &err); +#else c->anim = gdk_pixbuf_animation_new_from_file(filename); +#endif /* make sure we remove the file as soon as possible */ unlink(filename); if (!c->anim) return; - frames = gdk_pixbuf_animation_get_frames(c->anim); - buf = gdk_pixbuf_frame_get_pixbuf(frames->data); - sf = SCALE(c->anim); - scale = gdk_pixbuf_scale_simple(buf, - MAX(gdk_pixbuf_get_width(buf) * sf / - gdk_pixbuf_animation_get_width(c->anim), 1), - MAX(gdk_pixbuf_get_height(buf) * sf / - gdk_pixbuf_animation_get_height(c->anim), 1), - GDK_INTERP_NEAREST); - - if (gdk_pixbuf_animation_get_num_frames(c->anim) > 1) { - int delay = MAX(gdk_pixbuf_frame_get_delay_time(frames->data), 13); +#if GTK_CHECK_VERSION(1,3,0) + c->iter = gdk_pixbuf_animation_get_iter(c->anim, NULL); + buf = gdk_pixbuf_animation_iter_get_pixbuf(c->iter); + scale = gdk_pixbuf_scale_simple(buf, + MAX(gdk_pixbuf_get_width(buf) * sf / + gdk_pixbuf_animation_get_width(c->anim), 1), + MAX(gdk_pixbuf_get_height(buf) * sf / + gdk_pixbuf_animation_get_height(c->anim), 1), + GDK_INTERP_NEAREST); + delay = gdk_pixbuf_animation_iter_get_delay_time(c->iter); +#else c->frame = 1; - c->icon_timer = gtk_timeout_add(delay * 10, redraw_icon, c); - } + frames = gdk_pixbuf_animation_get_frames(c->anim); + buf = gdk_pixbuf_frame_get_pixbuf(frames->data); + sf = SCALE(c->anim); + scale = gdk_pixbuf_scale_simple(buf, + MAX(gdk_pixbuf_get_width(buf) * sf / + gdk_pixbuf_animation_get_width(c->anim), 1), + MAX(gdk_pixbuf_get_height(buf) * sf / + gdk_pixbuf_animation_get_height(c->anim), 1), + GDK_INTERP_NEAREST); + if (gdk_pixbuf_animation_get_num_frames(c->anim) > 1) { + delay = MAX(gdk_pixbuf_frame_get_delay_time(frames->data), 13); + } else { + delay = 0; + } +#endif + if (delay) + c->icon_timer = gtk_timeout_add(delay * 10, redraw_icon, c); + gdk_pixbuf_render_pixmap_and_mask(scale, &pm, &bm, 100); gdk_pixbuf_unref(scale); @@ -3645,6 +3717,7 @@ if (bm) gdk_bitmap_unref(bm); #endif + } void got_new_icon(struct gaim_connection *gc, char *who) @@ -3665,7 +3738,7 @@ void set_anim() { -#if USE_PIXBUF +#if USE_PIXBUF || GTK_CHECK_VERSION(1,3,0) GList *c = conversations; if (im_options & OPT_IM_HIDE_ICONS) return; diff -r 120e08ea5aee -r 3b00d97d59aa src/core.h --- a/src/core.h Fri Aug 02 04:49:23 2002 +0000 +++ b/src/core.h Fri Aug 02 04:52:48 2002 +0000 @@ -26,6 +26,8 @@ #include #endif +#include +#include #include #include #include diff -r 120e08ea5aee -r 3b00d97d59aa src/dialogs.c --- a/src/dialogs.c Fri Aug 02 04:49:23 2002 +0000 +++ b/src/dialogs.c Fri Aug 02 04:52:48 2002 +0000 @@ -54,6 +54,8 @@ #include "pixmaps/add.xpm" #include "pixmaps/warn.xpm" #include "pixmaps/close.xpm" +#include "pixmaps/gnome_add.xpm" +#include "pixmaps/gnome_remove.xpm" #include "pixmaps/angel.xpm" #include "pixmaps/bigsmile.xpm" @@ -1121,6 +1123,393 @@ } +/*------------------------------------------------------------------------* + * Privacy Settings * + *------------------------------------------------------------------------*/ +static GtkWidget *deny_type = NULL; +static GtkWidget *deny_conn_hbox = NULL; +static GtkWidget *deny_opt_menu = NULL; +static struct gaim_connection *current_deny_gc = NULL; +static gboolean current_is_deny = FALSE; +static GtkWidget *allow_list = NULL; +static GtkWidget *block_list = NULL; + +static void set_deny_mode(GtkWidget *w, int data) +{ + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))) + return; + debug_printf("setting deny mode %d\n", data); + current_deny_gc->permdeny = data; + serv_set_permit_deny(current_deny_gc); + do_export(current_deny_gc); +} + +static GtkWidget *deny_opt(char *label, int which, GtkWidget *box, GtkWidget *set) +{ + GtkWidget *opt; + + if (!set) + opt = gtk_radio_button_new_with_label(NULL, label); + else + opt = + gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(set)), + label); + gtk_box_pack_start(GTK_BOX(box), opt, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(opt), "toggled", GTK_SIGNAL_FUNC(set_deny_mode), (void *)which); + gtk_widget_show(opt); + if (current_deny_gc->permdeny == which) + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE); + + return opt; +} + +static void des_deny_opt(GtkWidget *d, gpointer e) +{ + gtk_widget_destroy(d); + current_deny_gc = NULL; + deny_conn_hbox = NULL; + deny_type = NULL; + deny_opt_menu = NULL; + current_is_deny = FALSE; + allow_list = NULL; + block_list = NULL; +} + +static void set_deny_type() +{ + GSList *bg = gtk_radio_button_group(GTK_RADIO_BUTTON(deny_type)); + + switch (current_deny_gc->permdeny) { + case 4: + break; + case 3: + bg = bg->next->next; + break; + case 2: + bg = bg->next; + break; + case 1: + bg = bg->next->next->next; + break; + } + + gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(bg->data), TRUE); +} + +void build_allow_list() +{ + GtkWidget *label; + GtkWidget *list_item; + GSList *p; + + if (!current_is_deny) + return; + + p = current_deny_gc->permit; + + gtk_list_remove_items(GTK_LIST(allow_list), GTK_LIST(allow_list)->children); + + while (p) { + label = gtk_label_new(p->data); + list_item = gtk_list_item_new(); + gtk_container_add(GTK_CONTAINER(list_item), label); + gtk_object_set_user_data(GTK_OBJECT(list_item), p->data); + gtk_widget_show(label); + gtk_container_add(GTK_CONTAINER(allow_list), list_item); + gtk_widget_show(list_item); + p = p->next; + } +} + +void build_block_list() +{ + GtkWidget *label; + GtkWidget *list_item; + GSList *d; + + if (!current_is_deny) + return; + + d = current_deny_gc->deny; + + gtk_list_remove_items(GTK_LIST(block_list), GTK_LIST(block_list)->children); + + while (d) { + label = gtk_label_new(d->data); + list_item = gtk_list_item_new(); + gtk_container_add(GTK_CONTAINER(list_item), label); + gtk_object_set_user_data(GTK_OBJECT(list_item), d->data); + gtk_widget_show(label); + gtk_container_add(GTK_CONTAINER(block_list), list_item); + gtk_widget_show(list_item); + d = d->next; + } +} + +static void deny_gc_opt(GtkWidget *opt, struct gaim_connection *gc) +{ + current_deny_gc = gc; + set_deny_type(); + build_allow_list(); + build_block_list(); +} + +static void build_deny_menu() +{ + GtkWidget *menu; + GtkWidget *opt; + GSList *c = connections; + struct gaim_connection *gc; + int count = 0; + gboolean found = FALSE; + char buf[2048]; + + if (g_slist_length(connections) == 1) { + gtk_widget_hide(deny_conn_hbox); + return; + } else + gtk_widget_show(deny_conn_hbox); + + menu = gtk_menu_new(); + + while (c) { + gc = (struct gaim_connection *)c->data; + c = c->next; + if (!gc->prpl->set_permit_deny) + continue; + g_snprintf(buf, sizeof buf, "%s (%s)", gc->username, gc->prpl->name()); + opt = gtk_menu_item_new_with_label(buf); + gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(deny_gc_opt), gc); + gtk_widget_show(opt); + gtk_menu_append(GTK_MENU(menu), opt); + if (gc == current_deny_gc) + found = TRUE; + else if (!found) + count++; + } + + if (!found) { + current_deny_gc = connections->data; + count = 0; + } + + gtk_option_menu_remove_menu(GTK_OPTION_MENU(deny_opt_menu)); + gtk_option_menu_set_menu(GTK_OPTION_MENU(deny_opt_menu), menu); + gtk_option_menu_set_history(GTK_OPTION_MENU(deny_opt_menu), count); + + gtk_widget_show(menu); + gtk_widget_show(deny_opt_menu); +} + +static void pref_deny_add(GtkWidget *button, gboolean permit) +{ + show_add_perm(current_deny_gc, NULL, permit); +} + +static void pref_deny_rem(GtkWidget *button, gboolean permit) +{ + GList *i; + char *who; + + if (permit && !allow_list) + return; + if (!permit && !block_list) + return; + + if (permit) + i = GTK_LIST(allow_list)->selection; + else + i = GTK_LIST(block_list)->selection; + + if (!i) + return; + who = gtk_object_get_user_data(GTK_OBJECT(i->data)); + if (permit) { + current_deny_gc->permit = g_slist_remove(current_deny_gc->permit, who); + serv_rem_permit(current_deny_gc, who); + build_allow_list(); + } else { + current_deny_gc->deny = g_slist_remove(current_deny_gc->deny, who); + serv_rem_deny(current_deny_gc, who); + build_block_list(); + } + + do_export(current_deny_gc); +} + +GtkWidget *privacy_win; +void update_privacy_connections() { /* This is a slightly better name */ + gboolean needdeny = FALSE; + GSList *c = connections; + struct gaim_connection *gc = NULL; + + if (!privacy_win) + return; + + while (c) { + gc = c->data; + if (gc->prpl->set_permit_deny) + break; + gc = NULL; + c = c->next; + } + needdeny = (gc != NULL); + + + if (needdeny) { + gtk_widget_set_sensitive(privacy_win, TRUE); + build_deny_menu(); + build_allow_list(); + build_block_list(); + } else { + gtk_widget_set_sensitive(privacy_win, FALSE); + } +} +static void destroy_privacy() { + current_deny_gc = NULL; + privacy_win = NULL; +} + +void show_privacy_options() +{ + GtkWidget *pwin; + GtkWidget *box; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *vbox; + GtkWidget *sw; + GtkWidget *bbox; + GtkWidget *button; + GtkWidget *sep; + GtkWidget *close_button; + + current_deny_gc = connections->data; /* this is safe because this screen will only be + available when there are connections */ + current_is_deny = TRUE; + + + privacy_win = pwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_policy(GTK_WINDOW(pwin), FALSE, TRUE, TRUE); + gtk_window_set_wmclass(GTK_WINDOW(pwin), "privacy", "Gaim"); + gtk_window_set_title(GTK_WINDOW(pwin), _("Gaim - Privacy")); + gtk_signal_connect(GTK_OBJECT(pwin), "destroy", GTK_SIGNAL_FUNC(destroy_privacy), NULL); + gtk_widget_realize(pwin); + aol_icon(pwin->window); + + gtk_widget_set_usize(pwin, 0, 400); + + box = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(box), 5); + gtk_container_add(GTK_CONTAINER(pwin), box); + gtk_widget_show(box); + + label = gtk_label_new(_("Privacy settings are affected immediately.")); + gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 5); + gtk_widget_show(label); + + deny_conn_hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(box), deny_conn_hbox, FALSE, FALSE, 0); + gtk_widget_show(deny_conn_hbox); + + label = gtk_label_new(_("Set privacy for:")); + gtk_box_pack_start(GTK_BOX(deny_conn_hbox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + + deny_opt_menu = gtk_option_menu_new(); + gtk_box_pack_start(GTK_BOX(deny_conn_hbox), deny_opt_menu, FALSE, FALSE, 5); + gtk_signal_connect(GTK_OBJECT(deny_opt_menu), "destroy", GTK_SIGNAL_FUNC(des_deny_opt), NULL); + gtk_widget_show(deny_opt_menu); + + build_deny_menu(); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 5); + gtk_widget_show(hbox); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); + gtk_widget_show(vbox); + + deny_type = deny_opt(_("Allow all users to contact me"), 1, vbox, NULL); + deny_type = deny_opt(_("Allow only the users below"), 3, vbox, deny_type); + + label = gtk_label_new(_("Allow List")); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + + sw = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5); + gtk_widget_show(sw); + + allow_list = gtk_list_new(); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), allow_list); + gtk_widget_show(allow_list); + + build_allow_list(); + + bbox = gtk_hbox_new(TRUE, 5); + gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 5); + gtk_widget_show(bbox); + + button = picture_button(pwin, _("Add"), gnome_add_xpm); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pref_deny_add), (void *)TRUE); + gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5); + + button = picture_button(pwin, _("Remove"), gnome_remove_xpm); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pref_deny_rem), (void *)TRUE); + gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 5); + gtk_widget_show(vbox); + + deny_type = deny_opt(_("Deny all users"), 2, vbox, deny_type); + deny_type = deny_opt(_("Block the users below"), 4, vbox, deny_type); + + label = gtk_label_new(_("Block List")); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + + sw = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 5); + gtk_widget_show(sw); + + block_list = gtk_list_new(); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), block_list); + gtk_widget_show(block_list); + + build_block_list(); + + bbox = gtk_hbox_new(TRUE, 5); + gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 5); + gtk_widget_show(bbox); + + button = picture_button(pwin, _("Add"), gnome_add_xpm); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pref_deny_add), FALSE); + gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5); + + button = picture_button(pwin, _("Remove"), gnome_remove_xpm); + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(pref_deny_rem), FALSE); + gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 5); + + sep = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(box), sep, FALSE, FALSE, 5); + gtk_widget_show(sep); + + hbox = gtk_hbox_new(TRUE, 5); + gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 5); + gtk_widget_show(hbox); + close_button = picture_button(pwin, _("Close"), cancel_xpm); + gtk_box_pack_end(GTK_BOX(hbox), close_button, FALSE, FALSE, 5); + gtk_signal_connect_object(GTK_OBJECT(close_button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), pwin); + + gtk_widget_show(pwin); +} + + + /*------------------------------------------------------------------------*/ /* The dialog for new buddy pounces */ /*------------------------------------------------------------------------*/ @@ -2573,8 +2962,8 @@ /* Color Selection Dialog */ /*------------------------------------------------------*/ -static GtkWidget *fgcseld = NULL; -static GtkWidget *bgcseld = NULL; +GtkWidget *fgcseld = NULL; +GtkWidget *bgcseld = NULL; void cancel_fgcolor(GtkWidget *widget, struct conversation *c) { @@ -2656,43 +3045,6 @@ cancel_bgcolor(NULL, c); } -static void destroy_colorsel(GtkWidget *w, gpointer d) -{ - if (d) { - gtk_widget_destroy(fgcseld); - fgcseld = NULL; - } else { - gtk_widget_destroy(bgcseld); - bgcseld = NULL; - } -} - -static void apply_color_dlg(GtkWidget *w, gpointer d) -{ - gdouble color[3]; - if ((int)d == 1) { - gtk_color_selection_get_color(GTK_COLOR_SELECTION - (GTK_COLOR_SELECTION_DIALOG(fgcseld)->colorsel), color); - destroy_colorsel(NULL, (void *)1); - - fgcolor.red = ((guint16)(color[0] * 65535)) >> 8; - fgcolor.green = ((guint16)(color[1] * 65535)) >> 8; - fgcolor.blue = ((guint16)(color[2] * 65535)) >> 8; - update_color(NULL, pref_fg_picture); - update_convo_color(TRUE); - } else { - gtk_color_selection_get_color(GTK_COLOR_SELECTION - (GTK_COLOR_SELECTION_DIALOG(bgcseld)->colorsel), color); - destroy_colorsel(NULL, (void *)0); - - bgcolor.red = ((guint16)(color[0] * 65535)) >> 8; - bgcolor.green = ((guint16)(color[1] * 65535)) >> 8; - bgcolor.blue = ((guint16)(color[2] * 65535)) >> 8; - update_color(NULL, pref_bg_picture); - update_convo_color(FALSE); - } -} - void show_fgcolor_dialog(struct conversation *c, GtkWidget *color) { GtkWidget *colorsel; @@ -2855,25 +3207,6 @@ fontseld = NULL; } -void apply_font_dlg(GtkWidget *w, GtkWidget *f) -{ - int i, j = 0, k = 0; - char *fontname; - - fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontseld)); - destroy_fontsel(0, 0); - for (i = 0; i < strlen(fontname); i++) { - if (fontname[i] == '-') { - if (++j > 2) - break; - } else if (j == 2) - fontface[k++] = fontname[i]; - } - fontface[k] = '\0'; - g_snprintf(fontxfld, sizeof(fontxfld), "%s", fontname); - update_convo_font(); -} - void show_font_dialog(struct conversation *c, GtkWidget *font) { @@ -4226,6 +4559,32 @@ #endif } +#if GTK_CHECK_VERSION(1,3,0) +GtkWidget *pixbuf_button(char *text, char *iconfile) +{ + GtkWidget *button, *image, *label, *bbox; + button = gtk_button_new(); + bbox = gtk_hbox_new(FALSE, 5); + gtk_container_add (GTK_CONTAINER(button), bbox); + if (iconfile) { + char *filename; + filename = g_build_filename (DATADIR, "pixmaps", "gaim", "buttons", iconfile, NULL); + debug_printf("Loading: %s\n", filename); + image = gtk_image_new_from_file(filename); + gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); + g_free(filename); + } + if (text) { + label = gtk_label_new(NULL); + gtk_label_set_text_with_mnemonic(GTK_LABEL(label), text); + gtk_label_set_mnemonic_widget(GTK_LABEL(label), button); + gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); + } + gtk_widget_show_all(bbox); + return button; +} +#endif + GtkWidget *picture_button(GtkWidget *window, char *text, char **xpm) { GtkWidget *button; diff -r 120e08ea5aee -r 3b00d97d59aa src/gaim.h --- a/src/gaim.h Fri Aug 02 04:49:23 2002 +0000 +++ b/src/gaim.h Fri Aug 02 04:52:48 2002 +0000 @@ -84,13 +84,6 @@ #define CUI_CHAT_SEND 5 #define CUI_CHAT_RECV 6 - -#define BROWSER_NETSCAPE 0 -#define BROWSER_KFM 1 -#define BROWSER_MANUAL 2 -/*#define BROWSER_INTERNAL 3*/ -#define BROWSER_GNOME 4 - #define IM_FLAG_AWAY 0x01 #define IM_FLAG_CHECKBOX 0x02 #define IM_FLAG_GAIMUSER 0x04 @@ -112,6 +105,7 @@ #define WFLAG_SYSTEM 0x20 #define WFLAG_NICK 0x40 #define WFLAG_NOLOG 0x80 +#define WFLAG_COLORIZE 0x100 #define AUTO_RESPONSE "<AUTO-REPLY> : " @@ -253,6 +247,7 @@ #define OPT_CHAT_BR_TAB 0x00000040 #define OPT_CHAT_TAB_COMPLETE 0x00000080 #define OPT_CHAT_OLD_STYLE_TAB 0x00000100 +#define OPT_CHAT_COLORIZE 0x00000200 extern guint font_options; #define OPT_FONT_BOLD 0x00000001 @@ -285,6 +280,7 @@ #define OPT_SOUND_CMD 0x00020000 #define OPT_SOUND_CHAT_NICK 0x00040000 /* remember to also change the struct in sound.c */ + #define SND_BUDDY_ARRIVE 0 #define SND_BUDDY_LEAVE 1 #define SND_RECEIVE 2 @@ -297,10 +293,9 @@ #define SND_POUNCE_DEFAULT 9 #define SND_CHAT_NICK 10 #define NUM_SOUNDS 11 -/* these two for the sound_order list in prefs.c */ -#define SND_SEPARATOR -1 -#define SND_END -2 + extern char *sound_file[NUM_SOUNDS]; +extern int sound_order[]; /* global sound struct */ struct sound_struct { @@ -433,12 +428,13 @@ extern gchar *strdup_withhtml(const gchar *); extern void away_on_login(char *); extern void system_log(enum log_event, struct gaim_connection *, struct buddy *, int); -extern unsigned char *utf8_to_str(unsigned char *); -extern char *str_to_utf8(unsigned char *); extern char *add_cr(char *); extern void strip_linefeed(char *); extern time_t get_time(int, int, int, int, int, int); extern FILE *gaim_mkstemp(gchar **); +extern char *convert_string(char *, const char *, const char *); +#define utf8_to_str(in) convert_string(in, nl_langinfo(CODESET), "UTF-8"); +#define str_to_utf8(in) convert_string(in, "UTF-8", nl_langinfo(CODESET)); /*------------------------------------------------------------------------*/ /* Multi-Entry dialog and vCard dialog support */ diff -r 120e08ea5aee -r 3b00d97d59aa src/gaimrc.c --- a/src/gaimrc.c Fri Aug 02 04:49:23 2002 +0000 +++ b/src/gaimrc.c Fri Aug 02 04:52:48 2002 +0000 @@ -993,9 +993,7 @@ int i; struct away_message *a; - misc_options = - OPT_MISC_BUDDY_TICKER | - OPT_MISC_COOL_LOOK; + misc_options = OPT_MISC_COOL_LOOK; logging_options = 0; @@ -1006,6 +1004,7 @@ OPT_BLIST_SHOW_GRPNUM | OPT_BLIST_SHOW_PIXMAPS | OPT_BLIST_SHOW_IDLETIME | + OPT_BLIST_GREY_IDLERS | OPT_BLIST_SHOW_BUTTON_XPM; convo_options = @@ -1019,13 +1018,15 @@ im_options = OPT_IM_POPUP | OPT_IM_LOGON | - OPT_IM_BUTTON_XPM; + OPT_IM_BUTTON_XPM | + OPT_IM_ONE_WINDOW ; chat_options = OPT_CHAT_LOGON | OPT_CHAT_POPUP | OPT_CHAT_BUTTON_XPM | - OPT_CHAT_TAB_COMPLETE; + OPT_CHAT_TAB_COMPLETE | + OPT_CHAT_ONE_WINDOW; font_options = 0; diff -r 120e08ea5aee -r 3b00d97d59aa src/multi.c --- a/src/multi.c Fri Aug 02 04:49:23 2002 +0000 +++ b/src/multi.c Fri Aug 02 04:52:48 2002 +0000 @@ -1155,7 +1155,7 @@ refresh_buddy_window(); #endif - update_connection_dependent_prefs(); + update_privacy_connections(); do_away_menu(); do_proto_menu(); redo_convo_menus(); @@ -1454,7 +1454,7 @@ if (connections) set_user_state(online); #endif - update_connection_dependent_prefs(); + update_privacy_connections(); if (connections) return; diff -r 120e08ea5aee -r 3b00d97d59aa src/sound.c --- a/src/sound.c Fri Aug 02 04:49:23 2002 +0000 +++ b/src/sound.c Fri Aug 02 04:52:48 2002 +0000 @@ -73,6 +73,12 @@ {NULL, 0, RedAlert, sizeof(RedAlert)}, {N_("Someone says your name in chat"), OPT_SOUND_CHAT_NICK, Receive, sizeof(Receive)} }; +int sound_order[] = { + SND_BUDDY_ARRIVE, SND_BUDDY_LEAVE, + SND_FIRST_RECEIVE, SND_RECEIVE, SND_SEND, + SND_CHAT_JOIN, SND_CHAT_LEAVE, + SND_CHAT_YOU_SAY, SND_CHAT_SAY, SND_CHAT_NICK, 0 +}; static int check_dev(char *dev) { diff -r 120e08ea5aee -r 3b00d97d59aa src/ui.h --- a/src/ui.h Fri Aug 02 04:49:23 2002 +0000 +++ b/src/ui.h Fri Aug 02 04:52:48 2002 +0000 @@ -33,7 +33,7 @@ #ifdef USE_GNOME #include #endif -#if USE_PIXBUF +#if USE_PIXBUF || GTK_CHECK_VERSION(1,3,0) #include #endif @@ -180,12 +180,16 @@ /* something to distinguish */ gboolean is_chat; -#if USE_PIXBUF +#if USE_PIXBUF || GTK_CHECK_VERSION(1,3,0) /* buddy icon stuff. sigh. */ GtkWidget *icon; GdkPixbufAnimation *anim; guint32 icon_timer; + #if GTK_CHECK_VERSION(1,3,0) + GdkPixbufAnimationIter *iter; + #else int frame; + #endif GtkWidget *save_icon; #endif }; @@ -303,6 +307,8 @@ extern GdkColor bgcolor; extern GdkColor fgcolor; extern int smiley_array[FACE_TOTAL]; +extern GtkWidget *fgcseld; +extern GtkWidget *bgcseld; /* Globals in prefs.c */ extern struct debug_window *dw; @@ -458,7 +464,14 @@ extern void aol_icon(GdkWindow *); extern GtkWidget *picture_button(GtkWidget *, char *, char **); extern GtkWidget *picture_button2(GtkWidget *, char *, char **, short); +#if GTK_CHECK_VERSION(1,3,0) || GTK_CHECK_VERSION(1,3,0) +extern GtkWidget *pixbuf_button(char *, char *); +#endif extern int file_is_dir(const char *, GtkWidget *); +extern void update_privacy_connections(); +extern void show_privacy_options(); +extern void build_allow_list(); +extern void build_block_list(); /* Functions in multi.c */ extern void account_editor(GtkWidget *, GtkWidget *); @@ -476,13 +489,16 @@ extern void update_color(GtkWidget *, GtkWidget *); extern void set_default_away(GtkWidget *, gpointer); extern void default_away_menu_init(GtkWidget *); -extern void update_connection_dependent_prefs(); extern void build_allow_list(); extern void build_block_list(); extern GtkWidget *prefs_away_list; extern GtkWidget *prefs_away_menu; extern GtkWidget *pref_fg_picture; extern GtkWidget *pref_bg_picture; +extern void apply_font_dlg(GtkWidget *, GtkWidget *); +extern void apply_color_dlg(GtkWidget *, gpointer); +extern void destroy_colorsel(GtkWidget *, gpointer); + /* Functions in prpl.c */ extern void register_dialog();