1
Index: gnome-control-center-3.4.0/panels/network/cc-network-panel.c
2
===================================================================
3
--- gnome-control-center-3.4.0.orig/panels/network/cc-network-panel.c 2012-03-26 18:48:44.000000000 +0200
4
+++ gnome-control-center-3.4.0/panels/network/cc-network-panel.c 2012-04-12 15:04:42.414238811 +0200
7
#include <netinet/ether.h>
12
+#include <gdesktop-enums.h>
14
#include "cc-network-panel.h"
16
@@ -3372,6 +3376,139 @@
21
+is_in_admin_group (int id_group)
23
+ gid_t groups [1024];
26
+ ngroups = getgroups (1024, groups);
28
+ perror ("getgroups");
32
+ for (i = 0; i < ngroups; ++i) {
33
+ if (groups[i] == id_group)
43
+ struct group *admin_group;
45
+ admin_group = getgrnam ("admin");
46
+ if (admin_group != NULL && is_in_admin_group (admin_group->gr_gid))
49
+ admin_group = getgrnam ("sudo");
50
+ if (admin_group != NULL && is_in_admin_group (admin_group->gr_gid))
57
+reset_system_proxy (GDBusProxy *proxy, const gchar *protocol)
60
+ GError *error = NULL;
62
+ result = g_dbus_proxy_call_sync (proxy, "set_proxy",
63
+ g_variant_new ("(ss)", protocol, ""),
64
+ G_DBUS_CALL_FLAGS_NONE,
67
+ g_variant_unref (result);
69
+ g_warning ("Error while calling set_proxy for %s protocol: %s", protocol, error->message);
70
+ g_error_free (error);
75
+set_proxy_for_protocol (GDBusProxy *proxy, const gchar *protocol, GSettings *settings)
79
+ GError *error = NULL;
81
+ proxy_str = g_strdup_printf ("%s://%s:%i/",
83
+ g_settings_get_string (settings, "host"),
84
+ g_settings_get_int (settings, "port"));
85
+ result = g_dbus_proxy_call_sync (proxy, "set_proxy",
86
+ g_variant_new ("(ss)", protocol, proxy_str),
87
+ G_DBUS_CALL_FLAGS_NONE,
90
+ g_variant_unref (result);
92
+ g_warning ("Error while calling set_proxy for %s protocol: %s", protocol, error->message);
93
+ g_error_free (error);
98
+ g_object_unref (settings);
102
+on_proxy_apply_system_wide (GtkButton *button, gpointer user_data)
104
+ GDBusConnection *bus;
107
+ GDesktopProxyMode proxy_mode;
108
+ CcNetworkPanel *panel = CC_NETWORK_PANEL (user_data);
111
+ bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
113
+ g_warning ("Could not retrieve system bus: %s", error->message);
114
+ g_error_free (error);
119
+ proxy = g_dbus_proxy_new_sync (bus, 0, NULL,
120
+ "com.ubuntu.SystemService",
122
+ "com.ubuntu.SystemService",
126
+ g_warning ("Could not retrieve bus object: %s", error->message);
127
+ g_error_free (error);
132
+ /* Retrieve the current settings */
133
+ proxy_mode = g_settings_get_enum (panel->priv->proxy_settings, "mode");
134
+ switch (proxy_mode) {
135
+ case G_DESKTOP_PROXY_MODE_NONE:
136
+ reset_system_proxy (proxy, "http");
137
+ reset_system_proxy (proxy, "https");
138
+ reset_system_proxy (proxy, "ftp");
139
+ reset_system_proxy (proxy, "socks");
141
+ case G_DESKTOP_PROXY_MODE_MANUAL:
142
+ set_proxy_for_protocol (proxy, "http", g_settings_get_child (panel->priv->proxy_settings, "http"));
143
+ set_proxy_for_protocol (proxy, "https", g_settings_get_child (panel->priv->proxy_settings, "https"));
144
+ set_proxy_for_protocol (proxy, "ftp", g_settings_get_child (panel->priv->proxy_settings, "ftp"));
145
+ set_proxy_for_protocol (proxy, "socks", g_settings_get_child (panel->priv->proxy_settings, "socks"));
150
+ g_object_unref (proxy);
154
cc_network_panel_init (CcNetworkPanel *panel)
156
@@ -3507,6 +3644,13 @@
157
/* add the virtual proxy device */
158
panel_add_proxy_device (panel);
160
+ /* System wide proxy settings */
162
+ g_signal_connect (G_OBJECT (gtk_builder_get_object (panel->priv->builder, "system_proxy_button")), "clicked",
163
+ G_CALLBACK (on_proxy_apply_system_wide), panel);
165
+ gtk_widget_hide (GTK_WIDGET (gtk_builder_get_object (panel->priv->builder, "system_proxy_button")));
167
/* setup wireless combobox model */
168
combobox = GTK_COMBO_BOX (gtk_builder_get_object (panel->priv->builder,
169
"combobox_wireless_network_name"));
170
Index: gnome-control-center-3.4.0/panels/network/network.ui
171
===================================================================
172
--- gnome-control-center-3.4.0.orig/panels/network/network.ui 2012-03-01 08:56:37.000000000 +0100
173
+++ gnome-control-center-3.4.0/panels/network/network.ui 2012-04-12 14:23:34.181999513 +0200
174
@@ -2311,6 +2311,20 @@
175
<property name="position">0</property>
179
+ <object class="GtkButton" id="system_proxy_button">
180
+ <property name="label" translatable="yes">Apply system wide</property>
181
+ <property name="visible">True</property>
182
+ <property name="can_focus">True</property>
183
+ <property name="receives_default">True</property>
184
+ <property name="use_action_appearance">False</property>
187
+ <property name="expand">False</property>
188
+ <property name="fill">False</property>
189
+ <property name="position">1</property>
194
<property name="position">2</property>