aboutsummaryrefslogblamecommitdiffstats
path: root/modules/mail/em-network-prefs.c
blob: 9da5708cc0ec29cc7a1f5a2386058eec78c82622 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
  



                                                                
  



                                                                    
  
                                                                   
                                                                             
  
  



                                                           






                    

                             





                      
                        
                           
 
                                  
 


                                            


            

                                                                                                                           
 



                         

           
                                                        
 




                                             


           

                                               
 
                         
 

                                                                                                   









                                                                                           


                                            
 
                      
 

                                                                   
 
                                   


                                                           
 
                                                                 



                                                                       





                                     


                                     
                                                                  


           


                                                    
 
     

                                                                                            
                                                                                        
              
      
                                           
                               


                                                                                        



                                                                                          




                                                                                              

                                                                                        

                                                                                            
 





                                                                                      
                                                                                          



           

                                                 
 
                  







                                                                    
     
                                                


                                                  
 
                                                                       




                                                                                







                                                                                
                                                    
                                                                                       
                                                    
                                                                                        


           
                                           
                                            
 
                         

                           
                                              
 



                                                                       
 
          

                                                        


                                                                                   
                                                               
                                                                                                        

                                                                
                                                                   
                                                                                                    
         

 
           
                                                 
                                                  
 
                         
                           


                                              

                                          
                                                 





                                                                       


                                                                             


                                                         
 

                                                     
 

                                                                         
 



                                                                    





                                   



                                                                                       
 
                                      

 

                                    
                                                                                                     
                                                                                                     
                                                                                                         


           


                         


                                                   
                             




                                        









                                                                  





                                                  

                       
                   
                     
                                    
                        
                          
 

                                                                                                               
 

                                                                  
                                 



                                                                        


                                                     
                                                      
                                       


                                                 
                                                                     
                 
                                                       
                                                        
                                                                 



                              
                                                                               
 
                                                                       




                                                 
                                                                                                       
                                                                                           


                                                                                 
                                                
 
                                                                                                  
                                                                                               


                                                                                
                                                     
 

                                         

                                                                                                       
 

                                                                                          
                                                               


                                                                             

                                                                                  
      
 
                                                        
 


                                                                                                          
                                                                                              


                                                                                                    
                                                                                                    



                                                                                                  

                                                                                                  

                                                                                                      
                                                                          



                                                                                                
 
                                  
                                                     



                                                     
                                                        



                                                     
                                                           



                                                           
                                                     



                                                     
                                                        



                                                     
                                                       



                                                     
                                                       



                                                     
                                                               



                                                     
                                                                  



                                                     

                                                                                        





                                                               
     


                                                               
      


                                                               


                                                                                    
                                                   
 
                                                                         


                                                              
                                                                           


                                                               
                                                                          


                                                               
                   
                                                                             

                                                      

                                               

         


                                                                 
                                                                                   


                                                              
                                                                                       


                                                             
                                                                       
                                                                     
 
                                                                         
                                                                      
 
                                                                        
                                                                      
 





                                                                                








                                                                                

                                                                       
                                                           



                                                            
                                                 

                            
 

                                                                                   
 

                                 
/*
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) version 3.
 *
 * 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with the program; if not, see <http://www.gnu.org/licenses/>
 *
 *
 * Authors:
 *      Veerapuram Varadhan  <vvaradhan@novell.com>
 *
 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
 *
 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "em-network-prefs.h"

#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

#include <glib/gstdio.h>
#include <gdk/gdkkeysyms.h>

#include <e-util/e-util-private.h>

#include <mail/em-config.h>
#include <mail/em-folder-selection-button.h>
#include <mail/e-mail-junk-options.h>

#define d(x)

#define SETTINGS_KEY_NAME "evo-proxy-settings-key-name"
#define SET_KEY_NAME(_widget, _key) g_object_set_data_full (G_OBJECT (_widget), SETTINGS_KEY_NAME, g_strdup (_key), g_free)

G_DEFINE_TYPE (
    EMNetworkPrefs,
    em_network_prefs,
    GTK_TYPE_VBOX)

static void
em_network_prefs_class_init (EMNetworkPrefsClass *class)
{
}

static void
em_network_prefs_init (EMNetworkPrefs *prefs)
{
}

static void
toggle_button_toggled (GtkToggleButton *toggle,
                       EMNetworkPrefs *prefs)
{
    const gchar *key;

    key = g_object_get_data ((GObject *) toggle, SETTINGS_KEY_NAME);
    g_settings_set_boolean (prefs->proxy_settings, key, gtk_toggle_button_get_active (toggle));
    if (toggle == prefs->use_auth) {
        gboolean sensitivity = gtk_toggle_button_get_active (prefs->use_auth);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_auth_user, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_auth_pwd, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->auth_user, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->auth_pwd, sensitivity);
    }
}

static void
toggle_button_init (EMNetworkPrefs *prefs,
                    GtkToggleButton *toggle,
                    const gchar *key)
{
    gboolean bval;

    bval = g_settings_get_boolean (prefs->proxy_settings, key);
    gtk_toggle_button_set_active (toggle, bval);

    SET_KEY_NAME (toggle, key);
    g_signal_connect (
        toggle, "toggled",
        G_CALLBACK (toggle_button_toggled), prefs);

    if (!g_settings_is_writable (prefs->proxy_settings, key))
        gtk_widget_set_sensitive ((GtkWidget *) toggle, FALSE);
}

static GtkWidget *
emnp_widget_glade (EConfig *ec,
                   EConfigItem *item,
                   GtkWidget *parent,
                   GtkWidget *old,
                   gint position,
                   gpointer data)
{
    EMNetworkPrefs *prefs = data;

    return e_builder_get_widget (prefs->builder, item->label);
}

static void
emnp_set_sensitiveness (EMNetworkPrefs *prefs,
                        NetworkConfigProxyType type,
                        gboolean sensitivity)
{
#if 0
    if (type == NETWORK_PROXY_AUTOCONFIG) {
        gtk_widget_set_sensitive ((GtkWidget *) prefs->auto_proxy_url, sensitivity);
        d (g_print ("Setting sensitivity of autoconfig to: %d\n", sensitivity));
    } else
#endif
    if (type == NETWORK_PROXY_MANUAL) {
        gboolean state;

        gtk_widget_set_sensitive ((GtkWidget *) prefs->http_host, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->https_host, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->ignore_hosts, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->use_auth, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->http_port, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->https_port, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_ignore_hosts, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_http_host, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_http_port, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_https_host, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_https_port, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->socks_host, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->socks_port, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_socks_host, sensitivity);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_socks_port, sensitivity);

        state = sensitivity && gtk_toggle_button_get_active (prefs->use_auth);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_auth_user, state);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->lbl_auth_pwd, state);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->auth_user, state);
        gtk_widget_set_sensitive ((GtkWidget *) prefs->auth_pwd, state);

        d (g_print ("Setting sensitivity of manual proxy to: %d\n", sensitivity));
    }
}

static void
notify_proxy_type_changed (GtkWidget *widget,
                           EMNetworkPrefs *prefs)
{
    gint type;

    if (gtk_toggle_button_get_active (prefs->sys_proxy))
        type = NETWORK_PROXY_SYS_SETTINGS;
    else if (gtk_toggle_button_get_active (prefs->no_proxy))
        type = NETWORK_PROXY_DIRECT_CONNECTION;
    else if (gtk_toggle_button_get_active (prefs->manual_proxy))
        type = NETWORK_PROXY_MANUAL;
    else
#if 0
        type = NETWORK_PROXY_AUTOCONFIG;
#else
        type = NETWORK_PROXY_SYS_SETTINGS;
#endif

    g_settings_set_int (prefs->proxy_settings, "proxy-type", type);

    if (type == NETWORK_PROXY_DIRECT_CONNECTION ||
        type == NETWORK_PROXY_SYS_SETTINGS) {
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_MANUAL, FALSE);
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_AUTOCONFIG, FALSE);
    } else if (type == NETWORK_PROXY_AUTOCONFIG) {
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_MANUAL, FALSE);
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_AUTOCONFIG, TRUE);
    } else if (type == NETWORK_PROXY_MANUAL) {
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_AUTOCONFIG, FALSE);
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_MANUAL, TRUE);
    }

    if (type != NETWORK_PROXY_DIRECT_CONNECTION)
        g_settings_set_boolean (prefs->proxy_settings, "use-http-proxy", TRUE);
    else if (type != NETWORK_PROXY_SYS_SETTINGS)
        g_settings_set_boolean (prefs->proxy_settings, "use-http-proxy", FALSE);
}

static void
widget_entry_changed_cb (GtkWidget *widget,
                         gpointer user_data)
{
    const gchar *key;
    const gchar *value;
    gint port = -1;
    GSettings *proxy_settings = user_data;

    g_return_if_fail (proxy_settings != NULL);

    key = g_object_get_data (G_OBJECT (widget), SETTINGS_KEY_NAME);
    g_return_if_fail (key != NULL);

    /*
     * Do not change the order of comparison -
     * GtkSpinButton is an extended form of GtkEntry
    */
    if (GTK_IS_SPIN_BUTTON (widget)) {
        port = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
        g_settings_set_int (proxy_settings, key, port);
        d (g_print ("%s:%s: %s is SpinButton: value = [%d]\n", G_STRLOC, G_STRFUNC, key, port));
    } else if (GTK_IS_ENTRY (widget)) {
        value = gtk_entry_get_text (GTK_ENTRY (widget));
        g_settings_set_string (proxy_settings, key, value);
        d (g_print ("%s:%s: %s is Entry: value = [%s]\n", G_STRLOC, G_STRFUNC, key, value));
    }
}

static void
ignore_hosts_entry_changed_cb (GtkWidget *widget,
                               gpointer user_data)
{
    const gchar *key;
    const gchar *value;
    gchar **split;
    GPtrArray *ptrs;
    GSettings *proxy_settings = user_data;

    g_return_if_fail (widget != NULL);
    g_return_if_fail (GTK_IS_ENTRY (widget));
    g_return_if_fail (proxy_settings != NULL);

    key = g_object_get_data (G_OBJECT (widget), SETTINGS_KEY_NAME);
    g_return_if_fail (key != NULL);

    ptrs = g_ptr_array_new_with_free_func (g_free);

    /* transform comma-separated list of ignore_hosts to a string-list */
    value = gtk_entry_get_text (GTK_ENTRY (widget));
    split = g_strsplit (value ? value : "", ",", -1);
    if (split) {
        gint ii;

        for (ii = 0; split[ii]; ii++) {
            const gchar *tmp = split[ii];

            if (tmp && *tmp) {
                gchar *val = g_strstrip (g_strdup (tmp));

                if (val && *val)
                    g_ptr_array_add (ptrs, val);
                else
                    g_free (val);
            }
        }

        g_strfreev (split);
    }

    /* NULL-terminated array of strings */
    g_ptr_array_add (ptrs, NULL);

    g_settings_set_strv (proxy_settings, key, (const gchar * const *) ptrs->pdata);

    g_ptr_array_free (ptrs, TRUE);
}

/* plugin meta-data */
static EMConfigItem emnp_items[] = {
    { E_CONFIG_BOOK, (gchar *) "", (gchar *) "network_preferences_toplevel", emnp_widget_glade },
    { E_CONFIG_PAGE, (gchar *) "00.general", (gchar *) "vboxNetworkGeneral", emnp_widget_glade },
    { E_CONFIG_SECTION, (gchar *) "00.general/00.proxy", (gchar *) "proxy-vbox", emnp_widget_glade },
};

static void
emnp_free (EConfig *ec,
           GSList *items,
           gpointer data)
{
    /* the prefs data is freed automagically */

    g_slist_free (items);
}

static void
emnp_set_markups (EMNetworkPrefs *prefs)
{
    GtkWidget *child;

    child = gtk_bin_get_child (GTK_BIN (prefs->sys_proxy));
    gtk_label_set_use_markup (GTK_LABEL (child), TRUE);

    child = gtk_bin_get_child (GTK_BIN (prefs->no_proxy));
    gtk_label_set_use_markup (GTK_LABEL (child), TRUE);

    child = gtk_bin_get_child (GTK_BIN (prefs->manual_proxy));
    gtk_label_set_use_markup (GTK_LABEL (child), TRUE);
}

static void
em_network_prefs_construct (EMNetworkPrefs *prefs)
{
    GtkWidget *toplevel;
    GSList *l;
    gchar **ignore;
    gchar *buf;
    EMConfig *ec;
    EMConfigTargetPrefs *target;
    gboolean locked;
    gint i, val, port;

    prefs->proxy_settings = g_settings_new ("org.gnome.evolution.shell.network-config");
    g_object_set_data_full (G_OBJECT (prefs), "proxy-settings-obj", prefs->proxy_settings, g_object_unref);

    /* Make sure our custom widget classes are registered with
     * GType before we load the GtkBuilder definition file. */
    E_TYPE_MAIL_JUNK_OPTIONS;
    EM_TYPE_FOLDER_SELECTION_BUTTON;

    prefs->builder = gtk_builder_new ();
    e_load_ui_builder_definition (prefs->builder, "mail-config.ui");

    /** @HookPoint-EMConfig: Network Preferences
     * @Id: org.gnome.evolution.mail.networkPrefs
     * @Class: org.gnome.evolution.mail.config:1.0
     * @Target: EMConfigTargetPrefs
     *
     * The network preferences settings page.
     */
    ec = em_config_new ("org.gnome.evolution.mail.networkPrefs");
    l = NULL;
    for (i = 0; i < G_N_ELEMENTS (emnp_items); i++)
        l = g_slist_prepend (l, &emnp_items[i]);
    e_config_add_items ((EConfig *) ec, l, emnp_free, prefs);

    /* Proxy tab */

    /* Default Behavior */
    locked = !g_settings_is_writable (prefs->proxy_settings, "proxy-type");

    val = g_settings_get_int (prefs->proxy_settings, "proxy-type");

    /* no auto-proxy at the moment */
    if (val == NETWORK_PROXY_AUTOCONFIG)
        val = NETWORK_PROXY_SYS_SETTINGS;

    prefs->sys_proxy = GTK_TOGGLE_BUTTON (e_builder_get_widget (prefs->builder, "rdoSysSettings"));
    gtk_toggle_button_set_active (prefs->sys_proxy, val == NETWORK_PROXY_SYS_SETTINGS);
    if (locked)
        gtk_widget_set_sensitive ((GtkWidget *) prefs->sys_proxy, FALSE);

    d (g_print ("Sys settings ----!!! \n"));

    prefs->no_proxy = GTK_TOGGLE_BUTTON (e_builder_get_widget (prefs->builder, "rdoNoProxy"));
    gtk_toggle_button_set_active (prefs->no_proxy, val == NETWORK_PROXY_DIRECT_CONNECTION);
    if (locked)
        gtk_widget_set_sensitive ((GtkWidget *) prefs->no_proxy, FALSE);

    d (g_print ("No proxy settings ----!!! \n"));

    /* no auto-proxy at the moment */
#if 0
    prefs->auto_proxy = GTK_TOGGLE_BUTTON (e_builder_get_widget (prefs->builder, "rdoAutoConfig"));
    prefs->auto_proxy_url = GTK_ENTRY (e_builder_get_widget (prefs->builder, "txtAutoConfigUrl"));

    gtk_toggle_button_set_active (prefs->auto_proxy, val == NETWORK_PROXY_AUTOCONFIG);

    SET_KEY_NAME (prefs->auto_proxy_url, "autoconfig-url");
    g_signal_connect (
        prefs->auto_proxy_url, "changed",
        G_CALLBACK (widget_entry_changed_cb), prefs->proxy_settings);
    if (locked)
        gtk_widget_set_sensitive ((GtkWidget *) prefs->auto_proxy, FALSE);
#endif

    d (g_print ("Auto config settings ----!!! \n"));

    prefs->manual_proxy = GTK_TOGGLE_BUTTON (e_builder_get_widget (prefs->builder, "rdoManualProxy"));
    prefs->http_host = GTK_ENTRY (e_builder_get_widget (prefs->builder, "txtHttpHost"));
    prefs->https_host = GTK_ENTRY (e_builder_get_widget (prefs->builder, "txtHttpsHost"));
    prefs->socks_host = GTK_ENTRY (e_builder_get_widget (prefs->builder, "txtSocksHost"));
    prefs->ignore_hosts = GTK_ENTRY (e_builder_get_widget (prefs->builder, "txtIgnoreHosts"));
    prefs->http_port = GTK_SPIN_BUTTON (e_builder_get_widget (prefs->builder, "spnHttpPort"));
    prefs->https_port = GTK_SPIN_BUTTON (e_builder_get_widget (prefs->builder, "spnHttpsPort"));
    prefs->socks_port = GTK_SPIN_BUTTON (e_builder_get_widget (prefs->builder, "spnSocksPort"));
    prefs->lbl_http_host = GTK_LABEL (e_builder_get_widget (prefs->builder, "lblHttpHost"));
    prefs->lbl_http_port = GTK_LABEL (e_builder_get_widget (prefs->builder, "lblHttpPort"));
    prefs->lbl_https_host = GTK_LABEL (e_builder_get_widget (prefs->builder, "lblHttpsHost"));
    prefs->lbl_https_port = GTK_LABEL (e_builder_get_widget (prefs->builder, "lblHttpsPort"));
    prefs->lbl_socks_host = GTK_LABEL (e_builder_get_widget (prefs->builder, "lblSocksHost"));
    prefs->lbl_socks_port = GTK_LABEL (e_builder_get_widget (prefs->builder, "lblSocksPort"));
    prefs->lbl_ignore_hosts = GTK_LABEL (e_builder_get_widget (prefs->builder, "lblIgnoreHosts"));
    prefs->use_auth = GTK_TOGGLE_BUTTON (e_builder_get_widget (prefs->builder, "chkUseAuth"));
    toggle_button_init (prefs, prefs->use_auth, "use-authentication");
    prefs->lbl_auth_user = GTK_LABEL (e_builder_get_widget (prefs->builder, "lblAuthUser"));
    prefs->lbl_auth_pwd = GTK_LABEL (e_builder_get_widget (prefs->builder, "lblAuthPwd"));
    prefs->auth_user = GTK_ENTRY (e_builder_get_widget (prefs->builder, "txtAuthUser"));
    prefs->auth_pwd = GTK_ENTRY (e_builder_get_widget (prefs->builder, "txtAuthPwd"));

    /* Manual proxy options */
    SET_KEY_NAME (prefs->http_host, "http-host");
    g_signal_connect (
        prefs->http_host, "changed",
        G_CALLBACK (widget_entry_changed_cb),
        prefs->proxy_settings);
    SET_KEY_NAME (prefs->https_host, "secure-host");
    g_signal_connect (
        prefs->https_host, "changed",
        G_CALLBACK (widget_entry_changed_cb),
        prefs->proxy_settings);
    SET_KEY_NAME (prefs->ignore_hosts, "ignore-hosts");
    g_signal_connect (
        prefs->ignore_hosts, "changed",
        G_CALLBACK (ignore_hosts_entry_changed_cb),
        prefs->proxy_settings);
    SET_KEY_NAME (prefs->http_port, "http-port");
    g_signal_connect (
        prefs->http_port, "value_changed",
        G_CALLBACK (widget_entry_changed_cb),
        prefs->proxy_settings);
    SET_KEY_NAME (prefs->https_port, "secure-port");
    g_signal_connect (
        prefs->https_port, "value_changed",
        G_CALLBACK (widget_entry_changed_cb),
        prefs->proxy_settings);
    SET_KEY_NAME (prefs->socks_host, "socks-host");
    g_signal_connect (
        prefs->socks_host, "changed",
        G_CALLBACK (widget_entry_changed_cb),
        prefs->proxy_settings);
    SET_KEY_NAME (prefs->socks_port, "socks-port");
    g_signal_connect (
        prefs->socks_port, "value_changed",
        G_CALLBACK (widget_entry_changed_cb),
        prefs->proxy_settings);
    SET_KEY_NAME (prefs->auth_user, "authentication-user");
    g_signal_connect (
        prefs->auth_user, "changed",
        G_CALLBACK (widget_entry_changed_cb),
        prefs->proxy_settings);
    SET_KEY_NAME (prefs->auth_pwd, "authentication-password");
    g_signal_connect (
        prefs->auth_pwd, "changed",
        G_CALLBACK (widget_entry_changed_cb),
        prefs->proxy_settings);

    gtk_toggle_button_set_active (prefs->manual_proxy, val == NETWORK_PROXY_MANUAL);
    g_signal_connect (
        prefs->sys_proxy, "toggled",
        G_CALLBACK (notify_proxy_type_changed), prefs);
    g_signal_connect (
        prefs->no_proxy, "toggled",
        G_CALLBACK (notify_proxy_type_changed), prefs);
#if 0
    g_signal_connect (
        prefs->auto_proxy, "toggled",
        G_CALLBACK (notify_proxy_type_changed), prefs);
#endif
    g_signal_connect (
        prefs->manual_proxy, "toggled",
        G_CALLBACK (notify_proxy_type_changed), prefs);

    if (locked)
        gtk_widget_set_sensitive ((GtkWidget *) prefs->manual_proxy, FALSE);
    d (g_print ("Manual settings ----!!! \n"));

    buf = g_settings_get_string (prefs->proxy_settings, "http-host");
    gtk_entry_set_text (prefs->http_host, buf ? buf : "");
    g_free (buf);

    buf = g_settings_get_string (prefs->proxy_settings, "secure-host");
    gtk_entry_set_text (prefs->https_host, buf ? buf : "");
    g_free (buf);

    buf = g_settings_get_string (prefs->proxy_settings, "socks-host");
    gtk_entry_set_text (prefs->socks_host, buf ? buf : "");
    g_free (buf);

    buf = NULL;
    ignore = g_settings_get_strv (prefs->proxy_settings, "ignore-hosts");
    if (ignore) {
        /* reconstruct comma-separated list */
        buf = g_strjoinv (",", ignore);
        g_strfreev (ignore);
    }

    gtk_entry_set_text (prefs->ignore_hosts, buf ? buf : "");
    g_free (buf);

    buf = g_settings_get_string (prefs->proxy_settings, "authentication-user");
    gtk_entry_set_text (prefs->auth_user, buf ? buf : "");
    g_free (buf);

    buf = g_settings_get_string (prefs->proxy_settings, "authentication-password");
    gtk_entry_set_text (prefs->auth_pwd, buf ? buf : "");
    g_free (buf);

    port = g_settings_get_int (prefs->proxy_settings, "http-port");
    gtk_spin_button_set_value (prefs->http_port, (gdouble) port);

    port = g_settings_get_int (prefs->proxy_settings, "secure-port");
    gtk_spin_button_set_value (prefs->https_port, (gdouble) port);

    port = g_settings_get_int (prefs->proxy_settings, "socks-port");
    gtk_spin_button_set_value (prefs->socks_port, (gdouble) port);

    emnp_set_markups (prefs);

    if (val == NETWORK_PROXY_DIRECT_CONNECTION ||
        val == NETWORK_PROXY_SYS_SETTINGS) {
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_MANUAL, FALSE);
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_AUTOCONFIG, FALSE);
    } else if (val == NETWORK_PROXY_AUTOCONFIG) {
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_MANUAL, FALSE);
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_AUTOCONFIG, TRUE);
    } else if (val == NETWORK_PROXY_MANUAL) {
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_AUTOCONFIG, FALSE);
        emnp_set_sensitiveness (prefs, NETWORK_PROXY_MANUAL, TRUE);
    }

    /* get our toplevel widget */
    target = em_config_target_new_prefs (ec);
    e_config_set_target ((EConfig *) ec, (EConfigTarget *) target);
    toplevel = e_config_create_widget ((EConfig *) ec);
    gtk_container_add (GTK_CONTAINER (prefs), toplevel);
}

GtkWidget *
em_network_prefs_new (EPreferencesWindow *window)
{
    EMNetworkPrefs *new;

    new = (EMNetworkPrefs *) g_object_new (em_network_prefs_get_type (), NULL);
    em_network_prefs_construct (new);

    return (GtkWidget *) new;
}