diff options
Diffstat (limited to 'capplets/network/gnome-network-preferences.c')
-rw-r--r-- | capplets/network/gnome-network-preferences.c | 448 |
1 files changed, 0 insertions, 448 deletions
diff --git a/capplets/network/gnome-network-preferences.c b/capplets/network/gnome-network-preferences.c deleted file mode 100644 index 5a6fceb1c..000000000 --- a/capplets/network/gnome-network-preferences.c +++ /dev/null @@ -1,448 +0,0 @@ -/* gnome-network-preferences.c: network preferences capplet - * - * Copyright (C) 2002 Sun Microsystems Inc. - * - * Written by: Mark McLoughlin <mark@skynet.ie> - * - * 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, 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. - */ - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif - -#include <libgnome/libgnome.h> -#include <gconf/gconf-client.h> -#include <glade/glade.h> -#include <libgnomevfs/gnome-vfs-uri.h> - -#include "capplet-util.h" -#include "gconf-property-editor.h" - -enum ProxyMode -{ - PROXYMODE_NONE, - PROXYMODE_MANUAL, - PROXYMODE_AUTO -}; - -static GEnumValue proxytype_values[] = { - { PROXYMODE_NONE, "PROXYMODE_NONE", "none"}, - { PROXYMODE_MANUAL, "PROXYMODE_MANUAL", "manual"}, - { PROXYMODE_AUTO, "PROXYMODE_AUTO", "auto"}, - { 0, NULL, NULL } -}; - -#define USE_PROXY_KEY "/system/http_proxy/use_http_proxy" -#define HTTP_PROXY_HOST_KEY "/system/http_proxy/host" -#define HTTP_PROXY_PORT_KEY "/system/http_proxy/port" -#define HTTP_USE_AUTH_KEY "/system/http_proxy/use_authentication" -#define HTTP_AUTH_USER_KEY "/system/http_proxy/authentication_user" -#define HTTP_AUTH_PASSWD_KEY "/system/http_proxy/authentication_password" -#define IGNORE_HOSTS_KEY "/system/http_proxy/ignore_hosts" -#define PROXY_MODE_KEY "/system/proxy/mode" -#define SECURE_PROXY_HOST_KEY "/system/proxy/secure_host" -#define SECURE_PROXY_PORT_KEY "/system/proxy/secure_port" -#define FTP_PROXY_HOST_KEY "/system/proxy/ftp_host" -#define FTP_PROXY_PORT_KEY "/system/proxy/ftp_port" -#define SOCKS_PROXY_HOST_KEY "/system/proxy/socks_host" -#define SOCKS_PROXY_PORT_KEY "/system/proxy/socks_port" -#define PROXY_AUTOCONFIG_URL_KEY "/system/proxy/autoconfig_url" - -static GtkWidget *details_dialog = NULL; -static GSList *ignore_hosts = NULL; -static GtkTreeModel *model = NULL; - -static GtkTreeModel * -create_listmodel() -{ - GtkListStore *store; - - store = gtk_list_store_new(1, G_TYPE_STRING); - - return GTK_TREE_MODEL(store); -} - -static GtkTreeModel * -populate_listmodel(GtkListStore *store, GSList *list) -{ - GtkTreeIter iter; - GSList *pointer; - - gtk_list_store_clear(store); - - pointer = list; - while(pointer) - { - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, 0, (char *) pointer->data, -1); - pointer = g_slist_next(pointer); - } - - return GTK_TREE_MODEL(store); -} - -static GtkWidget * -config_treeview(GtkTreeView *tree, GtkTreeModel *model) -{ - GtkCellRenderer *renderer; - - renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(tree), - -1, "Hosts", renderer, - "text", 0, NULL); - - gtk_tree_view_set_model(GTK_TREE_VIEW(tree), model); - - return GTK_WIDGET(tree); -} - -static void -cb_add_url (GtkButton *button, gpointer data) -{ - GladeXML *dialog = (GladeXML *) data; - gchar *new_url = NULL; - GConfClient *client; - - new_url = g_strdup(gtk_entry_get_text(GTK_ENTRY(WID("entry_url")))); - if (strlen (new_url) == 0) - return; - g_slist_append(ignore_hosts, new_url); - populate_listmodel(GTK_LIST_STORE(model), ignore_hosts); - gtk_entry_set_text(GTK_ENTRY(WID("entry_url")), ""); - - client = gconf_client_get_default (); - gconf_client_set_list (client, IGNORE_HOSTS_KEY, GCONF_VALUE_STRING, ignore_hosts, NULL); - g_object_unref (client); -} - -static void -cb_remove_url (GtkButton *button, gpointer data) -{ - GladeXML *dialog = (GladeXML *) data; - GtkTreeSelection *selection; - GtkTreeIter iter; - GConfClient *client; - - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(WID("treeview_ignore_host"))); - if (gtk_tree_selection_get_selected(selection, &model, &iter)) - { - gchar *url; - GSList *pointer; - - gtk_tree_model_get (model, &iter, 0, &url, -1); - - pointer = ignore_hosts; - while(pointer) - { - if(strcmp(url, (char *) pointer->data) == 0) - { - ignore_hosts = g_slist_delete_link(ignore_hosts, pointer); - break; - } - pointer = g_slist_next(pointer); - } - - g_free(url); - populate_listmodel(GTK_LIST_STORE(model), ignore_hosts); - - client = gconf_client_get_default (); - gconf_client_set_list(client, IGNORE_HOSTS_KEY, GCONF_VALUE_STRING, ignore_hosts, NULL); - g_object_unref (client); - } -} - -static void -cb_dialog_response (GtkDialog *dialog, gint response_id) -{ - if (response_id == GTK_RESPONSE_HELP) - capplet_help (GTK_WINDOW (dialog), - "user-guide.xml", - "goscustdesk-50"); - else - { - if(ignore_hosts) - g_slist_free(ignore_hosts); - - gtk_main_quit (); - } -} - -static void -cb_details_dialog_response (GtkDialog *dialog, gint response_id) -{ - if (response_id == GTK_RESPONSE_HELP) - capplet_help (GTK_WINDOW (dialog), - "user-guide.xml", - "goscustdesk-50"); - else { - gtk_widget_destroy (GTK_WIDGET (dialog)); - details_dialog = NULL; - } -} - -static void -cb_use_auth_toggled (GtkToggleButton *toggle, - GtkWidget *table) -{ - gtk_widget_set_sensitive (table, toggle->active); -} - -static void -cb_http_details_button_clicked (GtkWidget *button, - GtkWidget *parent) -{ - GladeXML *dialog; - GtkWidget *widget; - GConfPropertyEditor *peditor; - - if (details_dialog != NULL) { - gtk_window_present (GTK_WINDOW (details_dialog)); - gtk_widget_grab_focus (details_dialog); - return; - } - - dialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-network-preferences.glade", - "details_dialog", NULL); - - details_dialog = widget = WID ("details_dialog"); - - gtk_window_set_transient_for (GTK_WINDOW (widget), GTK_WINDOW (parent)); - - gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("use_auth_checkbutton"))->child), TRUE); - - g_signal_connect (G_OBJECT (WID ("use_auth_checkbutton")), - "toggled", - G_CALLBACK (cb_use_auth_toggled), - WID ("auth_table")); - - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_boolean ( - NULL, HTTP_USE_AUTH_KEY, WID ("use_auth_checkbutton"), - NULL)); - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_string ( - NULL, HTTP_AUTH_USER_KEY, WID ("username_entry"), - NULL)); - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_string ( - NULL, HTTP_AUTH_PASSWD_KEY, WID ("password_entry"), - NULL)); - - g_signal_connect (widget, "response", - G_CALLBACK (cb_details_dialog_response), NULL); - - capplet_set_icon (widget, "stock_proxy"); - - gtk_widget_show_all (widget); -} - -static GConfValue * -extract_proxy_host (GConfPropertyEditor *peditor, const GConfValue *orig) -{ - char const *entered_text = gconf_value_get_string (orig); - GConfValue *res = NULL; - - if (entered_text != NULL) { - GnomeVFSURI *uri = gnome_vfs_uri_new (entered_text); - if (uri != NULL) { - char const *host = gnome_vfs_uri_get_host_name (uri); - if (host != NULL) { - res = gconf_value_new (GCONF_VALUE_STRING); - gconf_value_set_string (res, host); - } - gnome_vfs_uri_unref (uri); - } - } - - if (res != NULL) - return res; - return gconf_value_copy (orig); -} - -static void -proxy_mode_radiobutton_clicked_cb (GtkWidget *widget, - GladeXML *dialog) -{ - GSList *mode_group; - int mode; - GConfClient *client; - - if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget))) - return; - - mode_group = g_slist_copy (gtk_radio_button_get_group - (GTK_RADIO_BUTTON (WID ("none_radiobutton")))); - mode_group = g_slist_reverse (mode_group); - mode = g_slist_index (mode_group, widget); - g_slist_free (mode_group); - - gtk_widget_set_sensitive (WID ("manual_box"), - mode == PROXYMODE_MANUAL); - gtk_widget_set_sensitive (WID ("auto_box"), - mode == PROXYMODE_AUTO); - client = gconf_client_get_default (); - gconf_client_set_bool (client, USE_PROXY_KEY, - mode == PROXYMODE_AUTO || mode == PROXYMODE_MANUAL, NULL); - g_object_unref (client); -} - -static void -connect_sensitivity_signals (GladeXML *dialog, GSList *mode_group) -{ - for (; mode_group != NULL; mode_group = mode_group->next) - { - g_signal_connect (G_OBJECT (mode_group->data), "clicked", - G_CALLBACK(proxy_mode_radiobutton_clicked_cb), - dialog); - } -} - -static void -setup_dialog (GladeXML *dialog) -{ - GConfPropertyEditor *peditor; - GSList *mode_group; - GType mode_type = 0; - GConfClient *client; - gint port_value; - - mode_type = g_enum_register_static ("NetworkPreferencesProxyType", - proxytype_values); - - /* There's a bug in peditors that cause them to not initialize the entry - * correctly. */ - client = gconf_client_get_default (); - - /* Hackety hack */ - gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("none_radiobutton"))->child), TRUE); - gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("manual_radiobutton"))->child), TRUE); - gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("auto_radiobutton"))->child), TRUE); - - /* Mode */ - mode_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (WID ("none_radiobutton"))); - connect_sensitivity_signals (dialog, mode_group); - - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_select_radio_with_enum (NULL, - PROXY_MODE_KEY, mode_group, mode_type, - TRUE, NULL)); - - /* Http */ - port_value = gconf_client_get_int (client, HTTP_PROXY_PORT_KEY, NULL); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (WID ("http_port_spinbutton")), (gdouble) port_value); - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_string ( - NULL, HTTP_PROXY_HOST_KEY, WID ("http_host_entry"), - "conv-from-widget-cb", extract_proxy_host, - NULL)); - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_integer ( - NULL, HTTP_PROXY_PORT_KEY, WID ("http_port_spinbutton"), - NULL)); - g_signal_connect (G_OBJECT (WID ("details_button")), - "clicked", - G_CALLBACK (cb_http_details_button_clicked), - WID ("network_dialog")); - - /* Secure */ - port_value = gconf_client_get_int (client, SECURE_PROXY_PORT_KEY, NULL); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (WID ("secure_port_spinbutton")), (gdouble) port_value); - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_string ( - NULL, SECURE_PROXY_HOST_KEY, WID ("secure_host_entry"), - "conv-from-widget-cb", extract_proxy_host, - NULL)); - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_integer ( - NULL, SECURE_PROXY_PORT_KEY, WID ("secure_port_spinbutton"), - NULL)); - - /* Ftp */ - port_value = gconf_client_get_int (client, FTP_PROXY_PORT_KEY, NULL); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (WID ("ftp_port_spinbutton")), (gdouble) port_value); - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_string ( - NULL, FTP_PROXY_HOST_KEY, WID ("ftp_host_entry"), - "conv-from-widget-cb", extract_proxy_host, - NULL)); - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_integer ( - NULL, FTP_PROXY_PORT_KEY, WID ("ftp_port_spinbutton"), - NULL)); - - /* Socks */ - port_value = gconf_client_get_int (client, SOCKS_PROXY_PORT_KEY, NULL); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (WID ("socks_port_spinbutton")), (gdouble) port_value); - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_string ( - NULL, SOCKS_PROXY_HOST_KEY, WID ("socks_host_entry"), - "conv-from-widget-cb", extract_proxy_host, - NULL)); - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_integer ( - NULL, SOCKS_PROXY_PORT_KEY, WID ("socks_port_spinbutton"), - NULL)); - - /* Autoconfiguration */ - peditor = GCONF_PROPERTY_EDITOR (gconf_peditor_new_string ( - NULL, PROXY_AUTOCONFIG_URL_KEY, WID ("autoconfig_entry"), - NULL)); - - g_signal_connect (WID ("network_dialog"), "response", - G_CALLBACK (cb_dialog_response), NULL); - - - gtk_label_set_use_markup (GTK_LABEL (WID ("label_ignore_host")), TRUE); - ignore_hosts = gconf_client_get_list(client, IGNORE_HOSTS_KEY, GCONF_VALUE_STRING, NULL); - g_object_unref (client); - - model = create_listmodel(); - populate_listmodel(GTK_LIST_STORE(model), ignore_hosts); - config_treeview(GTK_TREE_VIEW(WID("treeview_ignore_host")), model); - - g_signal_connect (WID ("button_add_url"), "clicked", - G_CALLBACK (cb_add_url), dialog); - g_signal_connect (WID ("entry_url"), "activate", - G_CALLBACK (cb_add_url), dialog); - g_signal_connect (WID ("button_remove_url"), "clicked", - G_CALLBACK (cb_remove_url), dialog); -} - -int -main (int argc, char **argv) -{ - GladeXML *dialog; - GConfClient *client; - GtkWidget *widget; - - bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - textdomain (GETTEXT_PACKAGE); - - gnome_program_init ("gnome-network-preferences", VERSION, - LIBGNOMEUI_MODULE, - argc, argv, GNOME_PARAM_NONE); - - client = gconf_client_get_default (); - gconf_client_add_dir (client, "/system/gnome-vfs", - GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); - gconf_client_add_dir (client, "/system/http_proxy", - GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); - gconf_client_add_dir (client, "/system/proxy", - GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); - - dialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-network-preferences.glade", - "network_dialog", NULL); - - setup_dialog (dialog); - widget = WID ("network_dialog"); - capplet_set_icon (widget, "stock_proxy"); - gtk_widget_show_all (widget); - gtk_main (); - - g_object_unref (client); - - return 0; -} |