| 54 *****************************************************************************/ |
54 *****************************************************************************/ |
| 55 static void |
55 static void |
| 56 proxy_changed_cb(const gchar *name, PurplePrefType type, gconstpointer value, |
56 proxy_changed_cb(const gchar *name, PurplePrefType type, gconstpointer value, |
| 57 gpointer data) |
57 gpointer data) |
| 58 { |
58 { |
| 59 PidginProxyPrefs *page = data; |
59 PidginProxyPrefs *prefs = data; |
| 60 const char *proxy = value; |
60 const char *proxy = value; |
| 61 |
61 |
| 62 if (!purple_strequal(proxy, "none") && !purple_strequal(proxy, "envvar")) { |
62 if (!purple_strequal(proxy, "none") && !purple_strequal(proxy, "envvar")) { |
| 63 gtk_widget_show_all(page->options); |
63 gtk_widget_show_all(prefs->options); |
| 64 } else { |
64 } else { |
| 65 gtk_widget_hide(page->options); |
65 gtk_widget_hide(prefs->options); |
| 66 } |
66 } |
| 67 } |
67 } |
| 68 |
68 |
| 69 static void |
69 static void |
| 70 proxy_print_option(GtkWidget *entry, gpointer data) |
70 proxy_print_option(GtkWidget *entry, gpointer data) |
| 71 { |
71 { |
| 72 PidginProxyPrefs *page = data; |
72 PidginProxyPrefs *prefs = data; |
| 73 |
73 |
| 74 if (entry == page->host) { |
74 if (entry == prefs->host) { |
| 75 purple_prefs_set_string("/purple/proxy/host", |
75 purple_prefs_set_string("/purple/proxy/host", |
| 76 gtk_entry_get_text(GTK_ENTRY(entry))); |
76 gtk_entry_get_text(GTK_ENTRY(entry))); |
| 77 } else if (entry == page->port) { |
77 } else if (entry == prefs->port) { |
| 78 purple_prefs_set_int("/purple/proxy/port", |
78 purple_prefs_set_int("/purple/proxy/port", |
| 79 gtk_spin_button_get_value_as_int( |
79 gtk_spin_button_get_value_as_int( |
| 80 GTK_SPIN_BUTTON(entry))); |
80 GTK_SPIN_BUTTON(entry))); |
| 81 } else if (entry == page->username) { |
81 } else if (entry == prefs->username) { |
| 82 purple_prefs_set_string("/purple/proxy/username", |
82 purple_prefs_set_string("/purple/proxy/username", |
| 83 gtk_entry_get_text(GTK_ENTRY(entry))); |
83 gtk_entry_get_text(GTK_ENTRY(entry))); |
| 84 } else if (entry == page->password) { |
84 } else if (entry == prefs->password) { |
| 85 purple_prefs_set_string("/purple/proxy/password", |
85 purple_prefs_set_string("/purple/proxy/password", |
| 86 gtk_entry_get_text(GTK_ENTRY(entry))); |
86 gtk_entry_get_text(GTK_ENTRY(entry))); |
| 87 } |
87 } |
| 88 } |
88 } |
| 89 |
89 |
| 90 static void |
90 static void |
| 91 proxy_button_clicked_cb(GtkWidget *button, gpointer data) |
91 proxy_button_clicked_cb(GtkWidget *button, gpointer data) |
| 92 { |
92 { |
| 93 PidginProxyPrefs *page = data; |
93 PidginProxyPrefs *prefs = data; |
| 94 GError *err = NULL; |
94 GError *err = NULL; |
| 95 |
95 |
| 96 if (g_spawn_command_line_async(page->gnome_program_path, &err)) { |
96 if (g_spawn_command_line_async(prefs->gnome_program_path, &err)) { |
| 97 return; |
97 return; |
| 98 } |
98 } |
| 99 |
99 |
| 100 purple_notify_error(NULL, NULL, _("Cannot start proxy configuration program."), err->message, NULL); |
100 purple_notify_error(NULL, NULL, _("Cannot start proxy configuration program."), err->message, NULL); |
| 101 g_error_free(err); |
101 g_error_free(err); |
| 154 gtk_widget_class_bind_template_callback(widget_class, |
154 gtk_widget_class_bind_template_callback(widget_class, |
| 155 proxy_print_option); |
155 proxy_print_option); |
| 156 } |
156 } |
| 157 |
157 |
| 158 static void |
158 static void |
| 159 pidgin_proxy_prefs_init(PidginProxyPrefs *page) |
159 pidgin_proxy_prefs_init(PidginProxyPrefs *prefs) |
| 160 { |
160 { |
| 161 PurpleProxyInfo *proxy_info; |
161 PurpleProxyInfo *proxy_info; |
| 162 |
162 |
| 163 gtk_widget_init_template(GTK_WIDGET(page)); |
163 gtk_widget_init_template(GTK_WIDGET(prefs)); |
| 164 |
164 |
| 165 if(purple_running_gnome()) { |
165 if(purple_running_gnome()) { |
| 166 gchar *path = NULL; |
166 gchar *path = NULL; |
| 167 |
167 |
| 168 gtk_stack_set_visible_child_name(GTK_STACK(page->stack), |
168 gtk_stack_set_visible_child_name(GTK_STACK(prefs->stack), |
| 169 "gnome"); |
169 "gnome"); |
| 170 |
170 |
| 171 path = g_find_program_in_path("gnome-network-properties"); |
171 path = g_find_program_in_path("gnome-network-properties"); |
| 172 if (path == NULL) { |
172 if (path == NULL) { |
| 173 path = g_find_program_in_path("gnome-network-preferences"); |
173 path = g_find_program_in_path("gnome-network-preferences"); |
| 179 g_free(path); |
179 g_free(path); |
| 180 path = tmp; |
180 path = tmp; |
| 181 } |
181 } |
| 182 } |
182 } |
| 183 |
183 |
| 184 page->gnome_program_path = path; |
184 prefs->gnome_program_path = path; |
| 185 gtk_widget_set_visible(page->gnome_not_found, path == NULL); |
185 gtk_widget_set_visible(prefs->gnome_not_found, path == NULL); |
| 186 gtk_widget_set_visible(page->gnome_program, path != NULL); |
186 gtk_widget_set_visible(prefs->gnome_program, path != NULL); |
| 187 } else { |
187 } else { |
| 188 gtk_stack_set_visible_child_name(GTK_STACK(page->stack), |
188 gtk_stack_set_visible_child_name(GTK_STACK(prefs->stack), |
| 189 "nongnome"); |
189 "nongnome"); |
| 190 |
190 |
| 191 /* This is a global option that affects SOCKS4 usage even with |
191 /* This is a global option that affects SOCKS4 usage even with |
| 192 * account-specific proxy settings */ |
192 * account-specific proxy settings */ |
| 193 pidgin_prefs_bind_checkbox("/purple/proxy/socks4_remotedns", |
193 pidgin_prefs_bind_checkbox("/purple/proxy/socks4_remotedns", |
| 194 page->socks4_remotedns); |
194 prefs->socks4_remotedns); |
| 195 |
195 |
| 196 page->type.type = PURPLE_PREF_STRING; |
196 prefs->type.type = PURPLE_PREF_STRING; |
| 197 page->type.key = "/purple/proxy/type"; |
197 prefs->type.key = "/purple/proxy/type"; |
| 198 pidgin_prefs_bind_dropdown(&page->type); |
198 pidgin_prefs_bind_dropdown(&prefs->type); |
| 199 proxy_info = purple_global_proxy_get_info(); |
199 proxy_info = purple_global_proxy_get_info(); |
| 200 |
200 |
| 201 purple_prefs_connect_callback(page, "/purple/proxy/type", |
201 purple_prefs_connect_callback(prefs, "/purple/proxy/type", |
| 202 proxy_changed_cb, page); |
202 proxy_changed_cb, prefs); |
| 203 |
203 |
| 204 if (proxy_info != NULL) { |
204 if (proxy_info != NULL) { |
| 205 if (purple_proxy_info_get_hostname(proxy_info)) { |
205 if (purple_proxy_info_get_hostname(proxy_info)) { |
| 206 gtk_entry_set_text(GTK_ENTRY(page->host), |
206 gtk_entry_set_text(GTK_ENTRY(prefs->host), |
| 207 purple_proxy_info_get_hostname(proxy_info)); |
207 purple_proxy_info_get_hostname(proxy_info)); |
| 208 } |
208 } |
| 209 |
209 |
| 210 if (purple_proxy_info_get_port(proxy_info) != 0) { |
210 if (purple_proxy_info_get_port(proxy_info) != 0) { |
| 211 gtk_spin_button_set_value( |
211 gtk_spin_button_set_value( |
| 212 GTK_SPIN_BUTTON(page->port), |
212 GTK_SPIN_BUTTON(prefs->port), |
| 213 purple_proxy_info_get_port(proxy_info)); |
213 purple_proxy_info_get_port(proxy_info)); |
| 214 } |
214 } |
| 215 |
215 |
| 216 if (purple_proxy_info_get_username(proxy_info) != NULL) { |
216 if (purple_proxy_info_get_username(proxy_info) != NULL) { |
| 217 gtk_entry_set_text(GTK_ENTRY(page->username), |
217 gtk_entry_set_text(GTK_ENTRY(prefs->username), |
| 218 purple_proxy_info_get_username(proxy_info)); |
218 purple_proxy_info_get_username(proxy_info)); |
| 219 } |
219 } |
| 220 |
220 |
| 221 if (purple_proxy_info_get_password(proxy_info) != NULL) { |
221 if (purple_proxy_info_get_password(proxy_info) != NULL) { |
| 222 gtk_entry_set_text(GTK_ENTRY(page->password), |
222 gtk_entry_set_text(GTK_ENTRY(prefs->password), |
| 223 purple_proxy_info_get_password(proxy_info)); |
223 purple_proxy_info_get_password(proxy_info)); |
| 224 } |
224 } |
| 225 } |
225 } |
| 226 |
226 |
| 227 proxy_changed_cb("/purple/proxy/type", PURPLE_PREF_STRING, |
227 proxy_changed_cb("/purple/proxy/type", PURPLE_PREF_STRING, |
| 228 purple_prefs_get_string("/purple/proxy/type"), |
228 purple_prefs_get_string("/purple/proxy/type"), |
| 229 page); |
229 prefs); |
| 230 } |
230 } |
| 231 } |
231 } |
| 232 |
232 |
| 233 /****************************************************************************** |
233 /****************************************************************************** |
| 234 * API |
234 * API |