comparison pidgin/gtkprefs.c @ 21032:acbbcf6b6b46

Add a button in Network prefences page to launch Gnome proxy configuration program if running Gnome. Inspired by Galeon.
author Stu Tomlinson <stu@nosnilmot.com>
date Sun, 28 Oct 2007 17:25:18 +0000
parents 787b3897ba9f
children fe1b44022884
comparison
equal deleted inserted replaced
21031:afb4704781ed 21032:acbbcf6b6b46
1111 purple_prefs_set_string("/purple/proxy/username", gtk_entry_get_text(entry)); 1111 purple_prefs_set_string("/purple/proxy/username", gtk_entry_get_text(entry));
1112 else if (entrynum == PROXYPASS) 1112 else if (entrynum == PROXYPASS)
1113 purple_prefs_set_string("/purple/proxy/password", gtk_entry_get_text(entry)); 1113 purple_prefs_set_string("/purple/proxy/password", gtk_entry_get_text(entry));
1114 } 1114 }
1115 1115
1116 static void
1117 proxy_button_clicked_cb(GtkWidget *button, gpointer null)
1118 {
1119 GError *err = NULL;
1120
1121 if (g_spawn_command_line_async ("gnome-network-preferences", &err))
1122 return;
1123
1124 purple_notify_error(NULL, NULL, _("Cannot start proxy configuration program."), err->message);
1125 g_error_free(err);
1126 }
1127
1116 static GtkWidget * 1128 static GtkWidget *
1117 network_page() 1129 network_page()
1118 { 1130 {
1119 GtkWidget *ret; 1131 GtkWidget *ret;
1120 GtkWidget *vbox, *hbox, *entry; 1132 GtkWidget *vbox, *hbox, *entry;
1121 GtkWidget *table, *label, *auto_ip_checkbox, *ports_checkbox, *spin_button; 1133 GtkWidget *table, *label, *auto_ip_checkbox, *ports_checkbox, *spin_button;
1134 GtkWidget *warning, *proxy_button;
1122 GtkSizeGroup *sg; 1135 GtkSizeGroup *sg;
1123 PurpleProxyInfo *proxy_info = NULL; 1136 PurpleProxyInfo *proxy_info = NULL;
1124 1137
1125 ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE); 1138 ret = gtk_vbox_new(FALSE, PIDGIN_HIG_CAT_SPACE);
1126 gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER); 1139 gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER);
1199 if (!purple_prefs_get_bool("/purple/network/ports_range_use")) 1212 if (!purple_prefs_get_bool("/purple/network/ports_range_use"))
1200 gtk_widget_set_sensitive(GTK_WIDGET(spin_button), FALSE); 1213 gtk_widget_set_sensitive(GTK_WIDGET(spin_button), FALSE);
1201 g_signal_connect(G_OBJECT(ports_checkbox), "clicked", 1214 g_signal_connect(G_OBJECT(ports_checkbox), "clicked",
1202 G_CALLBACK(pidgin_toggle_sensitive), spin_button); 1215 G_CALLBACK(pidgin_toggle_sensitive), spin_button);
1203 1216
1204 if (!purple_running_gnome()) { 1217 vbox = pidgin_make_frame(ret, _("Proxy Server"));
1205 vbox = pidgin_make_frame(ret, _("Proxy Server")); 1218 prefs_proxy_frame = gtk_vbox_new(FALSE, 0);
1206 prefs_proxy_frame = gtk_vbox_new(FALSE, 0); 1219
1220 if (purple_running_gnome()) {
1221 warning = hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
1222 gtk_container_add(GTK_CONTAINER(vbox), hbox);
1223
1224 label = gtk_label_new(NULL);
1225 gtk_label_set_markup(GTK_LABEL(label),
1226 _("<b>Proxy configuration program was not found.</b>"));
1227 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
1228
1229 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
1230 gtk_container_add(GTK_CONTAINER(vbox), hbox);
1231 label = gtk_label_new(_("Proxy preferences are configured in\n"
1232 "GNOME Control Center: Desktop Preferences"));
1233 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
1234 gtk_widget_show(label);
1235
1236 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
1237 gtk_container_add(GTK_CONTAINER(vbox), hbox);
1238 proxy_button = gtk_button_new_with_mnemonic(_("Configure _Proxy"));
1239 g_signal_connect(G_OBJECT(proxy_button), "clicked",
1240 G_CALLBACK(proxy_button_clicked_cb), NULL);
1241 gtk_box_pack_start(GTK_BOX(hbox), proxy_button, FALSE, FALSE, 0);
1242 gtk_widget_show(proxy_button);
1243 } else {
1207 pidgin_prefs_dropdown(vbox, _("Proxy _type:"), PURPLE_PREF_STRING, 1244 pidgin_prefs_dropdown(vbox, _("Proxy _type:"), PURPLE_PREF_STRING,
1208 "/purple/proxy/type", 1245 "/purple/proxy/type",
1209 _("No proxy"), "none", 1246 _("No proxy"), "none",
1210 "SOCKS 4", "socks4", 1247 "SOCKS 4", "socks4",
1211 "SOCKS 5", "socks5", 1248 "SOCKS 5", "socks5",
1301 1338
1302 gtk_widget_show_all(ret); 1339 gtk_widget_show_all(ret);
1303 /* Only hide table if not running gnome otherwise we hide the IP address table! */ 1340 /* Only hide table if not running gnome otherwise we hide the IP address table! */
1304 if (!purple_running_gnome() && (proxy_info == NULL || 1341 if (!purple_running_gnome() && (proxy_info == NULL ||
1305 purple_proxy_info_get_type(proxy_info) == PURPLE_PROXY_NONE || 1342 purple_proxy_info_get_type(proxy_info) == PURPLE_PROXY_NONE ||
1306 purple_proxy_info_get_type(proxy_info) == PURPLE_PROXY_USE_ENVVAR)) 1343 purple_proxy_info_get_type(proxy_info) == PURPLE_PROXY_USE_ENVVAR)) {
1307 gtk_widget_hide(table); 1344 gtk_widget_hide(table);
1345 } else {
1346 gchar *path;
1347 path = g_find_program_in_path("gnome-network-preferences");
1348 if (path != NULL) {
1349 gtk_widget_set_sensitive(proxy_button, TRUE);
1350 gtk_widget_hide(warning);
1351 g_free(path);
1352 } else {
1353 gtk_widget_set_sensitive(proxy_button, FALSE);
1354 gtk_widget_show(warning);
1355 }
1356 }
1357
1308 return ret; 1358 return ret;
1309 } 1359 }
1310 1360
1311 #ifndef _WIN32 1361 #ifndef _WIN32
1312 static gboolean manual_browser_set(GtkWidget *entry, GdkEventFocus *event, gpointer data) { 1362 static gboolean manual_browser_set(GtkWidget *entry, GdkEventFocus *event, gpointer data) {