Mercurial > pidgin.yaz
diff src/multi.c @ 4634:d19872836812
[gaim-migrate @ 4941]
This will let you set up different proxy settings for different accounts.
Mainly useful to the corporate users that need to connect to an internal
jabber server, and still want to connect to "external" stuff through a
proxy, or something along those lines. I'm sure someone will come up with
another use for it.
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Sun, 02 Mar 2003 18:48:02 +0000 |
parents | 5cdfd20daa07 |
children | 42d53c416bb9 |
line wrap: on
line diff
--- a/src/multi.c Sun Mar 02 08:10:54 2003 +0000 +++ b/src/multi.c Sun Mar 02 18:48:02 2003 +0000 @@ -19,6 +19,7 @@ * */ +#include <stdlib.h> #include <string.h> #include <ctype.h> #include <gtk/gtk.h> @@ -84,6 +85,15 @@ /* stuff for register with server */ GtkWidget *register_user; + + /* stuff for proxy options */ + GtkWidget *proxy_frame; + GtkWidget *proxy_host_box; + GtkWidget *proxytype_menu; + GtkWidget *proxyhost_entry; + GtkWidget *proxyport_entry; + GtkWidget *proxyuser_entry; + GtkWidget *proxypass_entry; }; @@ -351,6 +361,7 @@ struct gaim_account *a; struct prpl *p; GtkTreeIter iter; + int proxytype; if (!ma->account) { txt = gtk_entry_get_text(GTK_ENTRY(ma->name)); @@ -403,6 +414,23 @@ gtk_widget_destroy(ma->icondlg); ma->icondlg = NULL; + if(ma->account->gpi) + g_free(ma->account->gpi); + ma->account->gpi = NULL; + + proxytype = (int)gtk_object_get_user_data(GTK_OBJECT(gtk_menu_get_active(GTK_MENU(ma->proxytype_menu)))); + + if(proxytype != PROXY_USE_GLOBAL) { + struct gaim_proxy_info *gpi = g_new0(struct gaim_proxy_info, 1); + gpi->proxytype = proxytype; + g_snprintf(gpi->proxyhost, sizeof(gpi->proxyhost), "%s", gtk_entry_get_text(GTK_ENTRY(ma->proxyhost_entry))); + gpi->proxyport = atoi(gtk_entry_get_text(GTK_ENTRY(ma->proxyport_entry))); + g_snprintf(gpi->proxyuser, sizeof(gpi->proxyuser), "%s", gtk_entry_get_text(GTK_ENTRY(ma->proxyuser_entry))); + g_snprintf(gpi->proxypass, sizeof(gpi->proxypass), "%s", gtk_entry_get_text(GTK_ENTRY(ma->proxypass_entry))); + + ma->account->gpi = gpi; + } + /* * See if user registration is supported/required */ @@ -826,6 +854,178 @@ } +static void proxy_dropdown_set(GtkObject *w, struct mod_account *ma) { + int opt = (int)gtk_object_get_user_data(w); + gtk_widget_set_sensitive(ma->proxy_host_box, (opt != PROXY_NONE && opt != PROXY_USE_GLOBAL)); +} + +static void generate_proxy_options(struct mod_account *ma, GtkWidget *box) { + GtkWidget *frame; + GtkWidget *hbox; + GtkWidget *vbox; + GtkWidget *label; + GtkWidget *menu; + GtkWidget *dropdown; + GtkWidget *opt; + GtkWidget *entry; + GtkWidget *vbox2; + + struct gaim_proxy_info *gpi = NULL; + + if(ma->account) + gpi = ma->account->gpi; + + frame = make_frame(box, _("Proxy Options")); + ma->proxy_frame = gtk_widget_get_parent(gtk_widget_get_parent(frame)); + gtk_widget_show_all(ma->proxy_frame); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); + gtk_container_add(GTK_CONTAINER(frame), vbox); + gtk_widget_show(vbox); + + /* make the dropdown w/o the benefit of the easy helper funcs in prefs.c */ + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); + + label = gtk_label_new_with_mnemonic(_("Proxy _Type")); + gtk_size_group_add_widget(ma->sg, label); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + + dropdown = gtk_option_menu_new(); + menu = gtk_menu_new(); + + opt = gtk_menu_item_new_with_label("Use Global Proxy Settings"); + gtk_object_set_user_data(GTK_OBJECT(opt), (gpointer)PROXY_USE_GLOBAL); + g_signal_connect(G_OBJECT(opt), "activate", + G_CALLBACK(proxy_dropdown_set), ma); + gtk_widget_show(opt); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); + if(!gpi) + gtk_menu_set_active(GTK_MENU(menu), 0); + + opt = gtk_menu_item_new_with_label("No Proxy"); + gtk_object_set_user_data(GTK_OBJECT(opt), (gpointer)PROXY_NONE); + g_signal_connect(G_OBJECT(opt), "activate", + G_CALLBACK(proxy_dropdown_set), ma); + gtk_widget_show(opt); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); + if(gpi && gpi->proxytype == PROXY_NONE) + gtk_menu_set_active(GTK_MENU(menu), 1); + + opt = gtk_menu_item_new_with_label("SOCKS 4"); + gtk_object_set_user_data(GTK_OBJECT(opt), (gpointer)PROXY_SOCKS4); + g_signal_connect(G_OBJECT(opt), "activate", + G_CALLBACK(proxy_dropdown_set), ma); + gtk_widget_show(opt); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); + if(gpi && gpi->proxytype == PROXY_SOCKS4) + gtk_menu_set_active(GTK_MENU(menu), 2); + + opt = gtk_menu_item_new_with_label("SOCKS 5"); + gtk_object_set_user_data(GTK_OBJECT(opt), (gpointer)PROXY_SOCKS5); + g_signal_connect(G_OBJECT(opt), "activate", + G_CALLBACK(proxy_dropdown_set), ma); + gtk_widget_show(opt); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); + if(gpi && gpi->proxytype == PROXY_SOCKS5) + gtk_menu_set_active(GTK_MENU(menu), 3); + + opt = gtk_menu_item_new_with_label("HTTP"); + gtk_object_set_user_data(GTK_OBJECT(opt), (gpointer)PROXY_HTTP); + g_signal_connect(G_OBJECT(opt), "activate", + G_CALLBACK(proxy_dropdown_set), ma); + gtk_widget_show(opt); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), opt); + if(gpi && gpi->proxytype == PROXY_HTTP) + gtk_menu_set_active(GTK_MENU(menu), 4); + + gtk_option_menu_set_menu(GTK_OPTION_MENU(dropdown), menu); + gtk_box_pack_start(GTK_BOX(hbox), dropdown, FALSE, FALSE, 0); + gtk_widget_show(dropdown); + + ma->proxytype_menu = menu; + + + vbox2 = gtk_vbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(vbox), vbox2); + gtk_widget_show(vbox2); + ma->proxy_host_box = vbox2; + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); + + label = gtk_label_new_with_mnemonic(_("_Host:")); + gtk_size_group_add_widget(ma->sg, label); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + entry = gtk_entry_new(); + gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry); + gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); + gtk_entry_set_text(GTK_ENTRY(entry), gpi ? gpi->proxyhost : ""); + gtk_widget_show(entry); + ma->proxyhost_entry = entry; + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); + + label = gtk_label_new_with_mnemonic(_("Port:")); + gtk_size_group_add_widget(ma->sg, label); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + entry = gtk_entry_new(); + gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry); + gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); + if(gpi && gpi->proxyport) { + char buf[128]; + g_snprintf(buf, sizeof(buf), "%d", gpi->proxyport); + gtk_entry_set_text(GTK_ENTRY(entry), buf); + } + gtk_widget_show(entry); + ma->proxyport_entry = entry; + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); + + label = gtk_label_new_with_mnemonic(_("_User:")); + gtk_size_group_add_widget(ma->sg, label); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + entry = gtk_entry_new(); + gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry); + gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); + gtk_entry_set_text(GTK_ENTRY(entry), gpi ? gpi->proxyuser : ""); + gtk_widget_show(entry); + ma->proxyuser_entry = entry; + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0); + gtk_widget_show(hbox); + + label = gtk_label_new_with_mnemonic(_("Pa_ssword:")); + gtk_size_group_add_widget(ma->sg, label); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_widget_show(label); + entry = gtk_entry_new(); + gtk_label_set_mnemonic_widget(GTK_LABEL(label), entry); + gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, FALSE, 0); + gtk_entry_set_text(GTK_ENTRY(entry), gpi ? gpi->proxypass : ""); + gtk_widget_show(entry); + ma->proxypass_entry = entry; + + gtk_widget_set_sensitive(vbox2, !(gpi == NULL || gpi->proxytype == PROXY_NONE)); +} + static void show_acct_mod(struct gaim_account *a) { /* This is the fucking modify account dialog. I've fucking seperated it into @@ -896,6 +1096,7 @@ generate_login_options(ma, ma->main); generate_user_options(ma, ma->main); generate_protocol_options(ma, ma->main); + generate_proxy_options(ma, ma->main); hbox = gtk_hbox_new(FALSE, 6); gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);