Yo.
gtk1-stable
v0_59_9
2003-03-01, Sean Egan
* Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "pixmaps/gnome_preferences.xpm" #include "pixmaps/cancel.xpm" #include "pixmaps/save.xpm" #include "pixmaps/ok.xpm" #include "pixmaps/add.xpm" #include "pixmaps/warn.xpm" #include "pixmaps/close.xpm" #include "pixmaps/angel.xpm" #include "pixmaps/bigsmile.xpm" #include "pixmaps/burp.xpm" #include "pixmaps/crossedlips.xpm" #include "pixmaps/cry.xpm" #include "pixmaps/embarrassed.xpm" #include "pixmaps/kiss.xpm" #include "pixmaps/moneymouth.xpm" #include "pixmaps/sad.xpm" #include "pixmaps/scream.xpm" #include "pixmaps/smile.xpm" #include "pixmaps/smile8.xpm" #include "pixmaps/think.xpm" #include "pixmaps/tongue.xpm" #include "pixmaps/wink.xpm" #include "pixmaps/yell.xpm" #include "pixmaps/aimicon.xpm" #include "pixmaps/aol_icon.xpm" #include "pixmaps/free_icon.xpm" #include "pixmaps/dt_icon.xpm" #include "pixmaps/admin_icon.xpm" #include "pixmaps/ab.xpm" #include "pixmaps/wireless_icon.xpm" #include "pixmaps/gnomeicu-online.xpm" int smiley_array[FACE_TOTAL]; static GtkWidget *imdialog = NULL; /*I only want ONE of these :) */ static GList *dialogwindows = NULL; static GtkWidget *importdialog; static struct gaim_connection *importgc; static GtkWidget *icondlg; static GtkWidget *aliasdlg = NULL; static GtkWidget *aliasentry = NULL; static GtkWidget *aliasname = NULL; static GtkWidget *rename_dialog = NULL; static GtkWidget *rename_bud_dialog = NULL; struct gaim_connection *gc; struct away_message *mess; struct gaim_connection *gc; GtkWidget *entry_for_alias; struct gaim_connection *gc; struct gaim_connection *gc; struct buddy_pounce *buddy_pounce; struct gaim_connection *gc; struct gaim_connection *gc; struct gaim_connection *gc; struct gaim_connection *gc; static GSList *info_dlgs = NULL; static struct info_dlg *find_info_dlg(struct gaim_connection *gc, char *who) struct info_dlg *d = i->data; if (!g_strcasecmp(normalize(who), d->who)) struct gaim_connection *gc; struct gaim_connection *gc; /*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/ static gint delete_event_dialog(GtkWidget *w, GdkEventAny *e, struct conversation *c) object_data = gtk_object_get_user_data(GTK_OBJECT(w)); if (GTK_IS_COLOR_SELECTION_DIALOG(w)) { if (w == c->fg_color_dialog) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->fgcolorbtn), FALSE); c->fg_color_dialog = NULL; gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->bgcolorbtn), FALSE); c->bg_color_dialog = NULL; } else if (GTK_IS_FONT_SELECTION_DIALOG(w)) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->font), FALSE); } else if (!g_strcasecmp(object_data, "smiley dialog")) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->smiley), FALSE); } else if (!g_strcasecmp(object_data, "log dialog")) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->wood), FALSE); dialogwindows = g_list_remove(dialogwindows, w); static void destroy_dialog(GtkWidget *w, GtkWidget *w2) if (dest == importdialog) { if (dest == rename_dialog) if (dest == rename_bud_dialog) rename_bud_dialog = NULL; dialogwindows = g_list_remove(dialogwindows, dest); gtk_widget_destroy(dest); void destroy_all_dialogs() destroy_dialog(NULL, dialogwindows->data); destroy_dialog(NULL, imdialog); destroy_dialog(NULL, importdialog); destroy_dialog(NULL, icondlg); static void do_warn(GtkWidget *widget, struct warning *w) serv_warn(w->gc, w->who, (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w->anon))) ? 1 : 0); destroy_dialog(NULL, w->window); static void free_warn_data(GtkObject *obj, struct warning *w) void show_warn_dialog(struct gaim_connection *gc, char *who) struct warning *w = g_new0(struct warning, 1); dialogwindows = g_list_prepend(dialogwindows, w->window); gtk_window_set_wmclass(GTK_WINDOW(w->window), "warning", "Gaim"); gtk_window_set_policy(GTK_WINDOW(w->window), FALSE, FALSE, TRUE); gtk_window_set_title(GTK_WINDOW(w->window), _("Gaim - Warn user?")); gtk_container_set_border_width(GTK_CONTAINER(w->window), 5); gtk_signal_connect(GTK_OBJECT(w->window), "delete_event", GTK_SIGNAL_FUNC(destroy_dialog), w->window); gtk_signal_connect(GTK_OBJECT(w->window), "delete_event", GTK_SIGNAL_FUNC(free_warn_data), w); gtk_widget_realize(w->window); aol_icon(w->window->window); fbox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(w->window), fbox); frame = gtk_frame_new(_("Warn")); gtk_box_pack_start(GTK_BOX(fbox), frame, FALSE, FALSE, 5); vbox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(frame), vbox); g_snprintf(buf, 127, _("Do you really want to warn %s?"), who); label = gtk_label_new(buf); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5); w->anon = gtk_check_button_new_with_label(_("Warn anonymously?")); gtk_box_pack_start(GTK_BOX(vbox), w->anon, TRUE, TRUE, 5); gtk_widget_show(w->anon); label = gtk_label_new(_("Anonymous warnings are less harsh.")); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 5); bbox = gtk_hbox_new(TRUE, 10); gtk_box_pack_start(GTK_BOX(fbox), bbox, FALSE, FALSE, 5); cancel = picture_button(w->window, _("Cancel"), cancel_xpm); gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 5); gtk_signal_connect(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), w->window); warn = picture_button(w->window, _("Warn"), warn_xpm); gtk_box_pack_end(GTK_BOX(bbox), warn, FALSE, FALSE, 5); gtk_signal_connect(GTK_OBJECT(warn), "clicked", GTK_SIGNAL_FUNC(do_warn), w); gtk_widget_show(w->window); void do_remove_buddy(GtkWidget *w, struct buddy *b) struct group *g = find_group_by_buddy(b->gc, b->name); struct gaim_connection *gc = b->gc; debug_printf(_("Removing '%s' from buddylist.\n"), b->name); serv_remove_buddy(b->gc, b->name, g->name); cv = find_conversation(b->name); update_convo_add_button(cv); void show_confirm_del(struct gaim_connection *gc, gchar *name) struct confirm_del *b = g_new0(struct confirm_del, 1); dialogwindows = g_list_prepend(dialogwindows, b->window); g_snprintf(tmp, sizeof(tmp), _("Gaim - Remove %s?"), name); gtk_window_set_title(GTK_WINDOW(b->window), tmp); gtk_window_set_wmclass(GTK_WINDOW(b->window), "confirm_del", "Gaim"); gtk_window_set_policy(GTK_WINDOW(b->window), FALSE, FALSE, TRUE); gtk_signal_connect(GTK_OBJECT(b->window), "delete_event", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_widget_realize(b->window); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(b->window), vbox); frame = gtk_frame_new(_("Remove Buddy")); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(frame), 5); fbox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(frame), fbox); gtk_container_set_border_width(GTK_CONTAINER(fbox), 5); g_snprintf(tmp, sizeof(tmp), _("You are about to remove '%s' from\nyour buddylist. Do you want to continue?"), name); b->label = gtk_label_new(tmp); gtk_misc_set_alignment(GTK_MISC(b->label), 0, 0.5); gtk_label_set_justify(GTK_LABEL(b->label), GTK_JUSTIFY_LEFT); gtk_box_pack_start(GTK_BOX(fbox), b->label, FALSE, FALSE, 0); gtk_widget_show(b->label); hbox = gtk_hbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(hbox), 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, FALSE, 0); b->ok = picture_button(b->window, _("Accept"), ok_xpm); gtk_box_pack_start(GTK_BOX(hbox), b->ok, FALSE, FALSE, 5); bd = find_buddy(gc, name); gtk_signal_connect(GTK_OBJECT(b->ok), "clicked", GTK_SIGNAL_FUNC(do_remove_buddy), bd); gtk_signal_connect(GTK_OBJECT(b->ok), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), b->window); b->cancel = picture_button(b->window, _("Cancel"), cancel_xpm); gtk_box_pack_start(GTK_BOX(hbox), b->cancel, FALSE, FALSE, 5); gtk_signal_connect(GTK_OBJECT(b->cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_widget_show(b->window); /*------------------------------------------------------------------------*/ /* The dialog for getting an error */ /*------------------------------------------------------------------------*/ GtkWidget *do_error_dialog(char *message, char *title) gtk_window_set_policy(GTK_WINDOW(d), FALSE, FALSE, TRUE); label = gtk_label_new(message); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->vbox), label, FALSE, FALSE, 5); close = picture_button(d, _("Close"), cancel_xpm); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(d)->action_area), close, FALSE, FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(d), 5); gtk_window_set_title(GTK_WINDOW(d), title); gtk_signal_connect(GTK_OBJECT(close), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), d); gtk_widget_grab_focus(close); static void do_im(GtkWidget *widget, GtkWidget *imentry) who = g_strdup(gtk_entry_get_text(GTK_ENTRY(imentry))); destroy_dialog(NULL, imdialog); if (!g_strcasecmp(who, "")) { c = find_conversation(who); c = new_conversation(who); gdk_window_raise(c->window->window); static void do_info(GtkWidget *widget, struct getuserinfo *info) who = g_strdup(normalize(gtk_entry_get_text(GTK_ENTRY(info->entry)))); destroy_dialog(NULL, info->window); if (!g_strcasecmp(who, "")) { /* what do we want to do about this case? */ serv_get_info(info->gc, who); void show_ee_dialog(int ee) gtk_widget_realize(eedialog); ok = picture_button(eedialog, _("OK"), ok_xpm); box = gtk_vbox_new(FALSE, 10); label = gtk_label_new("Amazing! Simply Amazing!"); label = gtk_label_new("Pimpin\' Penguin Style! *Waddle Waddle*"); label = gtk_label_new("You should be me. I'm so cute!"); label = gtk_label_new("Now that's what I like!"); label = gtk_label_new("Ahh, and excellent choice!"); label = gtk_label_new("Everytime you click my name, an angel gets its wings."); label = gtk_label_new("This sunflower seed taste like pizza."); label = gtk_label_new("Hey! I was in that tumbleweed!"); gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 10); gtk_box_pack_start(GTK_BOX(box), ok, FALSE, FALSE, 10); gtk_container_add(GTK_CONTAINER(eedialog), box); gtk_window_set_title(GTK_WINDOW(eedialog), "Gaim - SUPRISE!"); gtk_signal_connect(GTK_OBJECT(ok), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), eedialog); gtk_widget_realize(eedialog); aol_icon(eedialog->window); gtk_widget_show(eedialog); gtk_window_set_wmclass(GTK_WINDOW(imdialog), "imdialog", "Gaim"); gtk_window_set_policy(GTK_WINDOW(imdialog), FALSE, TRUE, TRUE); gtk_window_set_title(GTK_WINDOW(imdialog), _("Gaim - IM user")); gtk_signal_connect(GTK_OBJECT(imdialog), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), imdialog); gtk_widget_realize(imdialog); aol_icon(imdialog->window); mainbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(mainbox), 5); gtk_container_add(GTK_CONTAINER(imdialog), mainbox); frame = gtk_frame_new(_("Send Instant Message")); gtk_box_pack_start(GTK_BOX(mainbox), frame, TRUE, TRUE, 0); fbox = gtk_hbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(fbox), 5); gtk_container_add(GTK_CONTAINER(frame), fbox); label = gtk_label_new(_("IM who:")); gtk_box_pack_start(GTK_BOX(fbox), label, FALSE, FALSE, 0); imentry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(fbox), imentry, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(imentry), "activate", GTK_SIGNAL_FUNC(do_im), imentry); gtk_widget_grab_focus(imentry); bbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(mainbox), bbox, FALSE, FALSE, 0); button = picture_button(imdialog, _("Cancel"), cancel_xpm); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), imdialog); button = picture_button(imdialog, _("OK"), ok_xpm); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_im), imentry); gtk_widget_show_all(imdialog); void show_info_select_account(GtkObject *w, struct gaim_connection *gc) struct getuserinfo *info = gtk_object_get_user_data(w); struct gaim_connection *c; struct getuserinfo *info = g_new0(struct getuserinfo, 1); info->gc = connections->data; GAIM_DIALOG(info->window); gtk_window_set_wmclass(GTK_WINDOW(info->window), "infodialog", "Gaim"); gtk_window_set_policy(GTK_WINDOW(info->window), FALSE, TRUE, TRUE); gtk_widget_realize(info->window); mainbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(mainbox), 5); gtk_container_add(GTK_CONTAINER(info->window), mainbox); frame = gtk_frame_new(_("Get User Info")); gtk_box_pack_start(GTK_BOX(mainbox), frame, TRUE, TRUE, 0); table = gtk_table_new(2, 2, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 5); gtk_table_set_col_spacings(GTK_TABLE(table), 5); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_container_add(GTK_CONTAINER(frame), table); label = gtk_label_new(_("User:")); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); info->entry = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table), info->entry, 1, 2, 0, 1); label = gtk_label_new(_("Account:")); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); info->account = gtk_option_menu_new(); gtk_table_attach_defaults(GTK_TABLE(table), info->account, 1, 2, 1, 2); c = (struct gaim_connection *)g->data; g_snprintf(buf, sizeof(buf), "%s (%s)", c->username, c->prpl->name()); opt = gtk_menu_item_new_with_label(buf); gtk_object_set_user_data(GTK_OBJECT(opt), info); gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(show_info_select_account), c); gtk_menu_append(GTK_MENU(menu), opt); gtk_option_menu_set_menu(GTK_OPTION_MENU(info->account), menu); gtk_widget_show(info->account); /* Handle closes right */ gtk_signal_connect(GTK_OBJECT(info->entry), "activate", GTK_SIGNAL_FUNC(do_info), info); gtk_signal_connect(GTK_OBJECT(info->window), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), info->window); bbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(mainbox), bbox, FALSE, FALSE, 0); button = picture_button(info->window, _("Cancel"), cancel_xpm); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), info->window); button = picture_button(info->window, _("OK"), ok_xpm); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_info), info); gtk_window_set_title(GTK_WINDOW(info->window), _("Gaim - Get User Info")); gtk_widget_grab_focus(info->entry); aol_icon(info->window->window); gtk_widget_show_all(info->window); /*------------------------------------------------------------------------*/ /* The dialog for adding buddies */ /*------------------------------------------------------------------------*/ extern void add_callback(GtkWidget *, struct conversation *); void do_add_buddy(GtkWidget *w, struct addbuddy *a) char *grp, *who, *whoalias; who = gtk_entry_get_text(GTK_ENTRY(a->entry)); grp = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(a->combo)->entry)); whoalias = gtk_entry_get_text(GTK_ENTRY(a->entry_for_alias)); c = find_conversation(who); add_buddy(a->gc, grp, who, whoalias); serv_add_buddy(a->gc, who); update_buttons_by_protocol(c); destroy_dialog(NULL, a->window); void do_add_group(GtkWidget *w, struct addbuddy *a) grp = gtk_entry_get_text(GTK_ENTRY(a->entry)); a->gc = connections->data; destroy_dialog(NULL, a->window); static GList *groups_tree(struct gaim_connection *gc) GSList *grp = gc->groups; tmp2 = g_strdup(_("Buddies")); tmp = g_list_append(tmp, tmp2); g = (struct group *)grp->data; tmp = g_list_append(tmp, tmp2); static void free_dialog(GtkWidget *w, struct addbuddy *a) void show_add_group(struct gaim_connection *gc) struct addbuddy *a = g_new0(struct addbuddy, 1); gtk_window_set_wmclass(GTK_WINDOW(a->window), "add_group", "Gaim"); gtk_window_set_policy(GTK_WINDOW(a->window), FALSE, FALSE, TRUE); gtk_widget_realize(a->window); dialogwindows = g_list_prepend(dialogwindows, a->window); bbox = gtk_hbox_new(TRUE, 10); topbox = gtk_hbox_new(FALSE, 5); vbox = gtk_vbox_new(FALSE, 5); a->entry = gtk_entry_new(); /* Put the buttons in the box */ add = picture_button(a->window, _("Add"), add_xpm); cancel = picture_button(a->window, _("Cancel"), cancel_xpm); gtk_box_pack_start(GTK_BOX(bbox), add, FALSE, FALSE, 5); gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 5); frame = gtk_frame_new(NULL); gtk_frame_set_label(GTK_FRAME(frame), _("Add Group")); label = gtk_label_new(_("Group")); gtk_box_pack_start(GTK_BOX(topbox), label, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(topbox), a->entry, FALSE, FALSE, 5); /* And the boxes in the box */ gtk_box_pack_start(GTK_BOX(vbox), topbox, TRUE, TRUE, 5); gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 5); /* Handle closes right */ gtk_signal_connect(GTK_OBJECT(a->window), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), a->window); gtk_signal_connect(GTK_OBJECT(a->window), "destroy", GTK_SIGNAL_FUNC(free_dialog), a); gtk_signal_connect(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), a->window); gtk_signal_connect(GTK_OBJECT(add), "clicked", GTK_SIGNAL_FUNC(do_add_group), a); gtk_signal_connect(GTK_OBJECT(a->entry), "activate", GTK_SIGNAL_FUNC(do_add_group), a); gtk_widget_show(a->entry); gtk_window_set_title(GTK_WINDOW(a->window), _("Gaim - Add Group")); gtk_window_set_focus(GTK_WINDOW(a->window), a->entry); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_add(GTK_CONTAINER(a->window), frame); gtk_container_set_border_width(GTK_CONTAINER(a->window), 5); gtk_widget_realize(a->window); aol_icon(a->window->window); gtk_widget_show(a->window); static void addbuddy_select_account(GtkObject *w, struct gaim_connection *gc) struct addbuddy *b = gtk_object_get_user_data(w); /* We also want to update our group list */ gtk_combo_set_popdown_strings(GTK_COMBO(b->combo), groups_tree(gc)); static void create_online_user_names(struct addbuddy *b) char buf[2048]; /* Never hurts to be safe ;-) */ struct gaim_connection *c; c = (struct gaim_connection *)g->data; g_snprintf(buf, sizeof(buf), "%s (%s)", c->username, c->prpl->name()); opt = gtk_menu_item_new_with_label(buf); gtk_object_set_user_data(GTK_OBJECT(opt), b); gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(addbuddy_select_account), gtk_menu_append(GTK_MENU(menu), opt); /* Now check to see if it's our current menu */ gtk_menu_item_activate(GTK_MENU_ITEM(opt)); gtk_option_menu_set_history(GTK_OPTION_MENU(b->account), count); gtk_option_menu_remove_menu(GTK_OPTION_MENU(b->account)); gtk_option_menu_set_menu(GTK_OPTION_MENU(b->account), menu); gtk_option_menu_set_history(GTK_OPTION_MENU(b->account), place); gtk_widget_show(b->account); gtk_widget_show(b->account->parent); void show_add_buddy(struct gaim_connection *gc, char *buddy, char *group, char *alias) struct addbuddy *a = g_new0(struct addbuddy, 1); a->gc = gc ? gc : connections->data; gtk_window_set_wmclass(GTK_WINDOW(a->window), "add_buddy", "Gaim"); gtk_window_set_policy(GTK_WINDOW(a->window), FALSE, FALSE, TRUE); gtk_window_set_title(GTK_WINDOW(a->window), _("Gaim - Add Buddy")); gtk_widget_realize(a->window); aol_icon(a->window->window); gtk_signal_connect(GTK_OBJECT(a->window), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), a->window); gtk_signal_connect(GTK_OBJECT(a->window), "destroy", GTK_SIGNAL_FUNC(free_dialog), a); dialogwindows = g_list_prepend(dialogwindows, a->window); mainbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(mainbox), 5); gtk_container_add(GTK_CONTAINER(a->window), mainbox); frame = gtk_frame_new(_("Add Buddy")); gtk_box_pack_start(GTK_BOX(mainbox), frame, TRUE, TRUE, 0); table = gtk_table_new(4, 2, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 5); gtk_table_set_col_spacings(GTK_TABLE(table), 5); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_container_add(GTK_CONTAINER(frame), table); label = gtk_label_new(_("Contact")); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); a->entry = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table), a->entry, 1, 2, 0, 1); gtk_widget_grab_focus(a->entry); gtk_entry_set_text(GTK_ENTRY(a->entry), buddy); gtk_signal_connect(GTK_OBJECT(a->entry), "activate", GTK_SIGNAL_FUNC(do_add_buddy), a); label = gtk_label_new(_("Alias")); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); a->entry_for_alias = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table), a->entry_for_alias, 1, 2, 1, 2); gtk_entry_set_text(GTK_ENTRY(a->entry_for_alias), alias); label = gtk_label_new(_("Group")); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3); a->combo = gtk_combo_new(); gtk_combo_set_popdown_strings(GTK_COMBO(a->combo), groups_tree(a->gc)); gtk_table_attach_defaults(GTK_TABLE(table), a->combo, 1, 2, 2, 3); /* Set up stuff for the account box */ label = gtk_label_new(_("Add To")); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 3, 4); a->account = gtk_option_menu_new(); gtk_table_attach_defaults(GTK_TABLE(table), a->account, 1, 2, 3, 4); create_online_user_names(a); bbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(mainbox), bbox, TRUE, TRUE, 0); cancel = picture_button(a->window, _("Cancel"), cancel_xpm); gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), a->window); add = picture_button(a->window, _("Add"), add_xpm); gtk_box_pack_end(GTK_BOX(bbox), add, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(add), "clicked", GTK_SIGNAL_FUNC(do_add_buddy), a); gtk_widget_show_all(a->window); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(a->combo)->entry), group); /*------------------------------------------------------------------------*/ /* The dialog for new buddy pounces */ /*------------------------------------------------------------------------*/ void do_new_bp(GtkWidget *w, struct addbp *b) if (strlen(gtk_entry_get_text(GTK_ENTRY(b->nameentry))) == 0) { do_error_dialog(_("Please enter a buddy to pounce."), _("Buddy Pounce Error")); bp = g_new0(struct buddy_pounce, 1); g_snprintf(bp->name, 80, "%s", gtk_entry_get_text(GTK_ENTRY(b->nameentry))); g_snprintf(bp->message, 2048, "%s", gtk_entry_get_text(GTK_ENTRY(b->messentry))); g_snprintf(bp->command, 2048, "%s", gtk_entry_get_text(GTK_ENTRY(b->commentry))); g_snprintf(bp->sound, 2048, "%s", gtk_entry_get_text(GTK_ENTRY(b->soundentry))); g_snprintf(bp->pouncer, 80, "%s", b->user->username); bp->protocol = b->user->protocol; if (GTK_TOGGLE_BUTTON(b->popupnotify)->active) bp->options |= OPT_POUNCE_NOTIFY; if (GTK_TOGGLE_BUTTON(b->openwindow)->active) bp->options |= OPT_POUNCE_POPUP; if (GTK_TOGGLE_BUTTON(b->sendim)->active) bp->options |= OPT_POUNCE_SEND_IM; if (GTK_TOGGLE_BUTTON(b->command)->active) bp->options |= OPT_POUNCE_COMMAND; if (GTK_TOGGLE_BUTTON(b->sound)->active) bp->options |= OPT_POUNCE_SOUND; if (GTK_TOGGLE_BUTTON(b->p_signon)->active) bp->options |= OPT_POUNCE_SIGNON; if (GTK_TOGGLE_BUTTON(b->p_unaway)->active) bp->options |= OPT_POUNCE_UNAWAY; if (GTK_TOGGLE_BUTTON(b->p_unidle)->active) bp->options |= OPT_POUNCE_UNIDLE; if (GTK_TOGGLE_BUTTON(b->p_typing)->active) bp->options |= OPT_POUNCE_TYPING; if (GTK_TOGGLE_BUTTON(b->save)->active) bp->options |= OPT_POUNCE_SAVE; buddy_pounces = g_list_append(buddy_pounces, bp); destroy_dialog(NULL, b->window); static void pounce_choose(GtkWidget *opt, struct addbp *b) struct aim_user *u = gtk_object_get_user_data(GTK_OBJECT(opt)); static GtkWidget *pounce_user_menu(struct addbp *b, struct gaim_connection *gc) optmenu = gtk_option_menu_new(); a = (struct aim_user *)u->data; p = (struct prpl *)find_prpl(a->protocol); g_snprintf(buf, sizeof buf, "%s (%s)", a->username, (p && p->name)?p->name():"Unknown"); opt = gtk_menu_item_new_with_label(buf); gtk_object_set_user_data(GTK_OBJECT(opt), a); gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(pounce_choose), b); gtk_menu_append(GTK_MENU(menu), opt); gtk_menu_item_activate(GTK_MENU_ITEM(opt)); gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), place); void show_new_bp(char *name, struct gaim_connection *gc, int idle, int away, struct buddy_pounce *edit_bp) struct addbp *b = g_new0(struct addbp, 1); b->buddy_pounce = edit_bp; b->user = find_user(edit_bp->pouncer, edit_bp->protocol); b->user = gc ? gc->user : aim_users->data; dialogwindows = g_list_prepend(dialogwindows, b->window); gtk_window_set_policy(GTK_WINDOW(b->window), FALSE, TRUE, TRUE); gtk_window_set_wmclass(GTK_WINDOW(b->window), "new_bp", "Gaim"); gtk_window_set_title(GTK_WINDOW(b->window), _("Gaim - New Buddy Pounce")); gtk_signal_connect(GTK_OBJECT(b->window), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_widget_realize(b->window); aol_icon(b->window->window); vbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); gtk_container_add(GTK_CONTAINER(b->window), vbox); /* <pounce type="who"> */ frame = gtk_frame_new(_("Pounce Who")); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); gtk_widget_show(GTK_WIDGET(frame)); table = gtk_table_new(2, 2, FALSE); gtk_container_add(GTK_CONTAINER(frame), table); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_table_set_col_spacings(GTK_TABLE(table), 5); gtk_table_set_row_spacings(GTK_TABLE(table), 5); label = gtk_label_new(_("Account")); gtk_misc_set_alignment(GTK_MISC(label), 0, .5); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); optmenu = pounce_user_menu(b, gc); gtk_table_attach(GTK_TABLE(table), optmenu, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); gtk_widget_show(optmenu); label = gtk_label_new(_("Buddy")); gtk_misc_set_alignment(GTK_MISC(label), 0, .5); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); b->nameentry = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), b->nameentry, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); gtk_entry_set_text(GTK_ENTRY(b->nameentry), name); gtk_entry_set_text(GTK_ENTRY(b->nameentry), edit_bp->name); gtk_window_set_focus(GTK_WINDOW(b->window), b->nameentry); gtk_widget_show(b->nameentry); /* </pounce type="who"> */ /* <pounce type="when"> */ frame = gtk_frame_new(_("Pounce When")); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); gtk_widget_show(GTK_WIDGET(frame)); table = gtk_table_new(2, 2, FALSE); gtk_container_add(GTK_CONTAINER(frame), table); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_table_set_col_spacings(GTK_TABLE(table), 5); b->p_signon = gtk_check_button_new_with_label(_("Pounce on sign on")); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->p_signon), (edit_bp->options & OPT_POUNCE_SIGNON) ? TRUE : FALSE); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->p_signon), TRUE); gtk_table_attach(GTK_TABLE(table), b->p_signon, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); gtk_widget_show(b->p_signon); b->p_unaway = gtk_check_button_new_with_label(_("Pounce on return from away")); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->p_unaway), TRUE); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->p_unaway), (edit_bp->options & OPT_POUNCE_UNAWAY) ? TRUE : FALSE); gtk_table_attach(GTK_TABLE(table), b->p_unaway, 1, 2, 0, 1, GTK_FILL | GTK_EXPAND, 0, 0, 0); gtk_widget_show(b->p_unaway); b->p_unidle = gtk_check_button_new_with_label(_("Pounce on return from idle")); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->p_unidle), TRUE); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->p_unidle), (edit_bp->options & OPT_POUNCE_UNIDLE) ? TRUE : FALSE); gtk_table_attach(GTK_TABLE(table), b->p_unidle, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); gtk_widget_show(b->p_unidle); b->p_typing = gtk_check_button_new_with_label(_("Pounce when buddy is typing to you")); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->p_typing), (edit_bp->options & OPT_POUNCE_TYPING) ? TRUE : FALSE); gtk_table_attach(GTK_TABLE(table), b->p_typing,1,2,1,2, GTK_FILL | GTK_EXPAND, 0, 0, 0); gtk_widget_show(b->p_typing); /* </pounce type="when"> */ /* <pounce type="action"> */ frame = gtk_frame_new(_("Pounce Action")); gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 0); gtk_widget_show(GTK_WIDGET(frame)); table = gtk_table_new(4, 2, FALSE); gtk_container_add(GTK_CONTAINER(frame), table); gtk_container_set_border_width(GTK_CONTAINER(table), 5); gtk_table_set_col_spacings(GTK_TABLE(table), 5); gtk_table_set_row_spacings(GTK_TABLE(table), 5); b->openwindow = gtk_check_button_new_with_label(_("Open IM Window")); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->openwindow), (edit_bp->options & OPT_POUNCE_POPUP) ? TRUE : FALSE); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->openwindow), FALSE); gtk_table_attach(GTK_TABLE(table), b->openwindow, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); gtk_widget_show(b->openwindow); b->popupnotify = gtk_check_button_new_with_label(_("Popup Notification")); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->popupnotify), (edit_bp->options & OPT_POUNCE_NOTIFY) ? TRUE : FALSE); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->popupnotify), FALSE); gtk_table_attach(GTK_TABLE(table), b->popupnotify, 1, 2, 0, 1, GTK_FILL, 0, 0, 0); gtk_widget_show(b->popupnotify); b->sendim = gtk_check_button_new_with_label(_("Send Message")); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->sendim), (edit_bp->options & OPT_POUNCE_SEND_IM) ? TRUE : FALSE); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->sendim), TRUE); gtk_table_attach(GTK_TABLE(table), b->sendim, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); gtk_widget_show(b->sendim); b->messentry = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), b->messentry, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0); gtk_signal_connect(GTK_OBJECT(b->messentry), "activate", GTK_SIGNAL_FUNC(do_new_bp), b); gtk_widget_set_sensitive(GTK_WIDGET(b->messentry), (edit_bp->options & OPT_POUNCE_SEND_IM) ? TRUE : FALSE); gtk_entry_set_text(GTK_ENTRY(b->messentry), edit_bp->message); gtk_widget_show(b->messentry); gtk_signal_connect(GTK_OBJECT(b->sendim), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), b->messentry); b->command = gtk_check_button_new_with_label(_("Execute command on pounce")); gtk_table_attach(GTK_TABLE(table), b->command, 0, 1, 2, 3, GTK_FILL, 0, 0, 0); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->command), (edit_bp->options & OPT_POUNCE_COMMAND) ? TRUE : FALSE); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->command), FALSE); gtk_widget_show(b->command); b->commentry = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), b->commentry, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND, 0, 0, 0); gtk_signal_connect(GTK_OBJECT(b->commentry), "activate", GTK_SIGNAL_FUNC(do_new_bp), b); gtk_widget_set_sensitive(GTK_WIDGET(b->commentry), (edit_bp->options & OPT_POUNCE_COMMAND) ? TRUE : FALSE); gtk_entry_set_text(GTK_ENTRY(b->commentry), edit_bp->command); gtk_widget_set_sensitive(GTK_WIDGET(b->commentry), FALSE); gtk_widget_show(b->commentry); gtk_signal_connect(GTK_OBJECT(b->command), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), b->commentry); b->sound = gtk_check_button_new_with_label(_("Play sound on pounce")); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->sound), (edit_bp->options & OPT_POUNCE_SOUND) ? TRUE : FALSE); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->sound), FALSE); gtk_table_attach(GTK_TABLE(table), b->sound, 0, 1, 3, 4, GTK_FILL, 0, 0, 0); gtk_widget_show(b->sound); b->soundentry = gtk_entry_new(); gtk_table_attach(GTK_TABLE(table), b->soundentry, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, 0, 0, 0); gtk_signal_connect(GTK_OBJECT(b->soundentry), "activate", GTK_SIGNAL_FUNC(do_new_bp), b); gtk_widget_set_sensitive(GTK_WIDGET(b->soundentry), (edit_bp->options & OPT_POUNCE_SOUND) ? TRUE : FALSE); gtk_entry_set_text(GTK_ENTRY(b->soundentry), edit_bp->sound); gtk_widget_set_sensitive(GTK_WIDGET(b->soundentry), FALSE); gtk_widget_show(b->soundentry); gtk_signal_connect(GTK_OBJECT(b->sound), "clicked", GTK_SIGNAL_FUNC(toggle_sensitive), b->soundentry); /* </pounce type="action"> */ b->save = gtk_check_button_new_with_label(_("Save this pounce after activation")); gtk_container_set_border_width(GTK_CONTAINER(b->save), 7); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->save), (edit_bp->options & OPT_POUNCE_SAVE) ? TRUE : FALSE); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->save), FALSE); gtk_box_pack_start(GTK_BOX(vbox), b->save, FALSE, FALSE, 0); gtk_widget_show(b->save); bbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); button = picture_button(b->window, _("Cancel"), cancel_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); button = picture_button(b->window, _("OK"), ok_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_new_bp), b); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_widget_show(b->window); /*------------------------------------------------------------------------*/ /* The dialog for SET INFO / SET DIR INFO */ /*------------------------------------------------------------------------*/ void do_save_info(GtkWidget *widget, struct set_info_dlg *b) struct gaim_connection *gc; junk = gtk_editable_get_chars(GTK_EDITABLE(b->text), 0, -1); strncpy_withhtml(b->user->user_info, junk, sizeof b->user->user_info); serv_set_info(gc, b->user->user_info); destroy_dialog(NULL, b->window); void do_set_dir(GtkWidget *widget, struct set_dir_dlg *b) char *first = gtk_entry_get_text(GTK_ENTRY(b->first)); int web = GTK_TOGGLE_BUTTON(b->web)->active; char *middle = gtk_entry_get_text(GTK_ENTRY(b->middle)); char *last = gtk_entry_get_text(GTK_ENTRY(b->last)); char *maiden = gtk_entry_get_text(GTK_ENTRY(b->maiden)); char *city = gtk_entry_get_text(GTK_ENTRY(b->city)); char *state = gtk_entry_get_text(GTK_ENTRY(b->state)); char *country = gtk_entry_get_text(GTK_ENTRY(b->country)); serv_set_dir(b->gc, first, middle, last, maiden, city, state, country, web); destroy_dialog(NULL, b->window); void show_set_dir(struct gaim_connection *gc) struct set_dir_dlg *b = g_new0(struct set_dir_dlg, 1); dialogwindows = g_list_prepend(dialogwindows, b->window); gtk_window_set_wmclass(GTK_WINDOW(b->window), "set_dir", "Gaim"); gtk_window_set_policy(GTK_WINDOW(b->window), FALSE, TRUE, TRUE); gtk_window_set_title(GTK_WINDOW(b->window), _("Gaim - Set Dir Info")); gtk_signal_connect(GTK_OBJECT(b->window), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_widget_realize(b->window); aol_icon(b->window->window); fbox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(b->window), fbox); frame = gtk_frame_new(_("Directory Info")); gtk_container_set_border_width(GTK_CONTAINER(fbox), 5); gtk_box_pack_start(GTK_BOX(fbox), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); gtk_container_add(GTK_CONTAINER(frame), vbox); g_snprintf(buf, sizeof(buf), "Setting Dir Info for %s:", gc->username); label = gtk_label_new(buf); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); b->first = gtk_entry_new(); b->middle = gtk_entry_new(); b->last = gtk_entry_new(); b->maiden = gtk_entry_new(); b->city = gtk_entry_new(); b->state = gtk_entry_new(); b->country = gtk_entry_new(); b->web = gtk_check_button_new_with_label(_("Allow Web Searches To Find Your Info")); label = gtk_label_new(_("First Name")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->first, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Middle Name")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->middle, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Last Name")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->last, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Maiden Name")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->maiden, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("City")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->city, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("State")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->state, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Country")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->country, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), b->web, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(b->first); gtk_widget_show(b->middle); gtk_widget_show(b->last); gtk_widget_show(b->maiden); gtk_widget_show(b->city); gtk_widget_show(b->state); gtk_widget_show(b->country); /* And add the buttons */ bot = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(fbox), bot, FALSE, FALSE, 0); b->cancel = picture_button(b->window, _("Cancel"), cancel_xpm); gtk_box_pack_end(GTK_BOX(bot), b->cancel, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(b->cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), b->window); b->save = picture_button(b->window, _("Save"), save_xpm); gtk_box_pack_end(GTK_BOX(bot), b->save, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(b->save), "clicked", GTK_SIGNAL_FUNC(do_set_dir), b); gtk_window_set_focus(GTK_WINDOW(b->window), b->first); gtk_widget_show(b->window); void do_change_password(GtkWidget *widget, struct passwddlg *b) gchar *orig, *new1, *new2; orig = gtk_entry_get_text(GTK_ENTRY(b->original)); new1 = gtk_entry_get_text(GTK_ENTRY(b->new1)); new2 = gtk_entry_get_text(GTK_ENTRY(b->new2)); if (g_strcasecmp(new1, new2)) { do_error_dialog(_("New Passwords Do Not Match"), _("Gaim - Change Password Error")); if ((strlen(orig) < 1) || (strlen(new1) < 1) || (strlen(new2) < 1)) { do_error_dialog(_("Fill out all fields completely"), _("Gaim - Change Password Error")); serv_change_passwd(b->gc, orig, new1); destroy_dialog(NULL, b->window); void show_change_passwd(struct gaim_connection *gc) struct passwddlg *b = g_new0(struct passwddlg, 1); gtk_window_set_policy(GTK_WINDOW(b->window), FALSE, TRUE, TRUE); gtk_window_set_wmclass(GTK_WINDOW(b->window), "change_passwd", "Gaim"); gtk_window_set_title(GTK_WINDOW(b->window), _("Gaim - Password Change")); gtk_signal_connect(GTK_OBJECT(b->window), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_widget_realize(b->window); aol_icon(b->window->window); dialogwindows = g_list_prepend(dialogwindows, b->window); fbox = gtk_vbox_new(FALSE, 5); gtk_container_border_width(GTK_CONTAINER(fbox), 5); gtk_container_add(GTK_CONTAINER(b->window), fbox); frame = gtk_frame_new(_("Change Password")); gtk_box_pack_start(GTK_BOX(fbox), frame, FALSE, FALSE, 0); vbox = gtk_vbox_new(FALSE, 5); gtk_container_border_width(GTK_CONTAINER(vbox), 5); gtk_container_add(GTK_CONTAINER(frame), vbox); g_snprintf(buf, sizeof(buf), "Changing password for %s:", gc->username); label = gtk_label_new(buf); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Original Password")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); b->original = gtk_entry_new(); gtk_entry_set_visibility(GTK_ENTRY(b->original), FALSE); gtk_box_pack_end(GTK_BOX(hbox), b->original, FALSE, FALSE, 0); gtk_widget_show(b->original); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("New Password")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); b->new1 = gtk_entry_new(); gtk_entry_set_visibility(GTK_ENTRY(b->new1), FALSE); gtk_box_pack_end(GTK_BOX(hbox), b->new1, FALSE, FALSE, 0); gtk_widget_show(b->new1); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("New Password (again)")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); b->new2 = gtk_entry_new(); gtk_entry_set_visibility(GTK_ENTRY(b->new2), FALSE); gtk_box_pack_end(GTK_BOX(hbox), b->new2, FALSE, FALSE, 0); gtk_widget_show(b->new2); /* Now do our row of buttons */ hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(fbox), hbox, FALSE, FALSE, 0); b->cancel = picture_button(b->window, _("Cancel"), cancel_xpm); gtk_box_pack_end(GTK_BOX(hbox), b->cancel, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(b->cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), b->window); b->ok = picture_button(b->window, _("OK"), ok_xpm); gtk_box_pack_end(GTK_BOX(hbox), b->ok, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(b->ok), "clicked", GTK_SIGNAL_FUNC(do_change_password), b); gtk_widget_show(b->window); void show_set_info(struct gaim_connection *gc) struct set_info_dlg *b = g_new0(struct set_info_dlg, 1); gtk_window_set_wmclass(GTK_WINDOW(b->window), "set_info", "Gaim"); dialogwindows = g_list_prepend(dialogwindows, b->window); gtk_window_set_title(GTK_WINDOW(b->window), _("Gaim - Set User Info")); gtk_signal_connect(GTK_OBJECT(b->window), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_widget_realize(b->window); aol_icon(b->window->window); vbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); gtk_container_add(GTK_CONTAINER(b->window), vbox); g_snprintf(buf, 256, "Changing info for %s:", tmp->username); label = gtk_label_new(buf); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); b->text = gtk_text_new(NULL, NULL); gtk_text_set_word_wrap(GTK_TEXT(b->text), TRUE); gtk_text_set_editable(GTK_TEXT(b->text), TRUE); gtk_widget_set_usize(b->text, 300, 200); buf = g_malloc(strlen(tmp->user_info) + 1); strncpy_nohtml(buf, tmp->user_info, strlen(tmp->user_info) + 1); gtk_text_insert(GTK_TEXT(b->text), NULL, NULL, NULL, buf, -1); gtk_box_pack_start(GTK_BOX(vbox), b->text, TRUE, TRUE, 0); gtk_widget_show(b->text); gtk_window_set_focus(GTK_WINDOW(b->window), b->text); buttons = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), buttons, FALSE, FALSE, 0); gtk_widget_show(buttons); b->cancel = picture_button(b->window, _("Cancel"), cancel_xpm); gtk_box_pack_end(GTK_BOX(buttons), b->cancel, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(b->cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), b->window); b->save = picture_button(b->window, _("Save"), save_xpm); gtk_box_pack_end(GTK_BOX(buttons), b->save, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(b->save), "clicked", GTK_SIGNAL_FUNC(do_save_info), b); gtk_widget_show(b->window); /*------------------------------------------------------------------------*/ /* The dialog for the info requests */ /*------------------------------------------------------------------------*/ static void info_dlg_free(GtkWidget *b, struct info_dlg *d) if (g_slist_find(info_dlgs, d)) info_dlgs = g_slist_remove(info_dlgs, d); gchar **info_img_handler(gchar *url) if (!g_strcasecmp(url, "free_icon.gif")) if (!g_strcasecmp(url, "aol_icon.gif")) if (!g_strcasecmp(url, "dt_icon.gif")) if (!g_strcasecmp(url, "admin_icon.gif")) if (!g_strcasecmp(url, "ab_icon.gif")) if (!g_strcasecmp(url, "wireless_icon.gif")) return wireless_icon_xpm; if (!g_strcasecmp(url, "icq_icon.gif")) /* if away is 0, show regardless and try to get away message * 1, don't show if regular info isn't shown * 2, show regardless but don't try to get away message * i wish this were my client. if i were i wouldn't have to deal with this shit. void g_show_info_text(struct gaim_connection *gc, char *who, int away, char *info, ...) struct info_dlg *b = find_info_dlg(gc, who); b = g_new0(struct info_dlg, 1); b->who = who ? g_strdup(normalize(who)) : NULL; info_dlgs = g_slist_append(info_dlgs, b); gtk_window_set_title(GTK_WINDOW(b->window), "Gaim"); gtk_container_border_width(GTK_CONTAINER(b->window), 5); gtk_widget_realize(GTK_WIDGET(b->window)); gtk_signal_connect(GTK_OBJECT(b->window), "destroy", GTK_SIGNAL_FUNC(info_dlg_free), b); aol_icon(b->window->window); bbox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(b->window), bbox); label = gtk_label_new(_("Below are the results of your search: ")); gtk_box_pack_start(GTK_BOX(bbox), label, FALSE, FALSE, 0); sw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); gtk_box_pack_start(GTK_BOX(bbox), sw, TRUE, TRUE, 0); text = gtk_imhtml_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(sw), text); GTK_LAYOUT(text)->hadjustment->step_increment = 10.0; GTK_LAYOUT(text)->vadjustment->step_increment = 10.0; gtk_widget_set_usize(sw, 300, 250); gtk_imhtml_set_img_handler(GTK_IMHTML(text), info_img_handler); ok = picture_button(b->window, _("OK"), ok_xpm); gtk_signal_connect_object(GTK_OBJECT(ok), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), gtk_box_pack_start(GTK_BOX(bbox), ok, FALSE, FALSE, 0); gtk_widget_show_all(b->window); if (convo_options & OPT_CONVO_IGNORE_COLOUR) options ^= GTK_IMHTML_NO_COLOURS; if (convo_options & OPT_CONVO_IGNORE_FONTS) options ^= GTK_IMHTML_NO_FONTS; if (convo_options & OPT_CONVO_IGNORE_SIZES) options ^= GTK_IMHTML_NO_SIZES; options ^= GTK_IMHTML_NO_COMMENTS; options ^= GTK_IMHTML_NO_TITLE; options ^= GTK_IMHTML_NO_NEWLINE; options ^= GTK_IMHTML_NO_SCROLL; gtk_imhtml_append_text(GTK_IMHTML(b->text), info, -1, options); while ((more_info = va_arg(ap, char *)) != NULL) gtk_imhtml_append_text(GTK_IMHTML(b->text), more_info, -1, options); info_dlgs = g_slist_remove(info_dlgs, b); /*------------------------------------------------------------------------*/ /* The dialog for adding to permit/deny */ /*------------------------------------------------------------------------*/ static void do_add_perm(GtkWidget *w, struct addperm *p) who = gtk_entry_get_text(GTK_ENTRY(p->entry)); name = g_malloc(strlen(who) + 2); g_snprintf(name, strlen(who) + 2, "%s", who); n = g_strdup(normalize(name)); if (!g_strcasecmp(n, normalize(d->data))) p->gc->deny = g_slist_append(p->gc->deny, name); serv_add_deny(p->gc, name); GSList *d = p->gc->permit; n = g_strdup(normalize(name)); if (!g_strcasecmp(n, normalize(d->data))) p->gc->permit = g_slist_append(p->gc->permit, name); serv_add_permit(p->gc, name); destroy_dialog(NULL, p->window); void show_add_perm(struct gaim_connection *gc, char *who, gboolean permit) struct addperm *p = g_new0(struct addperm, 1); gtk_container_set_border_width(GTK_CONTAINER(p->window), 5); gtk_window_set_policy(GTK_WINDOW(p->window), FALSE, FALSE, TRUE); gtk_widget_realize(p->window); dialogwindows = g_list_prepend(dialogwindows, p->window); bbox = gtk_hbox_new(TRUE, 10); topbox = gtk_hbox_new(FALSE, 5); vbox = gtk_vbox_new(FALSE, 5); p->entry = gtk_entry_new(); frame = gtk_frame_new(_("Permit")); frame = gtk_frame_new(_("Deny")); add = picture_button(p->window, _("Permit"), add_xpm); add = picture_button(p->window, _("Deny"), add_xpm); cancel = picture_button(p->window, _("Cancel"), cancel_xpm); /* End of Cancel Button */ gtk_entry_set_text(GTK_ENTRY(p->entry), who); /* Put the buttons in the box */ gtk_box_pack_start(GTK_BOX(bbox), add, FALSE, FALSE, 5); gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 5); label = gtk_label_new(_("Add")); gtk_box_pack_start(GTK_BOX(topbox), label, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(topbox), p->entry, FALSE, FALSE, 5); /* And the boxes in the box */ gtk_box_pack_start(GTK_BOX(vbox), topbox, TRUE, TRUE, 5); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 5); gtk_container_add(GTK_CONTAINER(frame), vbox); /* Handle closes right */ gtk_signal_connect(GTK_OBJECT(p->window), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), p->window); gtk_signal_connect(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), p->window); gtk_signal_connect(GTK_OBJECT(add), "clicked", GTK_SIGNAL_FUNC(do_add_perm), p); gtk_signal_connect(GTK_OBJECT(p->entry), "activate", GTK_SIGNAL_FUNC(do_add_perm), p); gtk_widget_show(p->entry); gtk_window_set_title(GTK_WINDOW(p->window), _("Gaim - Add Permit")); gtk_window_set_title(GTK_WINDOW(p->window), _("Gaim - Add Deny")); gtk_window_set_focus(GTK_WINDOW(p->window), p->entry); gtk_container_add(GTK_CONTAINER(p->window), frame); gtk_widget_realize(p->window); aol_icon(p->window->window); gtk_widget_show(p->window); /*------------------------------------------------------------------------*/ /* Functions Called To Add A Log */ /*------------------------------------------------------------------------*/ void cancel_log(GtkWidget *widget, struct conversation *c) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->wood), FALSE); dialogwindows = g_list_remove(dialogwindows, c->log_dialog); gtk_widget_destroy(c->log_dialog); void do_log(GtkWidget *w, struct conversation *c) struct log_conversation *l; if (!find_log_info(c->name)) { file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(c->log_dialog)); strncpy(path, file, PATHSIZE - 1); if (file_is_dir(path, c->log_dialog)) { l = (struct log_conversation *)g_new0(struct log_conversation, 1); strcpy(l->name, c->name); strcpy(l->filename, file); log_conversations = g_list_append(log_conversations, l); g_snprintf(buf, sizeof(buf), LOG_CONVERSATION_TITLE, c->name); gtk_window_set_title(GTK_WINDOW(c->window), buf); void show_log_dialog(struct conversation *c) char *buf = g_malloc(BUF_LEN); c->log_dialog = gtk_file_selection_new(_("Gaim - Log Conversation")); gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(c->log_dialog)); g_snprintf(buf, BUF_LEN - 1, "%s/%s.log", getenv("HOME"), normalize(c->name)); gtk_object_set_user_data(GTK_OBJECT(c->log_dialog), "log dialog"); gtk_file_selection_set_filename(GTK_FILE_SELECTION(c->log_dialog), buf); gtk_signal_connect(GTK_OBJECT(c->log_dialog), "delete_event", GTK_SIGNAL_FUNC(delete_event_dialog), c); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(c->log_dialog)->ok_button), "clicked", GTK_SIGNAL_FUNC(do_log), c); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(c->log_dialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC(cancel_log), c); gtk_widget_show(c->log_dialog); gdk_window_raise(c->log_dialog->window); /*------------------------------------------------------*/ /* Find Buddy By Email */ /*------------------------------------------------------*/ void do_find_info(GtkWidget *w, struct findbyinfo *b) first = gtk_entry_get_text(GTK_ENTRY(b->firstentry)); middle = gtk_entry_get_text(GTK_ENTRY(b->middleentry)); last = gtk_entry_get_text(GTK_ENTRY(b->lastentry)); maiden = gtk_entry_get_text(GTK_ENTRY(b->maidenentry)); city = gtk_entry_get_text(GTK_ENTRY(b->cityentry)); state = gtk_entry_get_text(GTK_ENTRY(b->stateentry)); country = gtk_entry_get_text(GTK_ENTRY(b->countryentry)); serv_dir_search(b->gc, first, middle, last, maiden, city, state, country, ""); destroy_dialog(NULL, b->window); void do_find_email(GtkWidget *w, struct findbyemail *b) email = gtk_entry_get_text(GTK_ENTRY(b->emailentry)); serv_dir_search(b->gc, "", "", "", "", "", "", "", email); destroy_dialog(NULL, b->window); void show_find_info(struct gaim_connection *gc) struct findbyinfo *b = g_new0(struct findbyinfo, 1); gtk_window_set_policy(GTK_WINDOW(b->window), FALSE, TRUE, TRUE); gtk_window_set_wmclass(GTK_WINDOW(b->window), "find_info", "Gaim"); gtk_widget_show(b->window); dialogwindows = g_list_prepend(dialogwindows, b->window); frame = gtk_frame_new(_("Search for Buddy")); fbox = gtk_vbox_new(FALSE, 5); ok = picture_button(b->window, _("OK"), ok_xpm); cancel = picture_button(b->window, _("Cancel"), cancel_xpm); bbox = gtk_hbox_new(FALSE, 5); vbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); b->firstentry = gtk_entry_new(); b->middleentry = gtk_entry_new(); b->lastentry = gtk_entry_new(); b->maidenentry = gtk_entry_new(); b->cityentry = gtk_entry_new(); b->stateentry = gtk_entry_new(); b->countryentry = gtk_entry_new(); gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(bbox), ok, FALSE, FALSE, 0); label = gtk_label_new(_("First Name")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->firstentry, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Middle Name")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->middleentry, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Last Name")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->lastentry, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Maiden Name")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->maidenentry, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("City")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->cityentry, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("State")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->stateentry, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new(_("Country")); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_box_pack_end(GTK_BOX(hbox), b->countryentry, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_box_pack_start(GTK_BOX(fbox), frame, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(fbox), bbox, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(b->window), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_signal_connect(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_signal_connect(GTK_OBJECT(ok), "clicked", GTK_SIGNAL_FUNC(do_find_info), b); gtk_widget_show(b->firstentry); gtk_widget_show(b->middleentry); gtk_widget_show(b->lastentry); gtk_widget_show(b->maidenentry); gtk_widget_show(b->cityentry); gtk_widget_show(b->stateentry); gtk_widget_show(b->countryentry); gtk_window_set_title(GTK_WINDOW(b->window), _("Gaim - Find Buddy By Info")); gtk_window_set_focus(GTK_WINDOW(b->window), b->firstentry); gtk_container_add(GTK_CONTAINER(b->window), fbox); gtk_container_border_width(GTK_CONTAINER(b->window), 5); gtk_widget_realize(b->window); aol_icon(b->window->window); gtk_widget_show(b->window); void show_find_email(struct gaim_connection *gc) struct findbyemail *b = g_new0(struct findbyemail, 1); if (g_slist_find(connections, gc)) gtk_window_set_policy(GTK_WINDOW(b->window), FALSE, TRUE, TRUE); gtk_window_set_wmclass(GTK_WINDOW(b->window), "find_email", "Gaim"); gtk_widget_realize(b->window); aol_icon(b->window->window); dialogwindows = g_list_prepend(dialogwindows, b->window); gtk_signal_connect(GTK_OBJECT(b->window), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_window_set_title(GTK_WINDOW(b->window), _("Gaim - Find Buddy By Email")); vbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); gtk_container_add(GTK_CONTAINER(b->window), vbox); frame = gtk_frame_new(_("Search for Buddy")); gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); topbox = gtk_hbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(frame), topbox); gtk_container_set_border_width(GTK_CONTAINER(topbox), 5); label = gtk_label_new(_("Email")); gtk_box_pack_start(GTK_BOX(topbox), label, FALSE, FALSE, 0); b->emailentry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(topbox), b->emailentry, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(b->emailentry), "activate", GTK_SIGNAL_FUNC(do_find_email), b); gtk_window_set_focus(GTK_WINDOW(b->window), b->emailentry); bbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0); button = picture_button(b->window, _("Cancel"), cancel_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), b->window); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); button = picture_button(b->window, _("OK"), ok_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_find_email), b); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_widget_show_all(b->window); /*------------------------------------------------------*/ /*------------------------------------------------------*/ void cancel_link(GtkWidget *widget, struct conversation *c) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->link), FALSE); destroy_dialog(NULL, c->link_dialog); void do_add_link(GtkWidget *widget, struct linkdlg *b) char *urltext, *showtext; open_tag = g_malloc(2048); urltext = gtk_entry_get_text(GTK_ENTRY(b->url)); showtext = gtk_entry_get_text(GTK_ENTRY(b->text)); g_snprintf(open_tag, 2048, "<A HREF=\"%s\">%s", urltext, showtext); surround(b->entry, open_tag, "</A>"); destroy_dialog(NULL, b->window); void show_add_link(GtkWidget *linky, struct conversation *c) struct linkdlg *b = g_new0(struct linkdlg, 1); GAIM_DIALOG(c->link_dialog); gtk_window_set_wmclass(GTK_WINDOW(c->link_dialog), "add_link", "Gaim"); dialogwindows = g_list_prepend(dialogwindows, c->link_dialog); gtk_widget_set_usize(c->link_dialog, 270, 165); gtk_window_set_policy(GTK_WINDOW(c->link_dialog), FALSE, FALSE, TRUE); gtk_widget_show(c->link_dialog); vbox = gtk_vbox_new(FALSE, 10); bbox = gtk_hbox_new(TRUE, 10); frame = gtk_frame_new(_("Insert Link")); fbox = gtk_vbox_new(FALSE, 5); b->ok = picture_button(c->link_dialog, _("OK"), ok_xpm); b->cancel = picture_button(c->link_dialog, _("Cancel"), cancel_xpm); gtk_widget_set_usize(b->ok, 75, 30); gtk_widget_set_usize(b->cancel, 75, 30); gtk_box_pack_start(GTK_BOX(bbox), b->ok, FALSE, FALSE, 10); gtk_box_pack_end(GTK_BOX(bbox), b->cancel, FALSE, FALSE, 10); b->url = gtk_entry_new(); b->text = gtk_entry_new(); hbox = gtk_hbox_new(FALSE, 5); label = gtk_label_new(_("URL")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); gtk_box_pack_end(GTK_BOX(hbox), b->url, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); hbox = gtk_hbox_new(FALSE, 5); label = gtk_label_new(_("Description")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); gtk_box_pack_end(GTK_BOX(hbox), b->text, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5); gtk_widget_show(b->text); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_box_pack_start(GTK_BOX(fbox), frame, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(fbox), bbox, TRUE, TRUE, 5); gtk_signal_connect(GTK_OBJECT(c->link_dialog), "destroy", GTK_SIGNAL_FUNC(cancel_link), c); gtk_signal_connect(GTK_OBJECT(b->cancel), "clicked", GTK_SIGNAL_FUNC(cancel_link), c); gtk_signal_connect(GTK_OBJECT(b->ok), "clicked", GTK_SIGNAL_FUNC(do_add_link), b); gtk_container_add(GTK_CONTAINER(c->link_dialog), fbox); gtk_container_border_width(GTK_CONTAINER(c->link_dialog), 10); gtk_window_set_title(GTK_WINDOW(c->link_dialog), _("Gaim - Add URL")); gtk_window_set_focus(GTK_WINDOW(c->link_dialog), b->url); b->window = c->link_dialog; gtk_widget_realize(c->link_dialog); aol_icon(c->link_dialog->window); gtk_widget_show(c->link_dialog); gdk_window_raise(c->link_dialog->window); /*------------------------------------------------------*/ /* Color Selection Dialog */ /*------------------------------------------------------*/ static GtkWidget *fgcseld = NULL; static GtkWidget *bgcseld = NULL; void cancel_fgcolor(GtkWidget *widget, struct conversation *c) if (c->fgcolorbtn && widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->fgcolorbtn), FALSE); dialogwindows = g_list_remove(dialogwindows, c->fg_color_dialog); gtk_widget_destroy(c->fg_color_dialog); c->fg_color_dialog = NULL; void cancel_bgcolor(GtkWidget *widget, struct conversation *c) if (c->bgcolorbtn && widget) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->bgcolorbtn), FALSE); dialogwindows = g_list_remove(dialogwindows, c->bg_color_dialog); gtk_widget_destroy(c->bg_color_dialog); c->bg_color_dialog = NULL; void do_fgcolor(GtkWidget *widget, GtkColorSelection *colorsel) gtk_color_selection_get_color(colorsel, color); c = gtk_object_get_user_data(GTK_OBJECT(colorsel)); /* GTK_IS_EDITABLE(c->entry); huh? */ text_color.red = ((guint16)(color[0] * 65535)) >> 8; text_color.green = ((guint16)(color[1] * 65535)) >> 8; text_color.blue = ((guint16)(color[2] * 65535)) >> 8; g_snprintf(open_tag, 23, "<FONT COLOR=\"#%02X%02X%02X\">", text_color.red, text_color.green, surround(c->entry, open_tag, "</FONT>"); debug_printf("#%02X%02X%02X\n", text_color.red, text_color.green, text_color.blue); void do_bgcolor(GtkWidget *widget, GtkColorSelection *colorsel) gtk_color_selection_get_color(colorsel, color); c = gtk_object_get_user_data(GTK_OBJECT(colorsel)); /* GTK_IS_EDITABLE(c->entry); huh? */ text_color.red = ((guint16)(color[0] * 65535)) >> 8; text_color.green = ((guint16)(color[1] * 65535)) >> 8; text_color.blue = ((guint16)(color[2] * 65535)) >> 8; g_snprintf(open_tag, 25, "<BODY BGCOLOR=\"#%02X%02X%02X\">", text_color.red, text_color.green, surround(c->entry, open_tag, "</BODY>"); debug_printf("#%02X%02X%02X\n", text_color.red, text_color.green, text_color.blue); static void destroy_colorsel(GtkWidget *w, gpointer d) gtk_widget_destroy(fgcseld); gtk_widget_destroy(bgcseld); static void apply_color_dlg(GtkWidget *w, gpointer d) 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); 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) if (color == NULL) { /* we came from the prefs */ fgclr[0] = (gdouble)(fgcolor.red) / 255; fgclr[1] = (gdouble)(fgcolor.green) / 255; fgclr[2] = (gdouble)(fgcolor.blue) / 255; fgcseld = gtk_color_selection_dialog_new(_("Select Text Color")); gtk_color_selection_set_color(GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG(fgcseld)->colorsel), fgclr); gtk_signal_connect(GTK_OBJECT(fgcseld), "delete_event", GTK_SIGNAL_FUNC(destroy_colorsel), (void *)1); gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(fgcseld)->cancel_button), "clicked", GTK_SIGNAL_FUNC(destroy_colorsel), (void *)1); gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(fgcseld)->ok_button), "clicked", GTK_SIGNAL_FUNC(apply_color_dlg), (void *)1); gtk_widget_realize(fgcseld); aol_icon(fgcseld->window); gtk_widget_show(fgcseld); gdk_window_raise(fgcseld->window); if (!c->fg_color_dialog) { fgclr[0] = (gdouble)(c->fgcol.red) / 255; fgclr[1] = (gdouble)(c->fgcol.green) / 255; fgclr[2] = (gdouble)(c->fgcol.blue) / 255; c->fg_color_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); colorsel = GTK_COLOR_SELECTION_DIALOG(c->fg_color_dialog)->colorsel; gtk_color_selection_set_color(GTK_COLOR_SELECTION(colorsel), fgclr); gtk_object_set_user_data(GTK_OBJECT(colorsel), c); gtk_signal_connect(GTK_OBJECT(c->fg_color_dialog), "delete_event", GTK_SIGNAL_FUNC(delete_event_dialog), c); gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(c->fg_color_dialog)->ok_button), "clicked", GTK_SIGNAL_FUNC(do_fgcolor), colorsel); gtk_signal_connect(GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG(c->fg_color_dialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC(cancel_fgcolor), c); gtk_widget_realize(c->fg_color_dialog); aol_icon(c->fg_color_dialog->window); gtk_widget_show(c->fg_color_dialog); gdk_window_raise(c->fg_color_dialog->window); void show_bgcolor_dialog(struct conversation *c, GtkWidget *color) if (color == NULL) { /* we came from the prefs */ bgclr[0] = (gdouble)(bgcolor.red) / 255; bgclr[1] = (gdouble)(bgcolor.green) / 255; bgclr[2] = (gdouble)(bgcolor.blue) / 255; bgcseld = gtk_color_selection_dialog_new(_("Select Background Color")); gtk_color_selection_set_color(GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG(bgcseld)->colorsel), bgclr); gtk_signal_connect(GTK_OBJECT(bgcseld), "delete_event", GTK_SIGNAL_FUNC(destroy_colorsel), NULL); gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(bgcseld)->cancel_button), "clicked", GTK_SIGNAL_FUNC(destroy_colorsel), NULL); gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(bgcseld)->ok_button), "clicked", GTK_SIGNAL_FUNC(apply_color_dlg), (void *)2); gtk_widget_realize(bgcseld); aol_icon(bgcseld->window); gtk_widget_show(bgcseld); gdk_window_raise(bgcseld->window); if (!c->bg_color_dialog) { bgclr[0] = (gdouble)(c->bgcol.red) / 255; bgclr[1] = (gdouble)(c->bgcol.green) / 255; bgclr[2] = (gdouble)(c->bgcol.blue) / 255; c->bg_color_dialog = gtk_color_selection_dialog_new(_("Select Text Color")); colorsel = GTK_COLOR_SELECTION_DIALOG(c->bg_color_dialog)->colorsel; gtk_color_selection_set_color(GTK_COLOR_SELECTION(colorsel), bgclr); gtk_object_set_user_data(GTK_OBJECT(colorsel), c); gtk_signal_connect(GTK_OBJECT(c->bg_color_dialog), "delete_event", GTK_SIGNAL_FUNC(delete_event_dialog), c); gtk_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(c->bg_color_dialog)->ok_button), "clicked", GTK_SIGNAL_FUNC(do_bgcolor), colorsel); gtk_signal_connect(GTK_OBJECT (GTK_COLOR_SELECTION_DIALOG(c->bg_color_dialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC(cancel_bgcolor), c); gtk_widget_realize(c->bg_color_dialog); aol_icon(c->bg_color_dialog->window); gtk_widget_show(c->bg_color_dialog); gdk_window_raise(c->bg_color_dialog->window); /*------------------------------------------------------------------------*/ /* Font Selection Dialog */ /*------------------------------------------------------------------------*/ void cancel_font(GtkWidget *widget, struct conversation *c) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->font), FALSE); dialogwindows = g_list_remove(dialogwindows, c->font_dialog); gtk_widget_destroy(c->font_dialog); void apply_font(GtkWidget *widget, GtkFontSelection *fontsel) /* this could be expanded to include font size, weight, etc. but for now only works with font face */ struct conversation *c = gtk_object_get_user_data(GTK_OBJECT(fontsel)); fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel)); set_font_face(fontname, c); fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel)); for (i = 0; i < strlen(fontname); i++) { if (fontname[i] == '-') { fontface[k++] = fontname[i]; g_snprintf(fontxfld, sizeof(fontxfld), "%s", fontname); static GtkWidget *fontseld; void destroy_fontsel(GtkWidget *w, gpointer d) gtk_widget_destroy(fontseld); void apply_font_dlg(GtkWidget *w, GtkWidget *f) fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontseld)); for (i = 0; i < strlen(fontname); i++) { if (fontname[i] == '-') { fontface[k++] = fontname[i]; g_snprintf(fontxfld, sizeof(fontxfld), "%s", fontname); void show_font_dialog(struct conversation *c, GtkWidget *font) if (!font) { /* we came from the prefs dialog */ fontseld = gtk_font_selection_dialog_new(_("Select Font")); gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fontseld), gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fontseld), gtk_object_set_user_data(GTK_OBJECT(fontseld), NULL); gtk_signal_connect(GTK_OBJECT(fontseld), "delete_event", GTK_SIGNAL_FUNC(destroy_fontsel), NULL); gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(fontseld)->cancel_button), "clicked", GTK_SIGNAL_FUNC(destroy_fontsel), NULL); gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(fontseld)->ok_button), "clicked", GTK_SIGNAL_FUNC(apply_font_dlg), NULL); gtk_widget_realize(fontseld); aol_icon(fontseld->window); gtk_widget_show(fontseld); gdk_window_raise(fontseld->window); c->font_dialog = gtk_font_selection_dialog_new(_("Select Font")); gtk_object_set_user_data(GTK_OBJECT(c->font_dialog), c); gtk_object_set_user_data(GTK_OBJECT(c->font_dialog), NULL); gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(c->font_dialog), gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(c->font_dialog), gtk_signal_connect(GTK_OBJECT(c->font_dialog), "delete_event", GTK_SIGNAL_FUNC(delete_event_dialog), c); gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(c->font_dialog)->ok_button), "clicked", GTK_SIGNAL_FUNC(apply_font), c->font_dialog); gtk_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(c->font_dialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC(cancel_font), c); gtk_widget_realize(c->font_dialog); aol_icon(c->font_dialog->window); gtk_widget_show(c->font_dialog); gdk_window_raise(c->font_dialog->window); /*------------------------------------------------------------------------*/ /* The dialog for import/export */ /*------------------------------------------------------------------------*/ static void do_import_dialog(GtkWidget *w, struct gaim_connection *gc) char *file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(importdialog)); if (file_is_dir(file, importdialog)) { if (g_slist_find(connections, importgc)) { do_import(importgc, file); destroy_dialog(NULL, importdialog); static void set_import_gc(gpointer data, struct gaim_connection *gc) static void create_import_dropdown(GtkFileSelection *fs) struct gaim_connection *c; importgc = connections->data; hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_end(GTK_BOX(fs->action_area), hbox, FALSE, FALSE, 0); optmenu = gtk_option_menu_new(); gtk_box_pack_end(GTK_BOX(hbox), optmenu, FALSE, FALSE, 5); gtk_widget_show(optmenu); label = gtk_label_new(_("Import to:")); gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 5); c = (struct gaim_connection *)g->data; g_snprintf(buf, sizeof buf, "%s (%s)", c->username, c->prpl->name()); opt = gtk_menu_item_new_with_label(buf); gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(set_import_gc), c); gtk_menu_append(GTK_MENU(menu), opt); gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), 0); void show_import_dialog() char *buf = g_malloc(BUF_LEN); importdialog = gtk_file_selection_new(_("Gaim - Import Buddy List")); gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(importdialog)); g_snprintf(buf, BUF_LEN - 1, "%s/", getenv("HOME")); gtk_file_selection_set_filename(GTK_FILE_SELECTION(importdialog), buf); gtk_signal_connect(GTK_OBJECT(importdialog), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), importdialog); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(importdialog)->ok_button), "clicked", GTK_SIGNAL_FUNC(do_import_dialog), NULL); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(importdialog)->cancel_button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), importdialog); create_import_dropdown(GTK_FILE_SELECTION(importdialog)); gtk_widget_show(importdialog); gdk_window_raise(importdialog->window); /*------------------------------------------------------------------------*/ /* The dialog for new away messages */ /*------------------------------------------------------------------------*/ static struct away_message *save_away_message(struct create_away *ca) am = g_new0(struct away_message, 1); char *awayname = g_strdup_printf("away/%s", ca->mess->name); applet_widget_unregister_callback(APPLET_WIDGET(applet), awayname); g_snprintf(am->name, sizeof(am->name), "%s", gtk_entry_get_text(GTK_ENTRY(ca->entry))); text_len = gtk_text_get_length(GTK_TEXT(ca->text)); away_message = gtk_editable_get_chars(GTK_EDITABLE(ca->text), 0, text_len); g_snprintf(am->message, sizeof(am->message), "%s", away_message); away_messages = g_slist_insert_sorted(away_messages, am, sort_awaymsg_list); if (prefs_away_list != NULL) gtk_list_select_item(GTK_LIST(prefs_away_list), g_slist_index(away_messages, am)); int check_away_mess(struct create_away *ca, int type) if ((strlen(gtk_entry_get_text(GTK_ENTRY(ca->entry))) == 0) && (type == 1)) { /* We shouldn't allow a blank title */ do_error_dialog(_("You cannot create an away message with a blank title"), if ((gtk_text_get_length(GTK_TEXT(ca->text)) == 0) && (type <= 1)) { /* We shouldn't allow a blank message */ do_error_dialog(_("You cannot create an empty away message"), _("Gaim - Error")); void save_away_mess(GtkWidget *widget, struct create_away *ca) if (!check_away_mess(ca, 1)) destroy_dialog(NULL, ca->window); void use_away_mess(GtkWidget *widget, struct create_away *ca) static struct away_message am; if (!check_away_mess(ca, 0)) g_snprintf(am.name, sizeof(am.name), "%s", gtk_entry_get_text(GTK_ENTRY(ca->entry))); text_len = gtk_text_get_length(GTK_TEXT(ca->text)); away_message = gtk_editable_get_chars(GTK_EDITABLE(ca->text), 0, text_len); g_snprintf(am.message, sizeof(am.message), "%s", away_message); do_away_message(NULL, &am); destroy_dialog(NULL, ca->window); void su_away_mess(GtkWidget *widget, struct create_away *ca) if (!check_away_mess(ca, 1)) do_away_message(NULL, save_away_message(ca)); destroy_dialog(NULL, ca->window); void create_away_mess(GtkWidget *widget, void *dummy) struct create_away *ca = g_new0(struct create_away, 1); gtk_widget_set_usize(ca->window, -1, 250); gtk_container_border_width(GTK_CONTAINER(ca->window), 5); gtk_window_set_wmclass(GTK_WINDOW(ca->window), "away_mess", "Gaim"); gtk_window_set_title(GTK_WINDOW(ca->window), _("Gaim - New away message")); gtk_signal_connect(GTK_OBJECT(ca->window), "delete_event", GTK_SIGNAL_FUNC(destroy_dialog), ca->window); gtk_widget_realize(ca->window); aol_icon(ca->window->window); tbox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(ca->window), tbox); frame = gtk_frame_new(_("New away message")); gtk_box_pack_start(GTK_BOX(tbox), frame, TRUE, TRUE, 0); fbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(fbox), 5); gtk_container_add(GTK_CONTAINER(frame), fbox); titlebox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(fbox), titlebox, FALSE, FALSE, 0); gtk_widget_show(titlebox); label = gtk_label_new(_("Away title: ")); gtk_box_pack_start(GTK_BOX(titlebox), label, FALSE, FALSE, 0); ca->entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(titlebox), ca->entry, TRUE, TRUE, 0); gtk_widget_grab_focus(ca->entry); gtk_widget_show(ca->entry); sw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(fbox), sw, TRUE, TRUE, 0); ca->text = gtk_text_new(NULL, NULL); gtk_text_set_word_wrap(GTK_TEXT(ca->text), TRUE); gtk_text_set_editable(GTK_TEXT(ca->text), TRUE); gtk_container_add(GTK_CONTAINER(sw), ca->text); gtk_widget_show(ca->text); if (dummy && GTK_LIST(prefs_away_list)->selection) { GtkWidget *item = GTK_LIST(prefs_away_list)->selection->data; struct away_message *amt = gtk_object_get_user_data(GTK_OBJECT(item)); gtk_entry_set_text(GTK_ENTRY(ca->entry), amt->name); gtk_editable_insert_text(GTK_EDITABLE(ca->text), amt->message, strlen(amt->message), &pos); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(tbox), hbox, FALSE, FALSE, 0); button = picture_button(ca->window, _("Cancel"), cancel_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), ca->window); gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); button = picture_button(ca->window, _("Use"), gnome_preferences_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(use_away_mess), ca); gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); button = picture_button(ca->window, _("Save & Use"), add_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(su_away_mess), ca); gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); button = picture_button(ca->window, _("Save"), ok_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(save_away_mess), ca); gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_widget_show(ca->window); void close_smiley_dialog(GtkWidget *widget, struct conversation *c) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->smiley), FALSE); dialogwindows = g_list_remove(dialogwindows, c->smiley_dialog); gtk_widget_destroy(c->smiley_dialog); void set_smiley(GtkWidget *w, char *face) void set_smiley_array(GtkWidget *widget, int smiley_type) for (i = 0; i < FACE_TOTAL; i++) smiley_array[smiley_type] = 1; void insert_smiley_text(GtkWidget *widget, struct conversation *c) smiley_text = strdup(current_smiley); /* surround(c->entry, smiley_text, ""); */ if (GTK_OLD_EDITABLE(c->entry)->has_selection) { int finish = GTK_OLD_EDITABLE(c->entry)->selection_end_pos; gtk_editable_insert_text(GTK_EDITABLE(c->entry), smiley_text, strlen(smiley_text), &finish); int pos = GTK_OLD_EDITABLE(c->entry)->current_pos; gtk_editable_insert_text(GTK_EDITABLE(c->entry), smiley_text, strlen(smiley_text), &pos); close_smiley_dialog(NULL, c); static void toolbar_add_smiley(struct conversation *c, GtkWidget *bar, char **xpm, GtkWidget *win, dpm = gdk_pixmap_create_from_xpm_d(win->window, &mask, &win->style->white, xpm); tpm = gtk_pixmap_new(dpm, mask); gtk_toolbar_append_element(GTK_TOOLBAR(bar), GTK_TOOLBAR_CHILD_BUTTON, NULL, NULL, NULL, NULL, tpm, GTK_SIGNAL_FUNC(set_smiley), (char *)face); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(insert_smiley_text), c); /* these look really weird with borders */ gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); void show_smiley_dialog(struct conversation *c, GtkWidget *widget) GtkWidget *vbox, *smiley_box = NULL; gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, FALSE, TRUE); gtk_window_set_wmclass(GTK_WINDOW(dialog), "smiley_dialog", "Gaim"); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); vbox = gtk_vbox_new(TRUE, 5); bbox = gtk_hbox_new(FALSE, 5); if (c->gc == NULL || c->gc->prpl->smiley_list == NULL) { smiley_box = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); gtk_box_pack_start(GTK_BOX(vbox), smiley_box, TRUE, TRUE, 0); toolbar_add_smiley(c, smiley_box, angel_xpm, win, "O:-)"); toolbar_add_smiley(c, smiley_box, bigsmile_xpm, win, ":-D"); toolbar_add_smiley(c, smiley_box, burp_xpm, win, ":-!"); toolbar_add_smiley(c, smiley_box, crossedlips_xpm, win, ":-X"); smiley_box = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); gtk_box_pack_start(GTK_BOX(vbox), smiley_box, TRUE, TRUE, 0); toolbar_add_smiley(c, smiley_box, cry_xpm, win, ":'("); toolbar_add_smiley(c, smiley_box, embarrassed_xpm, win, ":-["); toolbar_add_smiley(c, smiley_box, kiss_xpm, win, ":-*"); toolbar_add_smiley(c, smiley_box, moneymouth_xpm, win, ":-$"); smiley_box = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); gtk_box_pack_start(GTK_BOX(vbox), smiley_box, TRUE, TRUE, 0); toolbar_add_smiley(c, smiley_box, sad_xpm, win, ":-("); toolbar_add_smiley(c, smiley_box, scream_xpm, win, "=-O"); toolbar_add_smiley(c, smiley_box, smile_xpm, win, ":-)"); toolbar_add_smiley(c, smiley_box, smile8_xpm, win, "8-)"); smiley_box = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); gtk_box_pack_start(GTK_BOX(vbox), smiley_box, TRUE, TRUE, 0); toolbar_add_smiley(c, smiley_box, think_xpm, win, ":-/"); toolbar_add_smiley(c, smiley_box, tongue_xpm, win, ":-P"); toolbar_add_smiley(c, smiley_box, wink_xpm, win, ";-)"); toolbar_add_smiley(c, smiley_box, yell_xpm, win, ">:o"); smilies = c->gc->prpl->smiley_list(); struct _prpl_smiley *smile = (struct _prpl_smiley *)smilies->data; smilies = g_slist_next(smilies); smilies = c->gc->prpl->smiley_list(); smiley_box = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); gtk_box_pack_start(GTK_BOX(vbox), smiley_box, TRUE, TRUE, 0); struct _prpl_smiley *smile = (struct _prpl_smiley *)smilies->data; if ((!(smiley_count % ((int)(sqrt(total_count))))) && (smiley_count > 0)) { smiley_box = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); gtk_box_pack_start(GTK_BOX(vbox), smiley_box, TRUE, TRUE, 0); toolbar_add_smiley(c, smiley_box, smile->xpm, win, smile->key); smilies = g_slist_next(smilies); gtk_container_add(GTK_CONTAINER(dialog), vbox); gtk_container_set_border_width(GTK_CONTAINER(dialog), 5); gtk_object_set_user_data(GTK_OBJECT(dialog), "smiley dialog"); gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", GTK_SIGNAL_FUNC(delete_event_dialog), c); gtk_window_set_title(GTK_WINDOW(dialog), _("Smile!")); gtk_widget_show_all(dialog); c->smiley_dialog = dialog; static void do_alias_bud(GtkWidget *w, struct buddy *b) char *al = gtk_entry_get_text(GTK_ENTRY(aliasname)); g_snprintf(b->show, sizeof(b->show), "%s", (al && strlen(al)) ? al : b->name); handle_buddy_rename(b, b->name); destroy_dialog(aliasdlg, aliasdlg); void alias_dialog_bud(struct buddy *b) static GtkWidget *add = NULL; gtk_widget_destroy(aliasdlg); gtk_window_set_policy(GTK_WINDOW(aliasdlg), FALSE, FALSE, TRUE); gtk_window_set_wmclass(GTK_WINDOW(aliasdlg), "alias_dialog", "Gaim"); gtk_widget_realize(aliasdlg); dialogwindows = g_list_prepend(dialogwindows, aliasdlg); bbox = gtk_hbox_new(TRUE, 10); topbox = gtk_hbox_new(FALSE, 5); vbox = gtk_vbox_new(FALSE, 5); aliasentry = gtk_entry_new(); aliasname = gtk_entry_new(); /* Put the buttons in the box */ add = picture_button(aliasdlg, _("Alias"), add_xpm); cancel = picture_button(aliasdlg, _("Cancel"), cancel_xpm); gtk_box_pack_start(GTK_BOX(bbox), add, FALSE, FALSE, 5); gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 5); frame = gtk_frame_new(NULL); gtk_frame_set_label(GTK_FRAME(frame), _("Alias Buddy")); label = gtk_label_new(_("Buddy")); gtk_box_pack_start(GTK_BOX(topbox), label, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(topbox), aliasentry, FALSE, FALSE, 5); gtk_entry_set_editable(GTK_ENTRY(aliasentry), FALSE); label = gtk_label_new(_("Alias")); gtk_box_pack_start(GTK_BOX(topbox), label, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(topbox), aliasname, FALSE, FALSE, 5); gtk_entry_set_text(GTK_ENTRY(aliasentry), b->name); gtk_entry_set_text(GTK_ENTRY(aliasname), b->show); /* And the boxes in the box */ gtk_box_pack_start(GTK_BOX(vbox), topbox, TRUE, TRUE, 5); gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 5); /* Handle closes right */ gtk_signal_connect(GTK_OBJECT(aliasdlg), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), aliasdlg); gtk_signal_connect(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), aliasdlg); a = gtk_signal_connect(GTK_OBJECT(add), "clicked", GTK_SIGNAL_FUNC(do_alias_bud), b); c = gtk_signal_connect(GTK_OBJECT(aliasname), "activate", GTK_SIGNAL_FUNC(do_alias_bud), b); gtk_widget_show(aliasentry); gtk_widget_show(aliasname); gtk_window_set_title(GTK_WINDOW(aliasdlg), _("Gaim - Alias Buddy")); gtk_window_set_focus(GTK_WINDOW(aliasdlg), aliasentry); gtk_container_add(GTK_CONTAINER(frame), vbox); gtk_container_add(GTK_CONTAINER(aliasdlg), frame); gtk_container_set_border_width(GTK_CONTAINER(aliasdlg), 5); gtk_widget_realize(aliasdlg); aol_icon(aliasdlg->window); gtk_widget_show(aliasdlg); static gboolean dont_destroy(gpointer a, gpointer b, gpointer c) static void do_save_log(GtkWidget *w, GtkWidget *filesel) name = gtk_object_get_user_data(GTK_OBJECT(filesel)); g_snprintf(filename, PATHSIZE, "%s/logs/%s%s", tmp, name ? normalize(name) : "system", name ? ".log" : ""); file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(filesel)); strncpy(path, file, PATHSIZE - 1); if (file_is_dir(path, filesel)) if ((fp_new = fopen(path, "w")) == NULL) { g_snprintf(error, BUF_LONG, "Can't open file %s for writing - %s", path, strerror(errno)); do_error_dialog(error, "Error"); if ((fp_old = fopen(filename, "r")) == NULL) { g_snprintf(error, BUF_LONG, "Can't open file %s for reading - %s", filename, strerror(errno)); do_error_dialog(error, "Error"); while (fgets(buf, BUF_LONG, fp_old)) gtk_widget_destroy(filesel); static void show_save_log(GtkWidget *w, gchar *name) g_snprintf(buf, BUF_LEN - 1, "%s/%s%s", getenv("HOME"), name ? normalize(name) : "system", name ? ".log" : ""); filesel = gtk_file_selection_new(_("Gaim - Save Log File")); gtk_signal_connect(GTK_OBJECT(filesel), "delete_event", GTK_SIGNAL_FUNC(destroy_dialog), filesel); gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(filesel)); gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), buf); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), "clicked", GTK_SIGNAL_FUNC(do_save_log), filesel); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), filesel); gtk_object_set_user_data(GTK_OBJECT(filesel), name); gtk_widget_realize(filesel); aol_icon(filesel->window); gtk_widget_show(filesel); static void do_clear_log_file(GtkWidget *w, gchar *name) g_snprintf(filename, 256, "%s/logs/%s%s", tmp, name ? normalize(name) : "system", name ? ".log" : ""); if ((remove(filename)) == -1) { g_snprintf(buf, 256, _("Unable to remove file %s - %s"), filename, strerror(errno)); do_error_dialog(buf, _("Error")); window = gtk_object_get_user_data(GTK_OBJECT(w)); destroy_dialog(NULL, window); static void show_clear_log(GtkWidget *w, gchar *name) gtk_window_set_wmclass(GTK_WINDOW(window), "dialog", "Gaim"); gtk_container_set_border_width(GTK_CONTAINER(window), 10); gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(destroy_dialog), window); gtk_widget_realize(window); aol_icon(window->window); box = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(window), box); label = gtk_label_new(_("Really clear log?")); gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 15); hsep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(box), hsep, FALSE, FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0); button = picture_button(window, _("Cancel"), cancel_xpm); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), window); gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); button = picture_button(window, _("Okay"), ok_xpm); gtk_object_set_user_data(GTK_OBJECT(button), gtk_object_get_user_data(GTK_OBJECT(w))); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_clear_log_file), name); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), window); gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 5); gtk_widget_show_all(window); static void log_show_convo(GtkWidget *w, struct view_log *view) string = g_string_new(""); char *tmp = gaim_user_dir(); g_snprintf(filename, 256, "%s/logs/%s.log", tmp, normalize(view->name)); char *tmp = gaim_user_dir(); g_snprintf(filename, 256, "%s/logs/system", tmp); if ((fp = fopen(filename, "r")) == NULL) { g_snprintf(buf, BUF_LONG, "Unable to open log file %s", filename); do_error_dialog(buf, "Error!"); gtk_widget_set_sensitive(view->bbox, FALSE); gtk_signal_disconnect_by_func(GTK_OBJECT(view->window), GTK_SIGNAL_FUNC(destroy_dialog), view->window); block = gtk_signal_connect(GTK_OBJECT(view->window), "delete_event", GTK_SIGNAL_FUNC(dont_destroy), view->window); fseek(fp, view->offset, SEEK_SET); gtk_imhtml_clear(GTK_IMHTML(view->layout)); while (gtk_events_pending()) while (fgets(buf, BUF_LONG, fp) && !strstr(buf, "---- New C")) { if (strlen(buf) >= 5 && (!strncmp(buf + strlen(buf) - 5, "<BR>\n", 5))) buf[strlen(buf) - 1] = '\0'; /* don't lose the thirtieth line of conversation. thanks FeRD */ g_string_append(string, buf); gtk_imhtml_append_text(GTK_IMHTML(view->layout), string->str, -1, view->options); g_string_free(string, TRUE); string = g_string_new(""); /* you can't have these anymore. if someone clicks on another item while one is * drawing, it will try to move to that item, and that causes problems here. while (gtk_events_pending()) gtk_imhtml_append_text(GTK_IMHTML(view->layout), string->str, -1, view->options); gtk_imhtml_append_text(GTK_IMHTML(view->layout), "<BR>", -1, view->options); gtk_widget_set_sensitive(view->bbox, TRUE); gtk_signal_disconnect(GTK_OBJECT(view->window), block); gtk_signal_connect(GTK_OBJECT(view->window), "delete_event", GTK_SIGNAL_FUNC(destroy_dialog), view->window); g_string_free(string, TRUE); static void des_view_item(GtkObject *obj, struct view_log *view) static void des_log_win(GtkObject *win, gpointer data) char *x = gtk_object_get_user_data(win); char *name = nm ? g_strdup(nm) : NULL; options = GTK_IMHTML_NO_COMMENTS | GTK_IMHTML_NO_TITLE | GTK_IMHTML_NO_SCROLL; if (convo_options & OPT_CONVO_IGNORE_COLOUR) options ^= GTK_IMHTML_NO_COLOURS; if (convo_options & OPT_CONVO_IGNORE_FONTS) options ^= GTK_IMHTML_NO_FONTS; if (convo_options & OPT_CONVO_IGNORE_SIZES) options ^= GTK_IMHTML_NO_SIZES; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_object_set_user_data(GTK_OBJECT(window), name); gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(des_log_win), NULL); gtk_window_set_wmclass(GTK_WINDOW(window), "log", "Gaim"); g_snprintf(buf, BUF_LONG, "Gaim - Conversations with %s", name); g_snprintf(buf, BUF_LONG, "Gaim - System Log"); gtk_window_set_title(GTK_WINDOW(window), buf); gtk_container_set_border_width(GTK_CONTAINER(window), 10); gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); block = gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(dont_destroy), window); gtk_widget_realize(window); aol_icon(window->window); layout = gtk_imhtml_new(NULL, NULL); bbox = gtk_hbox_new(FALSE, 0); box = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(window), box); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 0); char *tmp = gaim_user_dir(); g_snprintf(filename, 256, "%s/logs/%s.log", tmp, normalize(name)); if ((fp = fopen(filename, "r")) == NULL) { g_snprintf(buf, BUF_LONG, "Unable to open log file %s", filename); do_error_dialog(buf, "Error!"); frame = gtk_frame_new(_("Date")); sw = gtk_scrolled_window_new(NULL, NULL); gtk_container_set_border_width(GTK_CONTAINER(sw), 5); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), list); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_usize(sw, 220, 220); gtk_container_add(GTK_CONTAINER(frame), sw); gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0); while (fgets(buf, BUF_LONG, fp)) { if (strstr(buf, "---- New C")) { char *temp = strchr(buf, '@'); if (temp == NULL || strlen(temp) < 2) if (i == 1 && item_list) { item_list = g_list_remove(item_list, last); length = strcspn(temp, "-"); if (length > 31) length = 31; g_snprintf(convo_start, length, "%s", temp); item = gtk_list_item_new_with_label(convo_start); view = g_new0(struct view_log, 1); view->name = g_strdup(name); gtk_signal_connect(GTK_OBJECT(item), "select", GTK_SIGNAL_FUNC(log_show_convo), view); gtk_signal_connect(GTK_OBJECT(item), "destroy", GTK_SIGNAL_FUNC(des_view_item), view); item_list = g_list_append(item_list, item); item_list = g_list_remove(item_list, item); gtk_list_insert_items(GTK_LIST(list), item_list, 0 ); gtk_signal_disconnect(GTK_OBJECT(window), block); gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(destroy_dialog), window); frame = gtk_frame_new(_("Conversation")); sw = gtk_scrolled_window_new(NULL, NULL); gtk_container_set_border_width(GTK_CONTAINER(sw), 5); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_widget_set_usize(sw, 390, 220); gtk_container_add(GTK_CONTAINER(frame), sw); gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(layout), "url_clicked", GTK_SIGNAL_FUNC(open_url), NULL); gtk_container_add(GTK_CONTAINER(sw), layout); GTK_LAYOUT(layout)->hadjustment->step_increment = 10.0; GTK_LAYOUT(layout)->vadjustment->step_increment = 10.0; gaim_setup_imhtml(layout); gtk_box_pack_start(GTK_BOX(box), bbox, FALSE, FALSE, 0); gtk_widget_set_sensitive(bbox, FALSE); close_button = picture_button(window, _("Close"), cancel_xpm); gtk_box_pack_end(GTK_BOX(bbox), close_button, FALSE, FALSE, 5); gtk_signal_connect(GTK_OBJECT(close_button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), window); clear_button = picture_button(window, _("Clear"), close_xpm); gtk_object_set_user_data(GTK_OBJECT(clear_button), window); gtk_box_pack_end(GTK_BOX(bbox), clear_button, FALSE, FALSE, 5); gtk_signal_connect(GTK_OBJECT(clear_button), "clicked", GTK_SIGNAL_FUNC(show_clear_log), name); save_button = picture_button(window, _("Save"), save_xpm); gtk_box_pack_end(GTK_BOX(bbox), save_button, FALSE, FALSE, 5); gtk_signal_connect(GTK_OBJECT(save_button), "clicked", GTK_SIGNAL_FUNC(show_save_log), name); gtk_widget_show_all(window); view = g_new0(struct view_log, 1); log_show_convo(layout, view); gtk_signal_connect(GTK_OBJECT(layout), "destroy", GTK_SIGNAL_FUNC(des_view_item), view); gtk_list_select_item(GTK_LIST(list), 0); gtk_widget_set_sensitive(bbox, TRUE); /*------------------------------------------------------------------------*/ /* The dialog for renaming groups */ /*------------------------------------------------------------------------*/ static void do_rename_group(GtkObject *obj, GtkWidget *entry) struct gaim_connection *gc; new_name = gtk_entry_get_text(GTK_ENTRY(entry)); g = gtk_object_get_user_data(obj); if (new_name && (strlen(new_name) != 0) && strcmp(new_name, g->name)) { if ((orig = find_group(g->gc, new_name)) != NULL && g_strcasecmp(new_name, g->name)) { orig->members = g_slist_concat(orig->members, g->members); handle_group_rename(orig, g->name); g->gc->groups = g_slist_remove(g->gc->groups, g); /* FIXME, i don't like calling this. it's sloppy. */ build_edit_tree(); prevname = g_strdup(g->name); g_snprintf(g->name, sizeof(g->name), "%s", new_name); handle_group_rename(g, prevname); destroy_dialog(rename_dialog, rename_dialog); void show_rename_group(GtkWidget *unused, struct group *g) GAIM_DIALOG(rename_dialog); gtk_window_set_wmclass(GTK_WINDOW(rename_dialog), "rename_dialog", "Gaim"); gtk_window_set_policy(GTK_WINDOW(rename_dialog), FALSE, TRUE, TRUE); gtk_window_set_title(GTK_WINDOW(rename_dialog), _("Gaim - Rename Group")); gtk_signal_connect(GTK_OBJECT(rename_dialog), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), rename_dialog); gtk_widget_realize(rename_dialog); aol_icon(rename_dialog->window); mainbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(mainbox), 5); gtk_container_add(GTK_CONTAINER(rename_dialog), mainbox); frame = gtk_frame_new(_("Rename Group")); gtk_box_pack_start(GTK_BOX(mainbox), frame, TRUE, TRUE, 0); fbox = gtk_hbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(fbox), 5); gtk_container_add(GTK_CONTAINER(frame), fbox); label = gtk_label_new(_("New name:")); gtk_box_pack_start(GTK_BOX(fbox), label, FALSE, FALSE, 0); name_entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(fbox), name_entry, TRUE, TRUE, 0); gtk_object_set_user_data(GTK_OBJECT(name_entry), g); gtk_entry_set_text(GTK_ENTRY(name_entry), g->name); gtk_signal_connect(GTK_OBJECT(name_entry), "activate", GTK_SIGNAL_FUNC(do_rename_group), name_entry); gtk_widget_grab_focus(name_entry); bbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(mainbox), bbox, FALSE, FALSE, 0); button = picture_button(rename_dialog, _("Cancel"), cancel_xpm); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), rename_dialog); button = picture_button(rename_dialog, _("OK"), ok_xpm); gtk_object_set_user_data(GTK_OBJECT(button), g); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_rename_group), name_entry); gtk_widget_show_all(rename_dialog); /*------------------------------------------------------------------------*/ /* The dialog for renaming buddies */ /*------------------------------------------------------------------------*/ static void do_rename_buddy(GtkObject *obj, GtkWidget *entry) new_name = gtk_entry_get_text(GTK_ENTRY(entry)); b = gtk_object_get_user_data(obj); if (!g_slist_find(connections, b->gc)) { destroy_dialog(rename_bud_dialog, rename_bud_dialog); if (g_slist_find(((struct group *)gr->data)->members, b)) destroy_dialog(rename_bud_dialog, rename_bud_dialog); if (new_name && (strlen(new_name) != 0) && strcmp(new_name, b->name)) { struct group *g = find_group_by_buddy(b->gc, b->name); char *prevname = g_strdup(b->name); serv_remove_buddy(b->gc, b->name, g->name); if (!strcmp(b->name, b->show)) g_snprintf(b->show, sizeof(b->show), "%s", new_name); g_snprintf(b->name, sizeof(b->name), "%s", new_name); serv_add_buddy(b->gc, b->name); handle_buddy_rename(b, prevname); destroy_dialog(rename_bud_dialog, rename_bud_dialog); void show_rename_buddy(GtkWidget *unused, struct buddy *b) if (!rename_bud_dialog) { GAIM_DIALOG(rename_bud_dialog); gtk_window_set_wmclass(GTK_WINDOW(rename_bud_dialog), "rename_bud_dialog", "Gaim"); gtk_window_set_policy(GTK_WINDOW(rename_bud_dialog), FALSE, TRUE, TRUE); gtk_window_set_title(GTK_WINDOW(rename_bud_dialog), _("Gaim - Rename Buddy")); gtk_signal_connect(GTK_OBJECT(rename_bud_dialog), "destroy", GTK_SIGNAL_FUNC(destroy_dialog), rename_bud_dialog); gtk_widget_realize(rename_bud_dialog); aol_icon(rename_bud_dialog->window); mainbox = gtk_vbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(mainbox), 5); gtk_container_add(GTK_CONTAINER(rename_bud_dialog), mainbox); frame = gtk_frame_new(_("Rename Buddy")); gtk_box_pack_start(GTK_BOX(mainbox), frame, TRUE, TRUE, 0); fbox = gtk_hbox_new(FALSE, 5); gtk_container_set_border_width(GTK_CONTAINER(fbox), 5); gtk_container_add(GTK_CONTAINER(frame), fbox); label = gtk_label_new(_("New name:")); gtk_box_pack_start(GTK_BOX(fbox), label, FALSE, FALSE, 0); name_entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(fbox), name_entry, TRUE, TRUE, 0); gtk_object_set_user_data(GTK_OBJECT(name_entry), b); gtk_entry_set_text(GTK_ENTRY(name_entry), b->name); gtk_signal_connect(GTK_OBJECT(name_entry), "activate", GTK_SIGNAL_FUNC(do_rename_buddy), name_entry); gtk_widget_grab_focus(name_entry); bbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(mainbox), bbox, FALSE, FALSE, 0); button = picture_button(rename_bud_dialog, _("Cancel"), cancel_xpm); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_dialog), rename_bud_dialog); button = picture_button(rename_bud_dialog, _("OK"), ok_xpm); gtk_object_set_user_data(GTK_OBJECT(button), b); gtk_box_pack_end(GTK_BOX(bbox), button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(do_rename_buddy), name_entry); gtk_widget_show_all(rename_bud_dialog); static GtkWidget *perl_config = NULL; static char *perl_last_dir = NULL; static void cfdes(GtkWidget *m, gpointer n) gtk_widget_destroy(perl_config); static void do_load(GtkWidget *m, gpointer n) const char *file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(perl_config)); if (!file || !strlen(file)) { if (file_is_dir(file, perl_config)) { perl_last_dir = g_dirname(file); debug_printf("Loading perl script: %s\n", file); cfdes(perl_config, NULL); gtk_widget_show(perl_config); gdk_window_raise(perl_config->window); /* Below is basically stolen from plugins.c */ perl_config = gtk_file_selection_new(_("Gaim - Select Perl Script")); gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(perl_config)); buf = g_strconcat(temp, G_DIR_SEPARATOR_S, NULL); buf = g_strconcat(perl_last_dir, G_DIR_SEPARATOR_S, NULL); gtk_file_selection_set_filename(GTK_FILE_SELECTION(perl_config), buf); gtk_file_selection_complete(GTK_FILE_SELECTION(perl_config), "*.pl"); gtk_signal_connect(GTK_OBJECT(perl_config), "destroy", GTK_SIGNAL_FUNC(cfdes), perl_config); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(perl_config)->ok_button), "clicked", GTK_SIGNAL_FUNC(do_load), NULL); gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(perl_config)->cancel_button), "clicked", GTK_SIGNAL_FUNC(cfdes), NULL); gtk_widget_show(perl_config); gdk_window_raise(perl_config->window); static GdkPixmap *icon_pm = NULL; static GdkBitmap *icon_bm = NULL; void aol_icon(GdkWindow *w) icon_pm = gdk_pixmap_create_from_xpm_d(w, &icon_bm, NULL, (gchar **)aimicon_xpm); gdk_window_set_icon(w, NULL, icon_pm, icon_bm); gdk_window_set_group(w, mainwindow->window); GtkWidget *picture_button(GtkWidget *window, char *text, char **xpm) GtkWidget *button_box, *button_box_2, *button_box_3; button = gtk_button_new(); if (misc_options & OPT_MISC_COOL_LOOK) gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); button_box = gtk_hbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER(button), button_box); button_box_2 = gtk_hbox_new(FALSE, 0); button_box_3 = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(button_box), button_box_2, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(button_box), button_box_3, TRUE, TRUE, 0); pm = gdk_pixmap_create_from_xpm_d(window->window, &mask, NULL, xpm); pixmap = gtk_pixmap_new(pm, mask); gtk_box_pack_end(GTK_BOX(button_box_2), pixmap, FALSE, FALSE, 0); label = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(button_box_3), label, FALSE, FALSE, 2); gtk_widget_show(button_box_2); gtk_widget_show(button_box_3); gtk_widget_show(button_box); /* this causes clipping on lots of buttons with long text */ /* gtk_widget_set_usize(button, 75, 30);*/ static GtkTooltips *button_tips = NULL; GtkWidget *picture_button2(GtkWidget *window, char *text, char **xpm, short dispstyle) GtkWidget *button_box, *button_box_2; button_tips = gtk_tooltips_new(); button = gtk_button_new(); if (misc_options & OPT_MISC_COOL_LOOK) gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); button_box = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(button), button_box); button_box_2 = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(button_box), button_box_2, TRUE, TRUE, 0); gtk_widget_show(button_box_2); gtk_widget_show(button_box); if (dispstyle == 2 || dispstyle == 0) { pm = gdk_pixmap_create_from_xpm_d(window->window, &mask, NULL, xpm); pixmap = gtk_pixmap_new(pm, mask); gtk_box_pack_start(GTK_BOX(button_box_2), pixmap, FALSE, FALSE, 0); if (dispstyle == 2 || dispstyle == 1) { label = gtk_label_new(text); gtk_box_pack_end(GTK_BOX(button_box_2), label, FALSE, FALSE, 0); gtk_tooltips_set_tip(button_tips, button, text, "Gaim"); int file_is_dir(const char *path, GtkWidget *w) if (stat(path, &st) == 0 && S_ISDIR(st.st_mode)) { /* append a / if needed */ if (path[strlen(path) - 1] != '/') { name = g_strconcat(path, "/", NULL); gtk_file_selection_set_filename(GTK_FILE_SELECTION(w), name); /*------------------------------------------------------------------------*/ /* The dialog for setting V-Card info */ /*------------------------------------------------------------------------*/ * There are actually two "chunks" of code following: generic "multi-entry dialog" * support and V-Card dialog specific support. * At first blush, this may seem like an unnecessary duplication of effort given * that a "set dir info" dialog already exists. However, this is not so because: * 1. V-Cards can have a lot more data in them than what the current * "set dir" dialog supports. * 2. V-Card data, at least with respect to Jabber, is currently in a * state of flux. As the data and format changes, all that need be * changed with the V-Card support I've written is the "template" * 3. The "multi entry dialog" support itself was originally written * to support Jabber server user registration (TBD). A "dynamically * configurable" multi-entry dialog is needed for that, as different * servers may require different registration information. It just * turned out to be well-suited to adding V-Card setting support, as * TBD: Add check-box support to the generic multi-entry dialog support so that * it can be used to "replace" the "set dir info" support? * Multiple-language support. Currently Not In There. I think this should * be easy. Note that when it's added: if anybody saved their data in * English, it'll be lost when MLS is added and they'll have to re-enter it. * More "TBDs" noted in the code. /*------------------------------------*/ /* generic multi-entry dialog support */ /*------------------------------------*/ * Print all multi-entry items * Note: Simply a debug helper void multi_entry_item_print_all(const GSList *list) { /* While there's something to print... */ fprintf(stderr, "label %2d: \"%s\"", ++cnt, ((MultiEntryData *) (list->data))->label); if(((MultiEntryData *) (list->data))->text != NULL) { fprintf(stderr, ", text: \"%s\"", ((MultiEntryData *) (list->data))->text); * Print all multi-text items * Note: Simply a debug helper void multi_text_item_print_all(const GSList *list) { /* While there's something to print... */ fprintf(stderr, "label %2d: \"%s\"", ++cnt, ((MultiTextData *) (list->data))->label); if(((MultiTextData *) (list->data))->text != NULL) { fprintf(stderr, ", text: \"%s\"", ((MultiTextData *) (list->data))->text); * Free all multi-entry item allocs and NULL the list pointer void multi_entry_items_free_all(GSList **list) /* While there's something to free() ... */ data = (MultiEntryData *) next->data; * Free all multi-text item allocs and NULL the list pointer void multi_text_items_free_all(GSList **list) /* While there's something to free() ... */ data = (MultiTextData *) next->data; * See if a MultiEntryData item contains a given label * See: glib docs for g_slist_compare_custom() for details static gint multi_entry_data_label_compare(gconstpointer data, gconstpointer label) return(strcmp(((MultiEntryData *) (data))->label, (char *) label)); * Add a new multi-entry item to list * If adding to existing list: will search the list for existence of * "label" and change/create "text" entry if necessary. MultiEntryData *multi_entry_list_update(GSList **list, const char *label, const char *text, int add_it) if((found = g_slist_find_custom(*list, (void *)label, multi_entry_data_label_compare)) == NULL) { data = (MultiEntryData *) g_slist_last(*list = g_slist_append(*list, g_malloc(sizeof(MultiEntryData))))->data; data->label = strcpy(g_malloc(strlen(label) +1), label); * default to setting "visible" and editable to TRUE - they can be * overridden later, of course. if(data != NULL && text != NULL && text[0] != '\0') { data->text = g_malloc(strlen(text) + 1); data->text = g_realloc(data->text, strlen(text) + 1); strcpy(data->text, text); * See if a MultiTextData item contains a given label * See: glib docs for g_slist_compare_custom() for details static gint multi_text_data_label_compare(gconstpointer data, gconstpointer label) return(strcmp(((MultiTextData *) (data))->label, (char *) label)); * Add a new multi-text item to list * If adding to existing list: will search the list for existence of * "label" and change/create "text" text if necessary. MultiTextData *multi_text_list_update(GSList **list, const char *label, const char *text, int add_it) if((found = g_slist_find_custom(*list, (void *)label, multi_text_data_label_compare)) == NULL) { data = (MultiTextData *) g_slist_last(*list = g_slist_append(*list, g_malloc(sizeof(MultiTextData))))->data; data->label = strcpy(g_malloc(strlen(label) +1), label); if(data != NULL && text != NULL && text[0] != '\0') { data->text = g_malloc(strlen(text) + 1); data->text = g_realloc(data->text, strlen(text) + 1); strcpy(data->text, text); * Free-up the multi-entry item list and the MultiEntryDlg void multi_entry_free(struct multi_entry_dlg *b) multi_entry_items_free_all(&(b->multi_entry_items)); multi_text_items_free_all(&(b->multi_text_items)); g_free(b->instructions->text); g_free(b->entries_title); * Multi-Entry dialog "destroyed" catcher * Free-up the multi-entry item list, destroy the dialog widget * and free the MultiEntryDlg struct alloc. void multi_entry_dialog_destroy(GtkWidget *widget, gpointer data) * Show/Re-show instructions void re_show_multi_entry_instr(MultiInstrData *instructions) if(instructions->label != NULL) { if(instructions->text == NULL) { gtk_widget_hide(instructions->label); gtk_label_set_text(GTK_LABEL (instructions->label), instructions->text); gtk_widget_show(instructions->label); * Show/Re-show entry boxes void re_show_multi_entry_entries(GtkWidget **entries_table, GtkWidget *entries_frame, GSList *multi_entry_items) int rows, row_num, col_num, col_offset; /* Figure-out number of rows needed for table */ if((rows = g_slist_length(multi_entry_items)) > 9) { if(*entries_table != NULL) { gtk_widget_destroy(GTK_WIDGET (*entries_table)); *entries_table = gtk_table_new(rows, 3 * cols, FALSE); gtk_container_add(GTK_CONTAINER (entries_frame), *entries_table); for(col_num = 0, multi_entry = multi_entry_items; col_num < cols && multi_entry != NULL; col_offset = col_num * 3; for(row_num = 0; row_num < rows && multi_entry != NULL; ++row_num, multi_entry = multi_entry->next) { med = (MultiEntryData *) multi_entry->data; label = gtk_label_new(med->label); gtk_misc_set_alignment(GTK_MISC(label), (gfloat) 1.0, (gfloat) 0.5); gtk_table_attach_defaults(GTK_TABLE (*entries_table), label, col_offset, 1 + col_offset, row_num, row_num +1); label = gtk_label_new(": "); gtk_misc_set_alignment(GTK_MISC(label), (gfloat) 0.0, (gfloat) 0.5); gtk_table_attach_defaults(GTK_TABLE (*entries_table), label, 1 + col_offset, 2 + col_offset, row_num, row_num +1); med->widget = gtk_entry_new_with_max_length(50); gtk_entry_set_text(GTK_ENTRY (med->widget), med->text); gtk_entry_set_visibility(GTK_ENTRY (med->widget), med->visible); gtk_entry_set_editable(GTK_ENTRY (med->widget), med->editable); gtk_table_attach(GTK_TABLE (*entries_table), med->widget, 2 + col_offset, 3 + col_offset, row_num, row_num +1, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 5, 0); gtk_widget_show(med->widget); gtk_widget_show(*entries_table); void re_show_multi_entry_textboxes(GtkWidget **texts_ibox, GSList *multi_text_items) if(*texts_ibox != NULL) { gtk_widget_destroy(GTK_WIDGET (*texts_ibox)); *texts_ibox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER (texts_obox), *texts_ibox); for(multi_text = multi_text_items; multi_text != NULL; multi_text = multi_text->next) { mtd = (MultiTextData *) multi_text->data; frame = gtk_frame_new(mtd->label); gtk_container_add(GTK_CONTAINER (*texts_ibox), frame); hbox = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER (frame), hbox); mtd->textbox = gtk_text_new(NULL, NULL); gtk_text_set_editable(GTK_TEXT(mtd->textbox), TRUE); gtk_text_set_word_wrap(GTK_TEXT(mtd->textbox), TRUE); gtk_widget_set_usize(mtd->textbox, 300, 100); gtk_text_insert(GTK_TEXT(mtd->textbox), NULL, NULL, NULL, mtd->text, -1); gtk_box_pack_start(GTK_BOX (hbox), mtd->textbox, FALSE, FALSE, 0); vscrollbar = gtk_vscrollbar_new (GTK_TEXT(mtd->textbox)->vadj); gtk_box_pack_start(GTK_BOX (hbox), vscrollbar, FALSE, FALSE, 0); gtk_widget_show(mtd->textbox); gtk_widget_show (vscrollbar); gtk_widget_show(*texts_ibox); * Create and initialize a new Multi-Entry Dialog struct MultiEntryDlg *multi_entry_dialog_new() MultiEntryDlg *b = g_new0(MultiEntryDlg, 1); b->instructions = g_new0(MultiInstrData, 1); b->multi_entry_items = NULL; b->multi_text_items = NULL; * Instantiate a new multi-entry dialog * data == pointer to MultiEntryDlg with the following * multi_entry_items - pointers to MultiEntryData list * instructions (optional) * cancel function pointer (actually used to set * window destroy signal--cancel asserts destroy) * sets the following in the MultiEntryDialog struct: void show_multi_entry_dialog(gpointer data) gtk_container_set_border_width(GTK_CONTAINER(b->window), 5); gtk_window_set_wmclass(GTK_WINDOW(b->window), b->wmclass_name, b->wmclass_class); gtk_window_set_title(GTK_WINDOW (b->window), b->title); /* Clean up if user dismisses window via window manager! */ gtk_signal_connect(GTK_OBJECT(b->window), "destroy", GTK_SIGNAL_FUNC(b->cancel), (gpointer) b); gtk_widget_realize(b->window); aol_icon(b->window->window); vbox = gtk_vbox_new(FALSE, 5); gtk_container_add(GTK_CONTAINER (b->window), vbox); b->instructions->label = gtk_label_new(NULL); gtk_label_set_line_wrap(GTK_LABEL (b->instructions->label), TRUE); gtk_box_pack_start(GTK_BOX (vbox), b->instructions->label, TRUE, TRUE, 5); re_show_multi_entry_instr(b->instructions); b->entries_frame = gtk_frame_new(b->entries_title); gtk_box_pack_start(GTK_BOX (vbox), b->entries_frame, TRUE, TRUE, 5); gtk_widget_show(b->entries_frame); re_show_multi_entry_entries(&(b->entries_table), b->entries_frame, b->multi_entry_items); b->texts_obox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX (vbox), b->texts_obox, TRUE, TRUE, 5); gtk_widget_show(b->texts_obox); re_show_multi_entry_textboxes(&(b->texts_ibox), b->texts_obox, b->multi_text_items); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX (vbox), hbox, FALSE, FALSE, 5); button = picture_button(b->window, _("Cancel"), cancel_xpm); /* Let "destroy handling" (set above) handle cleanup */ gtk_signal_connect_object(GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (b->window)); gtk_box_pack_end(GTK_BOX (hbox), button, FALSE, FALSE, 5); button = picture_button(b->window, _("Save"), save_xpm); gtk_signal_connect(GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (b->ok), (gpointer) b); gtk_box_pack_end(GTK_BOX (hbox), button, FALSE, FALSE, 5); gtk_widget_show(b->window); /*------------------------------------*/ /* V-Card dialog specific support */ /*------------------------------------*/ * V-Card "set info" dialog "Save" clicked * Copy data from GTK+ dialogs into GSLists, call protocol-specific * formatter and save the user info data. void set_vcard_dialog_ok_clicked(GtkWidget *widget, gpointer data) MultiEntryDlg *b = (MultiEntryDlg *) data; struct gaim_connection *gc; for(list = b->multi_entry_items; list != NULL; list = list->next) { if(((MultiEntryData *) list->data)->text != NULL) { g_free(((MultiEntryData *) list->data)->text); ((MultiEntryData *) list->data)->text = g_strdup(gtk_entry_get_text(GTK_ENTRY(((MultiEntryData *) list->data)->widget))); for(list = b->multi_text_items; list != NULL; list = list->next) { if(((MultiTextData *) list->data)->text != NULL) { g_free(((MultiTextData *) list->data)->text); ((MultiTextData *) list->data)->text = gtk_editable_get_chars((GtkEditable *) (((MultiTextData *) list->data)->textbox), * Set the user info and (possibly) send to the server strncpy(b->user->user_info, tmp, sizeof b->user->user_info); serv_set_info(gc, b->user->user_info); /* Let multi-edit dialog window "destroy" event catching handle remaining cleanup */ gtk_widget_destroy(GTK_WIDGET (b->window)); * Instantiate a v-card dialog void show_set_vcard(MultiEntryDlg *b) b->ok = set_vcard_dialog_ok_clicked; b->cancel = multi_entry_dialog_destroy; show_multi_entry_dialog(b); /*------------------------------------------------------------------------*/ /* End dialog for setting v-card info */ /*------------------------------------------------------------------------*/