# HG changeset patch # User Sean Egan # Date 1020455167 0 # Node ID 389ed797f396fe3da321e991a6bc04192b5161b0 # Parent 8b3d167854806d58e7f919ba484769024555f74a [gaim-migrate @ 3214] click81's patch for get_info from the menu. committer: Tailor Script diff -r 8b3d16785480 -r 389ed797f396 ChangeLog --- a/ChangeLog Fri May 03 19:24:19 2002 +0000 +++ b/ChangeLog Fri May 03 19:46:07 2002 +0000 @@ -6,6 +6,8 @@ * Better applet transparency * Option to raise buddy list on signons/signoffs * Formatting of incoming MSN messages + * Get Info from menu multiple-account-aware (thanks + Brian Bernas) version 0.57 (04/25/2002): * New authorization method for Yahoo! diff -r 8b3d16785480 -r 389ed797f396 src/dialogs.c --- a/src/dialogs.c Fri May 03 19:24:19 2002 +0000 +++ b/src/dialogs.c Fri May 03 19:46:07 2002 +0000 @@ -90,7 +90,6 @@ GdkColor fgcolor; static GtkWidget *imdialog = NULL; /*I only want ONE of these :) */ -static GtkWidget *infodialog = NULL; static GList *dialogwindows = NULL; static GtkWidget *importdialog; static struct gaim_connection *importgc; @@ -186,6 +185,14 @@ GtkWidget *window; GtkWidget *text; }; + +struct getuserinfo { + GtkWidget *window; + GtkWidget *entry; + GtkWidget *account; + struct gaim_connection *gc; +}; + static GSList *info_dlgs = NULL; static struct info_dlg *find_info_dlg(struct gaim_connection *gc, char *who) @@ -321,9 +328,6 @@ if (dest == imdialog) imdialog = NULL; - if (dest == infodialog) - infodialog = NULL; - if (dest == importdialog) { importdialog = NULL; importgc = NULL; @@ -363,11 +367,6 @@ imdialog = NULL; } - if (infodialog) { - destroy_dialog(NULL, infodialog); - infodialog = NULL; - } - if (importdialog) { destroy_dialog(NULL, importdialog); importdialog = NULL; @@ -605,13 +604,12 @@ g_free(who); } -static void do_info(GtkWidget *widget, GtkWidget *infoentry) +static void do_info(GtkWidget *widget, struct getuserinfo *info) { char *who; - who = g_strdup(normalize(gtk_entry_get_text(GTK_ENTRY(infoentry)))); - destroy_dialog(NULL, infodialog); - infodialog = NULL; + who = g_strdup(normalize(gtk_entry_get_text(GTK_ENTRY(info->entry)))); + destroy_dialog(NULL, info->window); if (!g_strcasecmp(who, "")) { g_free(who); @@ -619,8 +617,8 @@ } /* what do we want to do about this case? */ - if (connections) - serv_get_info(connections->data, who); + if (info->gc) + serv_get_info(info->gc, who); g_free(who); } @@ -727,67 +725,109 @@ 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); + info->gc = gc; +} + void show_info_dialog() { GtkWidget *mainbox; GtkWidget *frame; - GtkWidget *fbox; + GtkWidget *table; GtkWidget *bbox; GtkWidget *button; - GtkWidget *infoentry; GtkWidget *label; - - if (!infodialog) { - - GAIM_DIALOG(infodialog); - gtk_window_set_wmclass(GTK_WINDOW(infodialog), "infodialog", "Gaim"); - gtk_window_set_policy(GTK_WINDOW(infodialog), FALSE, TRUE, TRUE); - gtk_widget_realize(infodialog); - - mainbox = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(mainbox), 5); - gtk_container_add(GTK_CONTAINER(infodialog), mainbox); - - frame = gtk_frame_new(_("Get User Info")); - 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(_("User:")); - gtk_box_pack_start(GTK_BOX(fbox), label, FALSE, FALSE, 0); + GtkWidget *menu, *opt; + char buf[2048]; + GSList *g = connections; + 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); + gtk_widget_show(label); + + info->entry = gtk_entry_new(); + gtk_table_attach_defaults(GTK_TABLE(table), info->entry, 1, 2, 0, 1); + + if (connections->next) { + + label = gtk_label_new(_("Account:")); + gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); gtk_widget_show(label); - infoentry = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(fbox), infoentry, TRUE, TRUE, 0); - - /* Handle closes right */ - gtk_signal_connect(GTK_OBJECT(infoentry), "activate", - GTK_SIGNAL_FUNC(do_info), infoentry); - gtk_signal_connect(GTK_OBJECT(infodialog), "destroy", - GTK_SIGNAL_FUNC(destroy_dialog), infodialog); - - /* Buttons */ - bbox = gtk_hbox_new(FALSE, 5); - gtk_box_pack_start(GTK_BOX(mainbox), bbox, FALSE, FALSE, 0); - - button = picture_button(infodialog, _("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), infodialog); - - button = picture_button(infodialog, _("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), infoentry); - - /* Finish up */ - gtk_window_set_title(GTK_WINDOW(infodialog), _("Gaim - Get User Info")); - gtk_widget_grab_focus(infoentry); - - aol_icon(infodialog->window); + info->account = gtk_option_menu_new(); + gtk_table_attach_defaults(GTK_TABLE(table), info->account, 1, 2, 1, 2); + + menu = gtk_menu_new(); + + while (g) { + 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_widget_show(opt); + + g = g->next; + } + + gtk_widget_show(menu); + gtk_option_menu_set_menu(GTK_OPTION_MENU(info->account), menu); + gtk_widget_show(info->account); } - gtk_widget_show_all(infodialog); + + /* 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); + + /* Buttons */ + 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); + + /* Finish up */ + 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); }