summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtul Anand <atulhjp@gmail.com>2016-12-06 16:58:46 +0530
committerThomas Haller <thaller@redhat.com>2016-12-16 15:04:50 +0100
commit68b93510a85fb13c32117e46c047ee273b7e868d (patch)
treea6d4d9d207a4f7e048fec4b63e0ed03adf76deef
parente5140343d769c48ff2516b18251881cb06e49601 (diff)
downloadnetwork-manager-applet-68b93510a85fb13c32117e46c047ee273b7e868d.tar.gz
nm-c-e/proxy: Support proxy handling similar to nmcli.
This patch removes multiple entries/widgets following conventional GUI and introduces basic features following what nmcli provides for proxy handling and manipulation. It is an unfair idea to follow the co- ventional GUI and provide entries for http/https/ftp/socks which are actually browser protocols and standard browsers have already been provinding proxy feature. On the other side we can't provide entries for all schemes (there are a lot, smtp://, mail://, gopher://, etc). Even if nm-c-e provides them, it would only be able to create protocol based scripts not general ones because the later one require more pa- rameters than just proxy:port and excludes. NetworkManager is intended to provide systemwide proxy settings, so it should look for features that are common for all.
-rw-r--r--src/connection-editor/ce-page-proxy.ui388
-rw-r--r--src/connection-editor/page-proxy.c364
2 files changed, 131 insertions, 621 deletions
diff --git a/src/connection-editor/ce-page-proxy.ui b/src/connection-editor/ce-page-proxy.ui
index dcb65584..02e2a957 100644
--- a/src/connection-editor/ce-page-proxy.ui
+++ b/src/connection-editor/ce-page-proxy.ui
@@ -2,48 +2,6 @@
<!-- Generated with glade 3.19.0 -->
<interface>
<requires lib="gtk+" version="3.4"/>
- <object class="GtkAdjustment" id="ftp_port_adjustment">
- <property name="upper">65535</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
- <object class="GtkAdjustment" id="http_port_adjustment">
- <property name="upper">65535</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
- <object class="GtkListStore" id="proxy_method_liststore">
- <columns>
- <!-- column-name method -->
- <column type="gchararray"/>
- <!-- column-name Value -->
- <column type="gchararray"/>
- </columns>
- <data>
- <row>
- <col id="0" translatable="yes">Automatic</col>
- <col id="1" translatable="yes">auto</col>
- </row>
- <row>
- <col id="0" translatable="yes">Manual</col>
- <col id="1" translatable="yes">manual</col>
- </row>
- <row>
- <col id="0" translatable="yes">None</col>
- <col id="1" translatable="yes">none</col>
- </row>
- </data>
- </object>
- <object class="GtkAdjustment" id="socks_port_adjustment">
- <property name="upper">65535</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
- <object class="GtkAdjustment" id="ssl_port_adjustment">
- <property name="upper">65535</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
<object class="GtkBox" id="ProxyPage">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -51,7 +9,7 @@
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
- <object class="GtkBox" id="box2">
+ <object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">12</property>
@@ -73,9 +31,8 @@
<property name="can_focus">False</property>
<property name="active_id">0</property>
<items>
- <item id="0" translatable="yes">Automatic</item>
- <item id="1" translatable="yes">Manual</item>
- <item id="2" translatable="yes">None</item>
+ <item id="0" translatable="yes">None</item>
+ <item id="1" translatable="yes">Automatic</item>
</items>
</object>
<packing>
@@ -92,152 +49,32 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="box1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">10</property>
- <child>
- <object class="GtkLabel" id="proxy_http_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">HTTP Proxy:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="proxy_http_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="proxy_http_port_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Port:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="proxy_http_port_spin">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">http_port_adjustment</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="proxy_http_default_checkbutton">
- <property name="label" translatable="yes">Default</property>
+ <object class="GtkCheckButton" id="proxy_browser_only_checkbutton">
+ <property name="label" translatable="yes">For Browser Only</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Make HTTP proxy default for all protocols.</property>
+ <property name="tooltip_text" translatable="yes">Use this Proxy Configuration for Only Browser Clients/schemes.</property>
<property name="halign">start</property>
- <property name="margin_left">100</property>
<property name="xalign">0.5</property>
- <property name="image_position">bottom</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="box5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">10</property>
- <child>
- <object class="GtkLabel" id="proxy_ssl_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">SSL Proxy: </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="proxy_ssl_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="proxy_ssl_port_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Port:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="proxy_ssl_port_spin">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">ssl_port_adjustment</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
- <object class="GtkBox" id="box6">
+ <object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">10</property>
<child>
- <object class="GtkLabel" id="proxy_ftp_label">
+ <object class="GtkLabel" id="proxy_pac_url_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label" translatable="yes">FTP Proxy: </property>
+ <property name="label" translatable="yes">PAC URL: </property>
</object>
<packing>
<property name="expand">False</property>
@@ -246,9 +83,10 @@
</packing>
</child>
<child>
- <object class="GtkEntry" id="proxy_ftp_entry">
+ <object class="GtkEntry" id="proxy_pac_url_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="tooltip_text" translatable="yes">URL from where PAC Script is to be obtained.</property>
</object>
<packing>
<property name="expand">True</property>
@@ -256,136 +94,36 @@
<property name="position">1</property>
</packing>
</child>
- <child>
- <object class="GtkLabel" id="proxy_ftp_port_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Port:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="proxy_ftp_port_spin">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">ftp_port_adjustment</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">4</property>
+ <property name="position">2</property>
</packing>
</child>
<child>
- <object class="GtkBox" id="box7">
+ <object class="GtkBox" id="box3">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">10</property>
- <child>
- <object class="GtkLabel" id="proxy_socks_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">SOCKS Proxy:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="proxy_socks_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="spacing">4</property>
<child>
- <object class="GtkLabel" id="proxy_socks_port_label">
+ <object class="GtkLabel" id="proxy_pac_script_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="label" translatable="yes">Port:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkSpinButton" id="proxy_socks_port_spin">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">socks_port_adjustment</property>
+ <property name="label" translatable="yes">PAC Script: </property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">5</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="proxy_socks_version_checkbutton">
- <property name="label" translatable="yes">SOCKS v5</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Default is SOCKS v4.</property>
- <property name="halign">start</property>
- <property name="margin_left">100</property>
- <property name="xalign">0.5</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">6</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="box8">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">10</property>
- <child>
- <object class="GtkLabel" id="proxy_no_proxy_for_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">No Proxy For:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkEntry" id="proxy_no_proxy_for_entry">
+ <object class="GtkButton" id="proxy_pac_script_import_button">
+ <property name="label" translatable="yes">Import script from a file...</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">List of hosts for proxy exclusion eg: "*mydomain.com".</property>
+ <property name="receives_default">True</property>
</object>
<packing>
<property name="expand">True</property>
@@ -397,97 +135,39 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">7</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="proxy_browser_only_checkbutton">
- <property name="label" translatable="yes">For Browser Only</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="tooltip_text" translatable="yes">Use this Proxy Configuration for Only Browser Clients/schemes.</property>
- <property name="halign">start</property>
- <property name="margin_left">100</property>
- <property name="xalign">0.5</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">8</property>
+ <property name="position">3</property>
</packing>
</child>
<child>
- <object class="GtkBox" id="box9">
+ <object class="GtkBox" id="box4">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">10</property>
- <child>
- <object class="GtkLabel" id="proxy_pac_url_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">PAC URL: </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
<child>
- <object class="GtkEntry" id="proxy_pac_url_entry">
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="tooltip_text" translatable="yes">URL from where PAC Script is to be obtained.</property>
+ <property name="shadow_type">in</property>
+ <property name="min_content_height">100</property>
+ <child>
+ <object class="GtkTextView" id="proxy_pac_script_window">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ </child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">9</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="box3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">4</property>
- <child>
- <object class="GtkLabel" id="proxy_pac_script_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">PAC Script: </property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
- <child>
- <object class="GtkFileChooserButton" id="proxy_pac_script_button">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="title" translatable="yes">Select a PAC File</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">10</property>
+ <property name="position">4</property>
</packing>
</child>
</object>
diff --git a/src/connection-editor/page-proxy.c b/src/connection-editor/page-proxy.c
index 8711f9dc..47bbe35e 100644
--- a/src/connection-editor/page-proxy.c
+++ b/src/connection-editor/page-proxy.c
@@ -37,32 +37,6 @@ typedef struct {
/* Method */
GtkComboBox *method;
- /* HTTP Proxy */
- GtkWidget *http_proxy_label;
- GtkEntry *http_proxy;
- GtkSpinButton *http_port;
- GtkCheckButton *http_default;
-
- /* SSL Proxy */
- GtkWidget *ssl_proxy_label;
- GtkEntry *ssl_proxy;
- GtkSpinButton *ssl_port;
-
- /* FTP Proxy */
- GtkWidget *ftp_proxy_label;
- GtkEntry *ftp_proxy;
- GtkSpinButton *ftp_port;
-
- /* SOCKS Proxy */
- GtkWidget *socks_proxy_label;
- GtkEntry *socks_proxy;
- GtkSpinButton *socks_port;
- GtkCheckButton *socks_version_5;
-
- /* NO PROXY FOR */
- GtkWidget *no_proxy_for_label;
- GtkEntry *no_proxy_for;
-
/* Browser Only */
GtkCheckButton *browser_only;
@@ -72,12 +46,12 @@ typedef struct {
/* PAC Script */
GtkWidget *pac_script_label;
- GtkFileChooser *pac_script;
+ GtkButton *pac_script_import_button;
+ GtkTextView *pac_script_window;
} CEPageProxyPrivate;
-#define PROXY_METHOD_AUTO 0
-#define PROXY_METHOD_MANUAL 1
-#define PROXY_METHOD_NONE 2
+#define PROXY_METHOD_NONE 0
+#define PROXY_METHOD_AUTO 1
static void
proxy_private_init (CEPageProxy *self)
@@ -89,34 +63,20 @@ proxy_private_init (CEPageProxy *self)
priv->method = GTK_COMBO_BOX (gtk_builder_get_object (builder, "proxy_method"));
- priv->http_proxy_label = GTK_WIDGET (gtk_builder_get_object (builder, "proxy_http_label"));
- priv->http_proxy = GTK_ENTRY (gtk_builder_get_object (builder, "proxy_http_entry"));
- priv->http_port = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "proxy_http_port_spin"));
- priv->http_default = GTK_CHECK_BUTTON (gtk_builder_get_object (builder, "proxy_http_default_checkbutton"));
-
- priv->ssl_proxy_label = GTK_WIDGET (gtk_builder_get_object (builder, "proxy_ssl_label"));
- priv->ssl_proxy = GTK_ENTRY (gtk_builder_get_object (builder, "proxy_ssl_entry"));
- priv->ssl_port = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "proxy_ssl_port_spin"));
-
- priv->ftp_proxy_label = GTK_WIDGET (gtk_builder_get_object (builder, "proxy_ftp_label"));
- priv->ftp_proxy = GTK_ENTRY (gtk_builder_get_object (builder, "proxy_ftp_entry"));
- priv->ftp_port = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "proxy_ftp_port_spin"));
-
- priv->socks_proxy_label = GTK_WIDGET (gtk_builder_get_object (builder, "proxy_socks_label"));
- priv->socks_proxy = GTK_ENTRY (gtk_builder_get_object (builder, "proxy_socks_entry"));
- priv->socks_port = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "proxy_socks_port_spin"));
- priv->socks_version_5 = GTK_CHECK_BUTTON (gtk_builder_get_object (builder, "proxy_socks_version_checkbutton"));
-
- priv->no_proxy_for_label = GTK_WIDGET (gtk_builder_get_object (builder, "proxy_no_proxy_for_label"));
- priv->no_proxy_for = GTK_ENTRY (gtk_builder_get_object (builder, "proxy_no_proxy_for_entry"));
-
priv->browser_only = GTK_CHECK_BUTTON (gtk_builder_get_object (builder, "proxy_browser_only_checkbutton"));
priv->pac_url_label = GTK_WIDGET (gtk_builder_get_object (builder, "proxy_pac_url_label"));
priv->pac_url = GTK_ENTRY (gtk_builder_get_object (builder, "proxy_pac_url_entry"));
priv->pac_script_label = GTK_WIDGET (gtk_builder_get_object (builder, "proxy_pac_script_label"));
- priv->pac_script = GTK_FILE_CHOOSER (gtk_builder_get_object (builder, "proxy_pac_script_button"));
+ priv->pac_script_import_button = GTK_BUTTON (gtk_builder_get_object (builder, "proxy_pac_script_import_button"));
+ priv->pac_script_window = GTK_TEXT_VIEW (gtk_builder_get_object (builder, "proxy_pac_script_window"));
+}
+
+static void
+stuff_changed (GtkWidget *w, gpointer user_data)
+{
+ ce_page_changed (CE_PAGE (user_data));
}
static void
@@ -124,85 +84,59 @@ method_changed (GtkComboBox *combo, gpointer user_data)
{
CEPageProxy *self = user_data;
CEPageProxyPrivate *priv = CE_PAGE_PROXY_GET_PRIVATE (self);
- int method;
- const char *filename = NULL;
-
- method = gtk_combo_box_get_active (combo);
-
- if (method == PROXY_METHOD_AUTO || method == PROXY_METHOD_NONE) {
- gtk_widget_set_sensitive (GTK_WIDGET (priv->http_proxy_label), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->http_proxy), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->http_port), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->http_default), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ssl_proxy_label), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ssl_proxy), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ssl_port), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ftp_proxy_label), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ftp_proxy), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ftp_port), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->socks_proxy_label), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->socks_proxy), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->socks_port), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->socks_version_5), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->no_proxy_for_label), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->no_proxy_for), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_url_label), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_url), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script_label), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script), TRUE);
-
- gtk_entry_set_text (priv->http_proxy, "");
- gtk_spin_button_set_value (priv->http_port, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->http_default), FALSE);
- gtk_entry_set_text (priv->ssl_proxy, "");
- gtk_spin_button_set_value (priv->ssl_port, 0);
- gtk_entry_set_text (priv->ftp_proxy, "");
- gtk_spin_button_set_value (priv->ftp_port, 0);
- gtk_entry_set_text (priv->socks_proxy, "");
- gtk_spin_button_set_value (priv->socks_port, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->socks_version_5), FALSE);
- gtk_entry_set_text (priv->no_proxy_for, "");
-
- if (method == PROXY_METHOD_NONE) {
- gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_url_label), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_url), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script_label), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script), FALSE);
-
- gtk_entry_set_text (priv->pac_url, "");
-
- filename = gtk_file_chooser_get_filename (priv->pac_script);
- if (filename)
- gtk_file_chooser_unselect_filename (priv->pac_script, filename);
- }
- } else {
- gtk_widget_set_sensitive (GTK_WIDGET (priv->http_proxy_label), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->http_proxy), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->http_port), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->http_default), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ssl_proxy_label), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ssl_proxy), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ssl_port), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ftp_proxy_label), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ftp_proxy), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->ftp_port), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->socks_proxy_label), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->socks_proxy), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->socks_port), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->socks_version_5), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->no_proxy_for_label), TRUE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->no_proxy_for), TRUE);
+ int method = gtk_combo_box_get_active (combo);
+
+ if (method == PROXY_METHOD_NONE) {
gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_url_label), FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_url), FALSE);
gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script_label), FALSE);
- gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script), FALSE);
-
- gtk_entry_set_text (priv->pac_url, "");
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script_import_button), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script_window), FALSE);
+ } else {
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_url_label), TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_url), TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script_label), TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script_import_button), TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->pac_script_window), TRUE);
+ }
+}
- filename = gtk_file_chooser_get_filename (priv->pac_script);
- if (filename)
- gtk_file_chooser_unselect_filename (priv->pac_script, filename);
+static void
+import_button_clicked_cb (GtkWidget *widget, CEPageProxy *self)
+{
+ CEPageProxyPrivate *priv = CE_PAGE_PROXY_GET_PRIVATE (self);
+ GtkWidget *dialog, *toplevel;
+ GtkTextBuffer *buffer;
+ char *filename, *script = NULL;
+ gsize len;
+
+ toplevel = gtk_widget_get_toplevel (CE_PAGE (self)->page);
+ g_return_if_fail (toplevel);
+ g_return_if_fail (gtk_widget_is_toplevel (toplevel));
+
+ dialog = gtk_file_chooser_dialog_new (_("Select file to import"),
+ GTK_WINDOW (toplevel),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
+ if (!filename)
+ goto out;
+
+ g_file_get_contents (filename, &script, &len, NULL);
+ buffer = gtk_text_view_get_buffer (priv->pac_script_window);
+ gtk_text_buffer_set_text (buffer, script ?: "", -1);
+
+ g_free (filename);
+ g_free (script);
}
+
+out:
+ gtk_widget_destroy (dialog);
}
static void
@@ -211,10 +145,8 @@ populate_ui (CEPageProxy *self)
CEPageProxyPrivate *priv = CE_PAGE_PROXY_GET_PRIVATE (self);
NMSettingProxy *setting = priv->setting;
NMSettingProxyMethod s_method;
- GString *string = NULL;
- char **iter, **excludes = NULL;
- gboolean http_default = FALSE;
- const char *tmp = NULL, *filename = NULL;
+ GtkTextBuffer *buffer;
+ const char *tmp = NULL;
/* Method */
s_method = nm_setting_proxy_get_method (setting);
@@ -227,65 +159,20 @@ populate_ui (CEPageProxy *self)
gtk_entry_set_text (priv->pac_url, tmp ? tmp : "");
/* Pac Script */
- filename = nm_setting_proxy_get_pac_script (setting);
- if (filename)
- gtk_file_chooser_set_filename (priv->pac_script, filename);
-
- break;
- case NM_SETTING_PROXY_METHOD_MANUAL:
- gtk_combo_box_set_active (priv->method, PROXY_METHOD_MANUAL);
-
- /* No Proxy For */
- string = g_string_new ("");
- excludes = nm_setting_proxy_get_no_proxy_for (setting);
- if (excludes) {
- for (iter = excludes; *iter; iter++) {
- if (string->len)
- g_string_append (string, ", ");
- g_string_append (string, *iter);
- }
- }
- gtk_entry_set_text (priv->no_proxy_for, string->str);
- g_string_free (string, TRUE);
-
- /* HTTP Proxy */
- tmp = nm_setting_proxy_get_http_proxy (setting);
- gtk_entry_set_text (priv->http_proxy, tmp ? tmp : "");
- gtk_spin_button_set_value (priv->http_port,
- (gdouble) nm_setting_proxy_get_http_port (setting));
-
- http_default = nm_setting_proxy_get_http_default (setting);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->http_default), http_default);
-
- if (http_default)
- break;
-
- /* SSL Proxy */
- tmp = nm_setting_proxy_get_ssl_proxy (setting);
- gtk_entry_set_text (priv->ssl_proxy, tmp ? tmp : "");
- gtk_spin_button_set_value (priv->ssl_port,
- (gdouble) nm_setting_proxy_get_ssl_port (setting));
-
- /* FTP Proxy */
- tmp = nm_setting_proxy_get_ftp_proxy (setting);
- gtk_entry_set_text (priv->ftp_proxy, tmp ? tmp : "");
- gtk_spin_button_set_value (priv->ftp_port,
- (gdouble) nm_setting_proxy_get_ftp_port (setting));
-
- /* SOCKS Proxy */
- tmp = nm_setting_proxy_get_socks_proxy (setting);
- gtk_entry_set_text (priv->socks_proxy, tmp ? tmp : "");
- gtk_spin_button_set_value (priv->socks_port,
- (gdouble) nm_setting_proxy_get_socks_port (setting));
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->socks_version_5),
- nm_setting_proxy_get_socks_version_5 (setting));
-
+ tmp = nm_setting_proxy_get_pac_script (setting);
+ buffer = gtk_text_view_get_buffer (priv->pac_script_window);
+ gtk_text_buffer_set_text (buffer, tmp ?: "", -1);
break;
case NM_SETTING_PROXY_METHOD_NONE:
gtk_combo_box_set_active (priv->method, PROXY_METHOD_NONE);
/* Nothing to Show */
}
+ g_signal_connect (priv->method, "changed", G_CALLBACK (stuff_changed), self);
+ g_signal_connect (priv->browser_only, "toggled", G_CALLBACK (stuff_changed), self);
+ g_signal_connect (priv->pac_url, "changed", G_CALLBACK (stuff_changed), self);
+ g_signal_connect (gtk_text_view_get_buffer (priv->pac_script_window), "changed", G_CALLBACK (stuff_changed), self);
+
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->browser_only),
nm_setting_proxy_get_browser_only (setting));
}
@@ -302,6 +189,7 @@ finish_setup (CEPageProxy *self, gpointer unused, GError *error, gpointer user_d
method_changed (priv->method, self);
g_signal_connect (priv->method, "changed", G_CALLBACK (method_changed), self);
+ g_signal_connect (priv->pac_script_import_button, "clicked", G_CALLBACK (import_button_clicked_cb), self);
}
CEPage *
@@ -349,108 +237,50 @@ ui_to_setting (CEPageProxy *self)
CEPageProxyPrivate *priv = CE_PAGE_PROXY_GET_PRIVATE (self);
NMSettingConnection *s_con;
int method;
- NMSettingProxyMethod s_method;
- const char *http_proxy = NULL;
- guint32 http_port;
- gboolean http_default = FALSE;
- const char *ssl_proxy = NULL;
- guint32 ssl_port;
- const char *ftp_proxy = NULL;
- guint32 ftp_port;
- const char *socks_proxy = NULL;
- guint32 socks_port;
- gboolean socks_version_5 = FALSE;
- const char *text;
- GPtrArray *tmp_array = NULL;
- char **no_proxy_for = NULL;
- char **items = NULL, **iter;
- gboolean browser_only = FALSE;
- const char *pac_url = NULL;
- const char *pac_script = NULL;
+ gboolean browser_only;
+ const char *pac_url;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ char *script = NULL;
s_con = nm_connection_get_setting_connection (CE_PAGE (self)->connection);
g_return_if_fail (s_con != NULL);
/* Method */
method = gtk_combo_box_get_active (priv->method);
- if (method == PROXY_METHOD_AUTO)
- s_method = NM_SETTING_PROXY_METHOD_AUTO;
- else if (method == PROXY_METHOD_MANUAL)
- s_method = NM_SETTING_PROXY_METHOD_MANUAL;
- else
- s_method = NM_SETTING_PROXY_METHOD_NONE;
-
- http_proxy = gtk_entry_get_text (priv->http_proxy);
- if (http_proxy && strlen (http_proxy) < 1)
- http_proxy = NULL;
- http_port = (guint32) gtk_spin_button_get_value_as_int (priv->http_port);
-
- /* HTTP Default */
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->http_default)))
- http_default = TRUE;
-
- ssl_proxy = gtk_entry_get_text (priv->ssl_proxy);
- if (ssl_proxy && strlen (ssl_proxy) < 1)
- ssl_proxy = NULL;
- ssl_port = (guint32) gtk_spin_button_get_value_as_int (priv->ssl_port);
-
- ftp_proxy = gtk_entry_get_text (priv->ftp_proxy);
- if (ftp_proxy && strlen (ftp_proxy) < 1)
- ftp_proxy = NULL;
- ftp_port = (guint32) gtk_spin_button_get_value_as_int (priv->ftp_port);
-
- socks_proxy = gtk_entry_get_text (priv->socks_proxy);
- if (socks_proxy && strlen (socks_proxy) < 1)
- socks_proxy = NULL;
- socks_port = (guint32) gtk_spin_button_get_value_as_int (priv->socks_port);
-
- /* SOCKS Version */
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->socks_version_5)))
- socks_version_5 = TRUE;
-
- /* No Proxy For */
- tmp_array = g_ptr_array_new ();
- text = gtk_entry_get_text (GTK_ENTRY (priv->no_proxy_for));
- if (text && strlen (text)) {
- items = g_strsplit_set (text, ", ;:", 0);
- for (iter = items; *iter; iter++) {
- char *stripped = g_strstrip (*iter);
-
- if (strlen (stripped))
- g_ptr_array_add (tmp_array, g_strdup (stripped));
- }
- g_strfreev (items);
- }
- g_ptr_array_add (tmp_array, NULL);
- no_proxy_for = (char **) g_ptr_array_free (tmp_array, (tmp_array->len == 1));
/* Browser Only */
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->browser_only)))
- browser_only = TRUE;
+ browser_only = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->browser_only));
+
+ if (method == PROXY_METHOD_NONE) {
+ g_object_set (priv->setting,
+ NM_SETTING_PROXY_METHOD, NM_SETTING_PROXY_METHOD_NONE,
+ NM_SETTING_PROXY_BROWSER_ONLY, browser_only,
+ NM_SETTING_PROXY_PAC_URL, NULL,
+ NM_SETTING_PROXY_PAC_SCRIPT, NULL,
+ NULL);
+ return;
+ }
+ /* PAC Url */
pac_url = gtk_entry_get_text (priv->pac_url);
if (pac_url && strlen (pac_url) < 1)
pac_url = NULL;
- pac_script = gtk_file_chooser_get_filename (priv->pac_script);
+
+ /* PAC Script */
+ buffer = gtk_text_view_get_buffer (priv->pac_script_window);
+ gtk_text_buffer_get_iter_at_offset (buffer, &start, 0);
+ gtk_text_buffer_get_iter_at_offset (buffer, &end, -1);
+ script = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
/* Update NMSetting */
g_object_set (priv->setting,
- NM_SETTING_PROXY_METHOD, s_method,
- NM_SETTING_PROXY_HTTP_PROXY, http_proxy,
- NM_SETTING_PROXY_HTTP_PORT, http_port,
- NM_SETTING_PROXY_HTTP_DEFAULT, http_default,
- NM_SETTING_PROXY_SSL_PROXY, ssl_proxy,
- NM_SETTING_PROXY_SSL_PORT, ssl_port,
- NM_SETTING_PROXY_FTP_PROXY, ftp_proxy,
- NM_SETTING_PROXY_FTP_PORT, ftp_port,
- NM_SETTING_PROXY_SOCKS_PROXY, socks_proxy,
- NM_SETTING_PROXY_SOCKS_PORT, socks_port,
- NM_SETTING_PROXY_SOCKS_VERSION_5, socks_version_5,
- NM_SETTING_PROXY_NO_PROXY_FOR, no_proxy_for,
+ NM_SETTING_PROXY_METHOD, NM_SETTING_PROXY_METHOD_AUTO,
NM_SETTING_PROXY_BROWSER_ONLY, browser_only,
NM_SETTING_PROXY_PAC_URL, pac_url,
- NM_SETTING_PROXY_PAC_SCRIPT, pac_script,
+ NM_SETTING_PROXY_PAC_SCRIPT, nm_str_not_empty (script),
NULL);
+ g_free (script);
}
static gboolean