Lines 21-27
Link Here
|
21 |
#include <errno.h> |
21 |
#include <errno.h> |
22 |
#include <gnome.h> |
22 |
#include <gnome.h> |
23 |
#include <glade/glade-xml.h> |
23 |
#include <glade/glade-xml.h> |
24 |
#include <gnome-keyring.h> |
|
|
25 |
|
24 |
|
26 |
#include "eggtrayicon.h" |
25 |
#include "eggtrayicon.h" |
27 |
#include "netcommon.h" |
26 |
#include "netcommon.h" |
Lines 39-58
Link Here
|
39 |
# define N_(String) (String) |
38 |
# define N_(String) (String) |
40 |
#endif |
39 |
#endif |
41 |
|
40 |
|
42 |
#define ETHERNET_ICON "gnome-dev-ethernet" |
41 |
#define ETHERNET_ICON "gnome-dev-ethernet" |
43 |
#define DIALUP_ICON "gnome-dev-modem" |
42 |
#define DIALUP_ICON "gnome-dev-modem" |
44 |
#define WIRELESS_ICON_0 "wireless-tower-0" |
43 |
#define WIRELESS_ICON_0 "wireless-tower-0" |
45 |
#define WIRELESS_ICON_1 "wireless-tower-1" |
44 |
#define WIRELESS_ICON_1 "wireless-tower-1" |
46 |
#define WIRELESS_ICON_2 "wireless-tower-2" |
45 |
#define WIRELESS_ICON_2 "wireless-tower-2" |
47 |
#define WIRELESS_ICON_3 "wireless-tower-3" |
46 |
#define WIRELESS_ICON_3 "wireless-tower-3" |
48 |
#define WIRELESS_ICON_4 "wireless-tower-4" |
47 |
#define WIRELESS_ICON_4 "wireless-tower-4" |
49 |
#define DISCONNECT_ICON "stock_calc-cancel" |
48 |
#define DISCONNECT_ICON "stock_calc-cancel" |
50 |
#define BROKEN_ICON "stock_calc-cancel" |
49 |
#define BROKEN_ICON "stock_calc-cancel" |
51 |
#define UNKNOWN_ICON "stock_unknown" |
50 |
#define UNKNOWN_ICON "stock_unknown" |
52 |
|
51 |
|
53 |
#define GLADE_APPLET GLADEDIR "/netapplet.glade" |
52 |
#define GLADE_APPLET GLADEDIR "/netapplet.glade" |
54 |
|
53 |
|
55 |
#define YAST2_ARGV { "/opt/kde3/bin/kdesu", "-n", "/sbin/yast2", "lan", NULL } |
54 |
#define MAX_PREFERRED_APS 10 |
56 |
|
55 |
|
57 |
typedef struct { |
56 |
typedef struct { |
58 |
char *interface; /* interface name, e.g. eth0 */ |
57 |
char *interface; /* interface name, e.g. eth0 */ |
Lines 61-74
Link Here
|
61 |
} Connection; |
60 |
} Connection; |
62 |
|
61 |
|
63 |
typedef struct { |
62 |
typedef struct { |
64 |
double strength; /* wireless quality, should be [0.0, 1.0) */ |
63 |
double strength; /* wireless quality, should be [0.0, 1.0) */ |
65 |
char *essid; /* ESSID name */ |
64 |
char *essid; /* ESSID name */ |
66 |
gboolean is_encrypted; /* is this network encrypted ? */ |
65 |
gboolean is_encrypted; /* is this network encrypted ? */ |
67 |
} Accesspoint; |
66 |
} Accesspoint; |
68 |
|
67 |
|
69 |
typedef struct { |
68 |
typedef struct { |
70 |
GIOChannel *channel; /* our GIO to the daemon */ |
69 |
GIOChannel *channel; /* our GIO to the daemon */ |
71 |
GHashTable *handlers; /* hash of msg -> handler */ |
70 |
GHashTable *handlers; /* hash of msg -> handler */ |
72 |
gboolean authorized; |
71 |
gboolean authorized; |
73 |
|
72 |
|
74 |
EggTrayIcon *tray_icon; |
73 |
EggTrayIcon *tray_icon; |
Lines 76-96
Link Here
|
76 |
GtkWidget *icon; |
75 |
GtkWidget *icon; |
77 |
GtkTooltips *tooltips; |
76 |
GtkTooltips *tooltips; |
78 |
GtkWidget *popup_menu; |
77 |
GtkWidget *popup_menu; |
79 |
const char *default_keyring; |
|
|
80 |
const char *icon_name; |
78 |
const char *icon_name; |
81 |
int last_panel_h; |
79 |
int last_panel_h; |
82 |
|
80 |
|
83 |
GSList *connections; /* of Connection */ |
81 |
GSList *connections; /* of Connection */ |
84 |
Connection *active; /* active connection */ |
82 |
Connection *active; /* active connection */ |
85 |
|
83 |
|
|
|
84 |
int wireless_available; /* do we have a wireless interface? */ |
85 |
char *wireless_interface; /* which is the wireless interface? */ |
86 |
|
86 |
GSList *accesspoints; /* of Accesspoints */ |
87 |
GSList *accesspoints; /* of Accesspoints */ |
87 |
Accesspoint *active_ap; /* Active access point */ |
88 |
Accesspoint *active_ap; /* Active access point */ |
88 |
double link_quality; /* global link quality [0,1] */ |
89 |
double link_quality; /* global link quality [0,1] */ |
|
|
90 |
gboolean clear_essid; /* do we need to clear the essid? */ |
91 |
|
92 |
GList *preferred_aps; /* of preferred accesspoints */ |
93 |
GSList *keys; /* of essids with associated keys */ |
94 |
gboolean need_keys; /* keep track if we need a keys update */ |
89 |
} NetApplet; |
95 |
} NetApplet; |
90 |
|
96 |
|
91 |
static NetApplet *netapplet; |
97 |
static NetApplet *netapplet; |
92 |
|
98 |
|
93 |
static void populate_popup_menu (void); |
99 |
static void populate_popup_menu (void); |
|
|
100 |
static void other_essid_cb (GtkMenuItem*, gpointer); |
94 |
|
101 |
|
95 |
static void |
102 |
static void |
96 |
netapplet_set_icon (const char *icon_name) |
103 |
netapplet_set_icon (const char *icon_name) |
Lines 160-168
Link Here
|
160 |
tip = g_strdup_printf ("Wireless connection (secure): " |
167 |
tip = g_strdup_printf ("Wireless connection (secure): " |
161 |
"%d%%", (int)(netapplet->active_ap->strength * 100)); |
168 |
"%d%%", (int)(netapplet->active_ap->strength * 100)); |
162 |
} else { |
169 |
} else { |
163 |
g_warning ("icon_name=%s\n", icon_name); |
170 |
tip = _("Unknown connection"); |
164 |
g_assert_not_reached (); |
|
|
165 |
return; /* bleh */ |
166 |
} |
171 |
} |
167 |
|
172 |
|
168 |
gtk_tooltips_set_tip (netapplet->tooltips, netapplet->button, |
173 |
gtk_tooltips_set_tip (netapplet->tooltips, netapplet->button, |
Lines 173-202
Link Here
|
173 |
static void |
178 |
static void |
174 |
netapplet_set_connection (Connection *conn) |
179 |
netapplet_set_connection (Connection *conn) |
175 |
{ |
180 |
{ |
176 |
netcommon_send_message (netapplet->channel, "change", conn->interface, |
181 |
netcommon_send_message (netapplet->channel, "set_active", conn->interface, |
177 |
NULL); |
182 |
NULL); |
178 |
} |
183 |
} |
179 |
|
184 |
|
|
|
185 |
static guint |
186 |
essid_has_key(gchar* essid) { |
187 |
GSList *iter; |
188 |
gchar *escaped, *key_essid; |
189 |
|
190 |
escaped = escape_essid_for_key(essid); |
191 |
|
192 |
for (iter = netapplet->keys; iter != NULL; iter=iter->next) { |
193 |
key_essid = iter->data; |
194 |
if (strcmp(key_essid, escaped) == 0) { |
195 |
g_free(escaped); |
196 |
return 1; |
197 |
} |
198 |
} |
199 |
|
200 |
g_free(escaped); |
201 |
return 0; |
202 |
} |
203 |
|
204 |
|
205 |
static guint |
206 |
preferred_aps_add(gchar* newessid) { |
207 |
GList *iter, *paps; |
208 |
gchar *essid; |
209 |
guint found= 0; |
210 |
guint len, i; |
211 |
|
212 |
paps = netapplet->preferred_aps; |
213 |
|
214 |
for (iter = paps; iter != NULL; iter=iter->next) { |
215 |
essid = iter->data; |
216 |
if (strcmp(essid, newessid) == 0) { |
217 |
if (iter == paps) { |
218 |
/* already first entry */ |
219 |
return 0; |
220 |
} else { |
221 |
found = 1; |
222 |
break; |
223 |
} |
224 |
} |
225 |
} |
226 |
|
227 |
/* if we found it, move it to the front of |
228 |
* the list */ |
229 |
if (found) |
230 |
paps = g_list_remove(paps, essid); |
231 |
else |
232 |
essid = g_strdup(newessid); |
233 |
|
234 |
paps = g_list_prepend(paps, essid); |
235 |
|
236 |
/* trim list to limit entries */ |
237 |
len = g_list_length(paps); |
238 |
|
239 |
if (len > MAX_PREFERRED_APS) { |
240 |
for (i=0; i<len-MAX_PREFERRED_APS; i++) { |
241 |
iter = g_list_last(paps); |
242 |
essid = iter->data; |
243 |
paps = g_list_remove(paps, essid); |
244 |
g_free(essid); |
245 |
} |
246 |
} |
247 |
|
248 |
netapplet->preferred_aps = paps; |
249 |
|
250 |
return 1; |
251 |
} |
252 |
|
180 |
static void |
253 |
static void |
181 |
netapplet_set_essid (const char *essid, const char *key) |
254 |
netapplet_set_preferred_aps (void) |
182 |
{ |
255 |
{ |
183 |
if (netapplet->active) { |
256 |
GList *iter; |
184 |
char *escaped_essid; |
257 |
GString *msg; |
|
|
258 |
gchar *essid; |
259 |
|
260 |
msg = g_string_sized_new (512); /* start big to avoid resizes */ |
261 |
g_string_printf (msg, "set_preferred_aps"); |
262 |
|
263 |
for (iter = netapplet->preferred_aps; iter != NULL; iter=iter->next) { |
264 |
essid = netcommon_escape_argument(iter->data); |
265 |
g_string_append_printf(msg, " %s", essid); |
266 |
g_free(essid); |
267 |
} |
268 |
|
269 |
netcommon_send_message(netapplet->channel, msg->str, NULL); |
185 |
|
270 |
|
186 |
escaped_essid = netcommon_escape_argument (essid); |
271 |
g_string_free(msg, TRUE); |
|
|
272 |
} |
187 |
|
273 |
|
188 |
netcommon_send_message (netapplet->channel, "essid", |
274 |
static void |
189 |
netapplet->active->interface, |
275 |
netapplet_set_essid (const char *essid, const char *use_key, const char *key) |
190 |
escaped_essid, key, NULL); |
276 |
{ |
|
|
277 |
char *iface; |
278 |
char *escaped_essid; |
279 |
char *escaped_key; |
280 |
|
281 |
if (netapplet->active && |
282 |
(strcmp(netapplet->active->type, "Wireless") == 0)) { |
283 |
iface = g_strdup(netapplet->active->interface); |
284 |
} else if (netapplet->wireless_available) { |
285 |
iface = g_strdup(netapplet->wireless_interface); |
286 |
} else { |
287 |
return; |
288 |
} |
289 |
|
290 |
escaped_essid = netcommon_escape_argument (essid); |
291 |
escaped_key = netcommon_escape_argument (key); |
292 |
|
293 |
netcommon_send_message (netapplet->channel, "set_essid", |
294 |
iface, escaped_essid, use_key, escaped_key, NULL); |
191 |
|
295 |
|
192 |
g_free (escaped_essid); |
296 |
/* we just set the essid, once we get a connect signal, |
|
|
297 |
* clear it */ |
298 |
netapplet->clear_essid = TRUE; |
299 |
netapplet->need_keys = TRUE; |
300 |
|
301 |
g_free (escaped_essid); |
302 |
g_free (escaped_key); |
303 |
g_free (iface); |
304 |
} |
305 |
|
306 |
static void |
307 |
netapplet_clr_essid (const gchar *up_interface) |
308 |
{ |
309 |
char *iface; |
310 |
|
311 |
if (netapplet->active && |
312 |
(strcmp(netapplet->active->type, "Wireless") == 0)) { |
313 |
iface = g_strdup(netapplet->active->interface); |
314 |
} else if (netapplet->wireless_available) { |
315 |
iface = g_strdup(netapplet->wireless_interface); |
316 |
} else { |
317 |
return; |
193 |
} |
318 |
} |
|
|
319 |
|
320 |
netcommon_send_message (netapplet->channel, "clr_essid", |
321 |
iface, up_interface, NULL); |
322 |
|
323 |
/* the essid has been cleared */ |
324 |
netapplet->clear_essid = FALSE; |
325 |
|
326 |
g_free (iface); |
194 |
} |
327 |
} |
195 |
|
328 |
|
196 |
static void |
329 |
static void |
197 |
netapplet_get_connections (void) |
330 |
netapplet_get_connections (void) |
198 |
{ |
331 |
{ |
199 |
netcommon_send_message (netapplet->channel, "list_interfaces", NULL); |
332 |
netcommon_send_message (netapplet->channel, "get_interfaces", NULL); |
200 |
} |
333 |
} |
201 |
|
334 |
|
202 |
static void |
335 |
static void |
Lines 208-225
Link Here
|
208 |
static void |
341 |
static void |
209 |
netapplet_get_wireless (const char *interface) |
342 |
netapplet_get_wireless (const char *interface) |
210 |
{ |
343 |
{ |
211 |
netcommon_send_message (netapplet->channel, "wireless", interface, |
344 |
netcommon_send_message (netapplet->channel, "get_wireless", interface, |
212 |
NULL); |
345 |
NULL); |
213 |
} |
346 |
} |
214 |
|
347 |
|
215 |
static void |
348 |
static void |
216 |
netapplet_get_accesspoints (const char *interface) |
349 |
netapplet_get_accesspoints (const char *interface) |
217 |
{ |
350 |
{ |
218 |
netcommon_send_message (netapplet->channel, "accesspoints", interface, |
351 |
netcommon_send_message (netapplet->channel, "get_accesspoints", interface, |
219 |
NULL); |
352 |
NULL); |
220 |
} |
353 |
} |
221 |
|
354 |
|
222 |
static void |
355 |
static void |
|
|
356 |
netapplet_get_keys (void) |
357 |
{ |
358 |
netcommon_send_message (netapplet->channel, "get_keys", NULL); |
359 |
} |
360 |
|
361 |
static void |
362 |
netapplet_get_preferred_aps (void) |
363 |
{ |
364 |
netcommon_send_message (netapplet->channel, "get_preferred_aps", NULL); |
365 |
} |
366 |
|
367 |
static void |
223 |
conn_free (Connection *conn) |
368 |
conn_free (Connection *conn) |
224 |
{ |
369 |
{ |
225 |
g_free (conn->interface); |
370 |
g_free (conn->interface); |
Lines 251-256
Link Here
|
251 |
netapplet->active_ap = NULL; |
396 |
netapplet->active_ap = NULL; |
252 |
} |
397 |
} |
253 |
|
398 |
|
|
|
399 |
static void |
400 |
netapplet_free_keys (void) |
401 |
{ |
402 |
g_slist_foreach (netapplet->keys, (GFunc) essid_free, NULL); |
403 |
g_slist_free (netapplet->keys); |
404 |
netapplet->keys = NULL; |
405 |
} |
406 |
|
407 |
static void |
408 |
netapplet_free_preferred_aps (void) |
409 |
{ |
410 |
g_list_foreach (netapplet->preferred_aps, (GFunc) essid_free, NULL); |
411 |
g_list_free (netapplet->preferred_aps); |
412 |
netapplet->preferred_aps = NULL; |
413 |
} |
414 |
|
254 |
static Connection * |
415 |
static Connection * |
255 |
netapplet_get_connection_by_interface (const char *interface) |
416 |
netapplet_get_connection_by_interface (const char *interface) |
256 |
{ |
417 |
{ |
Lines 354-359
Link Here
|
354 |
|
515 |
|
355 |
netapplet_get_connections (); |
516 |
netapplet_get_connections (); |
356 |
netapplet_get_active (); |
517 |
netapplet_get_active (); |
|
|
518 |
netapplet_get_keys (); |
519 |
netapplet_get_preferred_aps (); |
357 |
} |
520 |
} |
358 |
|
521 |
|
359 |
static void |
522 |
static void |
Lines 367-373
Link Here
|
367 |
conn = netapplet_get_connection_by_interface (interface); |
530 |
conn = netapplet_get_connection_by_interface (interface); |
368 |
g_assert (conn != NULL); |
531 |
g_assert (conn != NULL); |
369 |
|
532 |
|
370 |
netapplet_set_connection (conn); |
533 |
if (strcmp(conn->type, "Wireless") == 0) { |
|
|
534 |
if (netapplet->preferred_aps) { |
535 |
/* do we have a preferred_aps list? */ |
536 |
netapplet_clr_essid("1"); |
537 |
} else { |
538 |
/* if we don't, ask for essid/key */ |
539 |
other_essid_cb(NULL,NULL); |
540 |
} |
541 |
} else |
542 |
netapplet_set_connection (conn); |
371 |
} |
543 |
} |
372 |
|
544 |
|
373 |
static void |
545 |
static void |
Lines 394-671
Link Here
|
394 |
gtk_widget_destroy (dialog); |
566 |
gtk_widget_destroy (dialog); |
395 |
} |
567 |
} |
396 |
|
568 |
|
397 |
typedef void (*GDICallback) (gpointer user_data); |
|
|
398 |
|
399 |
typedef struct { |
400 |
gboolean create_if_needed; |
401 |
GDICallback callback; |
402 |
gpointer user_data; |
403 |
} GetDefaultInfo; |
404 |
|
405 |
static void |
406 |
set_default_keyring_cb (GnomeKeyringResult result, |
407 |
gpointer data) |
408 |
{ |
409 |
GetDefaultInfo *gdi = data; |
410 |
|
411 |
if (result != GNOME_KEYRING_RESULT_OK) { |
412 |
g_warning (_("Error trying to set default keyring: %d"), |
413 |
result); |
414 |
g_free (gdi); |
415 |
return; |
416 |
} |
417 |
|
418 |
netapplet->default_keyring = "default"; |
419 |
|
420 |
gdi->callback (gdi->user_data); |
421 |
g_free (gdi); |
422 |
} |
423 |
|
424 |
|
425 |
static void |
426 |
create_keyring_cb (GnomeKeyringResult result, gpointer data) |
427 |
{ |
428 |
GetDefaultInfo *gdi = data; |
429 |
|
430 |
if (result != GNOME_KEYRING_RESULT_OK) { |
431 |
g_warning (_("Error trying to create keyring: %d"), |
432 |
result); |
433 |
g_free (gdi); |
434 |
return; |
435 |
} |
436 |
|
437 |
gnome_keyring_set_default_keyring ("default", set_default_keyring_cb, |
438 |
gdi, NULL); |
439 |
} |
440 |
|
441 |
static void |
442 |
get_default_keyring_cb (GnomeKeyringResult result, const char *string, |
443 |
gpointer data) |
444 |
{ |
445 |
GetDefaultInfo *gdi = data; |
446 |
|
447 |
if (result != GNOME_KEYRING_RESULT_OK) { |
448 |
g_warning (_("Error trying to get default keyring: %d"), |
449 |
result); |
450 |
g_free (gdi); |
451 |
return; |
452 |
} |
453 |
|
454 |
/* |
455 |
* Ugh. If there isn't a default keyring we have to create one |
456 |
* ourselves, which is incredibly inconvenient. |
457 |
*/ |
458 |
if (string == NULL && gdi->create_if_needed) { |
459 |
gnome_keyring_create ("default", |
460 |
NULL, /* ask user */ |
461 |
create_keyring_cb, |
462 |
gdi, NULL); |
463 |
} else { |
464 |
/* Note! "string" could still be NULL */ |
465 |
netapplet->default_keyring = g_strdup (string); |
466 |
gdi->callback (gdi->user_data); |
467 |
g_free (gdi); |
468 |
} |
469 |
} |
470 |
|
471 |
static void |
472 |
get_default_keyring (gboolean create_if_needed, |
473 |
GDICallback callback, |
474 |
gpointer user_data) |
475 |
{ |
476 |
GetDefaultInfo *gdi = g_new0 (GetDefaultInfo, 1); |
477 |
|
478 |
gdi->create_if_needed = create_if_needed; |
479 |
gdi->callback = callback; |
480 |
gdi->user_data = user_data; |
481 |
|
482 |
/* |
483 |
* Ugh. We have to try to get the default keyring and stick it |
484 |
* in some ugly-ass global variable because some keyring functions |
485 |
* (notably gnome_keyring_unlock() won't take NULL to mean the |
486 |
* default keyring. |
487 |
* |
488 |
* This is fixed in 0.3.x keyring, so hopefully will be |
489 |
* temporary. |
490 |
*/ |
491 |
gnome_keyring_get_default_keyring (get_default_keyring_cb, gdi, NULL); |
492 |
} |
493 |
|
494 |
static void |
495 |
create_item_cb (GnomeKeyringResult result, |
496 |
guint32 val G_GNUC_UNUSED, |
497 |
gpointer data G_GNUC_UNUSED) |
498 |
{ |
499 |
if (result != GNOME_KEYRING_RESULT_OK) |
500 |
g_warning (_("Unable to save to keyring! Err: %d"), result); |
501 |
} |
502 |
|
503 |
static void |
504 |
create_item (const char *essid, const char *key) |
505 |
{ |
506 |
GnomeKeyringAttributeList *attributes; |
507 |
GnomeKeyringAttribute attr; |
508 |
char *name; |
509 |
|
510 |
attributes = gnome_keyring_attribute_list_new (); |
511 |
|
512 |
attr.name = g_strdup ("essid"); |
513 |
attr.type = GNOME_KEYRING_ATTRIBUTE_TYPE_STRING; |
514 |
attr.value.string = g_strdup (essid); |
515 |
g_array_append_val (attributes, attr); |
516 |
|
517 |
name = g_strdup_printf (_("Password for network \"%s\""), essid); |
518 |
|
519 |
gnome_keyring_item_create (netapplet->default_keyring, |
520 |
GNOME_KEYRING_ITEM_GENERIC_SECRET, |
521 |
name, |
522 |
attributes, |
523 |
key, |
524 |
TRUE, |
525 |
create_item_cb, NULL, NULL); |
526 |
|
527 |
g_free (name); |
528 |
} |
529 |
|
530 |
typedef struct { |
531 |
char *essid; |
532 |
char *key; |
533 |
} SaveInfo; |
534 |
|
535 |
static void |
536 |
queue_create (gpointer user_data) |
537 |
{ |
538 |
SaveInfo *sinfo = user_data; |
539 |
|
540 |
if (netapplet->default_keyring != NULL) |
541 |
create_item (sinfo->essid, sinfo->key); |
542 |
|
543 |
g_free (sinfo->essid); |
544 |
g_free (sinfo->key); |
545 |
g_free (sinfo); |
546 |
} |
547 |
|
548 |
static void |
549 |
keyring_save (const char *essid, const char *key) |
550 |
{ |
551 |
SaveInfo *sinfo; |
552 |
|
553 |
sinfo = g_new0 (SaveInfo, 1); |
554 |
sinfo->essid = g_strdup (essid); |
555 |
sinfo->key = g_strdup (key); |
556 |
|
557 |
if (netapplet->default_keyring == NULL) |
558 |
get_default_keyring (TRUE, queue_create, sinfo); |
559 |
else |
560 |
create_item (essid, key); |
561 |
} |
562 |
|
563 |
static void |
564 |
entry_changed_cb (GtkEntry *entry, gpointer user_data) |
565 |
{ |
566 |
GtkWidget *widget = GTK_WIDGET (user_data); |
567 |
const char *text; |
568 |
|
569 |
text = gtk_entry_get_text (entry); |
570 |
|
571 |
if (text == NULL || *text == '\0') |
572 |
gtk_widget_set_sensitive (widget, FALSE); |
573 |
else |
574 |
gtk_widget_set_sensitive (widget, TRUE); |
575 |
} |
576 |
|
577 |
static void |
569 |
static void |
578 |
show_key_dialog (const char *essid) |
570 |
get_key (const char *essid) |
579 |
{ |
571 |
{ |
580 |
GladeXML *xml; |
572 |
GladeXML *xml; |
581 |
GtkWidget *dialog, *entry_key, *checkbox_keyring; |
573 |
GtkWidget *dialog, *entry_key; |
582 |
char *old_essid; |
|
|
583 |
|
574 |
|
584 |
xml = glade_xml_new (GLADE_APPLET, "dialog-key", NULL); |
575 |
xml = glade_xml_new (GLADE_APPLET, "dialog-key", NULL); |
585 |
dialog = glade_xml_get_widget (xml, "dialog-key"); |
576 |
dialog = glade_xml_get_widget (xml, "dialog-key"); |
586 |
|
577 |
|
587 |
checkbox_keyring = glade_xml_get_widget (xml, "checkbutton-keyring"); |
|
|
588 |
gtk_widget_set_sensitive (checkbox_keyring, FALSE); |
589 |
|
590 |
entry_key = glade_xml_get_widget (xml, "entry-key"); |
591 |
g_signal_connect (entry_key, "changed", |
592 |
G_CALLBACK (entry_changed_cb), |
593 |
checkbox_keyring); |
594 |
|
595 |
old_essid = g_strdup (essid); |
596 |
|
597 |
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { |
578 |
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { |
598 |
const char *key; |
579 |
const char *key; |
599 |
|
580 |
|
|
|
581 |
entry_key = glade_xml_get_widget (xml, "entry-key"); |
600 |
key = gtk_entry_get_text (GTK_ENTRY (entry_key)); |
582 |
key = gtk_entry_get_text (GTK_ENTRY (entry_key)); |
601 |
|
583 |
|
602 |
netapplet_set_essid (old_essid, key); |
584 |
netapplet_set_essid (essid, "1", key); |
603 |
|
|
|
604 |
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox_keyring))) |
605 |
keyring_save (old_essid, key); |
606 |
} |
585 |
} |
607 |
|
586 |
|
608 |
g_free (old_essid); |
|
|
609 |
gtk_widget_destroy (dialog); |
587 |
gtk_widget_destroy (dialog); |
610 |
g_object_unref (xml); |
588 |
g_object_unref (xml); |
611 |
} |
589 |
} |
612 |
|
590 |
|
613 |
static void |
591 |
static void |
614 |
get_item_cb (GnomeKeyringResult result, GList *list, gpointer data) |
|
|
615 |
{ |
616 |
char *essid = data; |
617 |
GnomeKeyringFound *found; |
618 |
|
619 |
if (result != GNOME_KEYRING_RESULT_OK) { |
620 |
show_key_dialog (essid); |
621 |
return; |
622 |
} |
623 |
|
624 |
/* Not found in keyring */ |
625 |
if (list == NULL) { |
626 |
show_key_dialog (essid); |
627 |
return; |
628 |
} |
629 |
|
630 |
found = (GnomeKeyringFound *) list->data; |
631 |
|
632 |
netapplet_set_essid (essid, found->secret); |
633 |
|
634 |
g_free (essid); |
635 |
} |
636 |
|
637 |
static void |
638 |
get_item (const char *essid) |
639 |
{ |
640 |
gnome_keyring_find_itemsv (GNOME_KEYRING_ITEM_GENERIC_SECRET, |
641 |
get_item_cb, |
642 |
g_strdup (essid), |
643 |
NULL, |
644 |
"essid", |
645 |
GNOME_KEYRING_ATTRIBUTE_TYPE_STRING, |
646 |
essid, |
647 |
NULL); |
648 |
} |
649 |
|
650 |
static void |
651 |
queue_get (gpointer user_data) |
652 |
{ |
653 |
const char *essid = user_data; |
654 |
|
655 |
if (netapplet->default_keyring != NULL) |
656 |
get_item (essid); |
657 |
} |
658 |
|
659 |
static void |
660 |
keyring_load (const char *essid) |
661 |
{ |
662 |
if (netapplet->default_keyring == NULL) |
663 |
get_default_keyring (FALSE, queue_get, (gpointer) essid); |
664 |
else |
665 |
get_item (essid); |
666 |
} |
667 |
|
668 |
static void |
669 |
essid_activate_cb (GtkMenuItem *mi G_GNUC_UNUSED, |
592 |
essid_activate_cb (GtkMenuItem *mi G_GNUC_UNUSED, |
670 |
gpointer user_data G_GNUC_UNUSED) |
593 |
gpointer user_data G_GNUC_UNUSED) |
671 |
|
594 |
|
Lines 677-723
Link Here
|
677 |
ap = netapplet_get_accesspoint_by_essid (essid); |
600 |
ap = netapplet_get_accesspoint_by_essid (essid); |
678 |
g_assert (ap); |
601 |
g_assert (ap); |
679 |
|
602 |
|
680 |
if (ap->is_encrypted) |
603 |
if (ap->is_encrypted) { |
681 |
keyring_load (ap->essid); |
604 |
if (essid_has_key(ap->essid)) |
|
|
605 |
netapplet_set_essid (ap->essid, "0", ""); |
606 |
else |
607 |
get_key (ap->essid); |
608 |
} else |
609 |
netapplet_set_essid (ap->essid, "1", ""); |
610 |
|
611 |
/* set to clear essid */ |
612 |
netapplet->clear_essid = TRUE; |
613 |
netapplet->need_keys = TRUE; |
614 |
} |
615 |
|
616 |
static guint |
617 |
other_essid_clear_key() { |
618 |
GtkWidget *dialog; |
619 |
guint clear; |
620 |
|
621 |
dialog = gtk_message_dialog_new_with_markup ( |
622 |
NULL, 0, GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE, |
623 |
_("<span weight=\"bold\" size=\"larger\">" |
624 |
"Exisiting key found for ESSID" |
625 |
"</span>\n\n" |
626 |
"An exisiting key has been found for the desired ESSID. " |
627 |
"You either did not specify a key or entered a blank key. " |
628 |
"Do you want to use the existing key or clear the stored key?")); |
629 |
gtk_dialog_add_buttons (GTK_DIALOG (dialog), |
630 |
"_Use Exisiting Key", GTK_RESPONSE_CANCEL, |
631 |
"_Clear Key", GTK_RESPONSE_OK, |
632 |
NULL); |
633 |
|
634 |
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) |
635 |
clear = 1; |
682 |
else |
636 |
else |
683 |
netapplet_set_essid (ap->essid, ""); |
637 |
clear = 0; |
|
|
638 |
|
639 |
gtk_widget_destroy (dialog); |
640 |
return clear; |
684 |
} |
641 |
} |
685 |
|
642 |
|
686 |
static void |
643 |
static void |
687 |
other_essid_cb (GtkMenuItem *mi G_GNUC_UNUSED, gpointer user_data G_GNUC_UNUSED) |
644 |
other_essid_cb (GtkMenuItem *mi G_GNUC_UNUSED, gpointer user_data G_GNUC_UNUSED) |
688 |
{ |
645 |
{ |
689 |
GtkWidget *dialog, *entry_key, *checkbox_keyring; |
646 |
GtkWidget *dialog, *entry_key; |
690 |
GladeXML *xml; |
647 |
GladeXML *xml; |
691 |
|
648 |
|
692 |
xml = glade_xml_new (GLADE_APPLET, "dialog-essid", NULL); |
649 |
xml = glade_xml_new (GLADE_APPLET, "dialog-essid", NULL); |
693 |
dialog = glade_xml_get_widget (xml, "dialog-essid"); |
650 |
dialog = glade_xml_get_widget (xml, "dialog-essid"); |
694 |
|
651 |
|
695 |
checkbox_keyring = glade_xml_get_widget (xml, "checkbutton-keyring"); |
|
|
696 |
gtk_widget_set_sensitive (checkbox_keyring, FALSE); |
697 |
|
698 |
entry_key = glade_xml_get_widget (xml, "entry-key"); |
699 |
g_signal_connect (entry_key, "changed", |
700 |
G_CALLBACK (entry_changed_cb), checkbox_keyring); |
701 |
|
702 |
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { |
652 |
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { |
703 |
GtkWidget *entry_essid; |
653 |
GtkWidget *entry_essid; |
704 |
const char *essid, *key; |
654 |
const gchar *essid, *key; |
705 |
|
655 |
|
706 |
entry_essid = glade_xml_get_widget (xml, "entry-essid"); |
656 |
entry_essid = glade_xml_get_widget (xml, "entry-essid"); |
|
|
657 |
entry_key = glade_xml_get_widget (xml, "entry-key"); |
707 |
|
658 |
|
708 |
essid = gtk_entry_get_text (GTK_ENTRY (entry_essid)); |
659 |
essid = gtk_entry_get_text (GTK_ENTRY (entry_essid)); |
709 |
key = gtk_entry_get_text (GTK_ENTRY (entry_key)); |
660 |
key = gtk_entry_get_text (GTK_ENTRY (entry_key)); |
|
|
661 |
|
662 |
if (essid_has_key((gchar*) essid)) { |
663 |
if (!strcmp(key, "")) { |
664 |
/* there is an existing key, but no key was |
665 |
* entered, do we want to clear the key or |
666 |
* use what is already there? */ |
667 |
if (other_essid_clear_key()) |
668 |
netapplet_set_essid(essid, "1", key); |
669 |
else |
670 |
netapplet_set_essid(essid, "0", key); |
671 |
|
672 |
} else { |
673 |
/* there is an exisiting key, but use the |
674 |
* entered key instead */ |
675 |
netapplet_set_essid (essid, "1", key); |
676 |
} |
677 |
} else |
678 |
/* no exisiting key, use what was entered */ |
679 |
netapplet_set_essid (essid, "1", key); |
710 |
|
680 |
|
711 |
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox_keyring))) |
681 |
/* set to clear essid */ |
712 |
keyring_save (essid, key); |
682 |
netapplet->clear_essid = TRUE; |
713 |
|
683 |
netapplet->need_keys = TRUE; |
714 |
netapplet_set_essid (essid, key); |
|
|
715 |
} |
684 |
} |
716 |
|
685 |
|
717 |
gtk_widget_destroy (dialog); |
686 |
gtk_widget_destroy (dialog); |
718 |
g_object_unref (xml); |
687 |
g_object_unref (xml); |
719 |
} |
688 |
} |
720 |
|
689 |
|
|
|
690 |
static void |
691 |
refresh_accesspoints_cb (GtkMenuItem *mi G_GNUC_UNUSED, gpointer user_data G_GNUC_UNUSED) |
692 |
{ |
693 |
char *iface; |
694 |
|
695 |
if (netapplet->active && |
696 |
(strcmp(netapplet->active->type, "Wireless") == 0)) { |
697 |
iface = g_strdup(netapplet->active->interface); |
698 |
} else if (netapplet->wireless_available) { |
699 |
iface = g_strdup(netapplet->wireless_interface); |
700 |
} else { |
701 |
return; |
702 |
} |
703 |
|
704 |
netapplet_get_accesspoints(iface); |
705 |
|
706 |
g_free(iface); |
707 |
} |
708 |
|
709 |
static void |
710 |
preferred_aps_activate_cb (GtkMenuItem *mi G_GNUC_UNUSED, |
711 |
gpointer user_data G_GNUC_UNUSED) |
712 |
{ |
713 |
gchar *essid; |
714 |
essid = g_object_get_data (G_OBJECT (mi), "essid"); |
715 |
|
716 |
/* update preferred aps and reup the network*/ |
717 |
if (preferred_aps_add(essid)) { |
718 |
netapplet_set_preferred_aps(); |
719 |
populate_popup_menu(); |
720 |
} |
721 |
|
722 |
netapplet_clr_essid ("1"); |
723 |
} |
724 |
|
725 |
|
721 |
static GtkWidget * |
726 |
static GtkWidget * |
722 |
get_label (GtkWidget *info_dialog, GladeXML *xml, const char *name) |
727 |
get_label (GtkWidget *info_dialog, GladeXML *xml, const char *name) |
723 |
{ |
728 |
{ |
Lines 876-887
Link Here
|
876 |
g_free (mac); |
881 |
g_free (mac); |
877 |
} |
882 |
} |
878 |
|
883 |
|
|
|
884 |
#ifdef NETWORK_CONF_TOOL |
879 |
static void |
885 |
static void |
880 |
configure_activate_cb (GtkMenuItem *mi G_GNUC_UNUSED, |
886 |
configure_activate_cb (GtkMenuItem *mi G_GNUC_UNUSED, |
881 |
gpointer user_data G_GNUC_UNUSED) |
887 |
gpointer user_data G_GNUC_UNUSED) |
882 |
{ |
888 |
{ |
883 |
char *argv[] = YAST2_ARGV; |
|
|
884 |
GError *err = NULL; |
889 |
GError *err = NULL; |
|
|
890 |
|
891 |
char *argv[2]; |
892 |
argv[0] = GST_NETWORKADMIN_PATH; |
893 |
argv[1] = NULL; |
885 |
|
894 |
|
886 |
if (!g_spawn_async (NULL, argv, NULL, 0, NULL, NULL, NULL, &err)) { |
895 |
if (!g_spawn_async (NULL, argv, NULL, 0, NULL, NULL, NULL, &err)) { |
887 |
GtkWidget *dialog; |
896 |
GtkWidget *dialog; |
Lines 896-902
Link Here
|
896 |
|
905 |
|
897 |
g_error_free (err); |
906 |
g_error_free (err); |
898 |
} |
907 |
} |
|
|
908 |
return; |
899 |
} |
909 |
} |
|
|
910 |
#endif |
900 |
|
911 |
|
901 |
static void |
912 |
static void |
902 |
quit_cb (GtkMenuItem *mi G_GNUC_UNUSED, |
913 |
quit_cb (GtkMenuItem *mi G_GNUC_UNUSED, |
Lines 965-972
Link Here
|
965 |
static void |
976 |
static void |
966 |
populate_popup_menu (void) |
977 |
populate_popup_menu (void) |
967 |
{ |
978 |
{ |
968 |
GtkWidget *mi, *image; |
979 |
GtkWidget *mi, *sm, *image; |
969 |
GSList *iter; |
980 |
GSList *iter; |
|
|
981 |
GList *iter2; |
970 |
|
982 |
|
971 |
g_list_foreach (GTK_MENU_SHELL (netapplet->popup_menu)->children, |
983 |
g_list_foreach (GTK_MENU_SHELL (netapplet->popup_menu)->children, |
972 |
remove_old_items, netapplet->popup_menu); |
984 |
remove_old_items, netapplet->popup_menu); |
Lines 1034-1042
Link Here
|
1034 |
/* Build list of wireless accesspoints ... */ |
1046 |
/* Build list of wireless accesspoints ... */ |
1035 |
if (netapplet->accesspoints) |
1047 |
if (netapplet->accesspoints) |
1036 |
mi = gtk_menu_item_new_with_label (_("Wireless Networks")); |
1048 |
mi = gtk_menu_item_new_with_label (_("Wireless Networks")); |
1037 |
else if (!(netapplet->active && |
|
|
1038 |
strcmp (netapplet->active->type, "Wireless") == 0)) |
1039 |
mi = gtk_menu_item_new_with_label (_("Wireless disabled")); |
1040 |
else |
1049 |
else |
1041 |
mi = gtk_menu_item_new_with_label ( |
1050 |
mi = gtk_menu_item_new_with_label ( |
1042 |
_("No wireless networks available")); |
1051 |
_("No wireless networks available")); |
Lines 1069-1078
Link Here
|
1069 |
gtk_widget_show (mi); |
1078 |
gtk_widget_show (mi); |
1070 |
g_free (display_name); |
1079 |
g_free (display_name); |
1071 |
} |
1080 |
} |
|
|
1081 |
|
1082 |
mi = gtk_separator_menu_item_new (); |
1083 |
gtk_menu_shell_append (GTK_MENU_SHELL (netapplet->popup_menu), mi); |
1084 |
gtk_widget_show (mi); |
1085 |
|
1086 |
if (netapplet->preferred_aps) { |
1087 |
sm = gtk_menu_new(); |
1088 |
|
1089 |
for (iter2 = netapplet->preferred_aps; iter2 != NULL; iter2 = iter2->next) { |
1090 |
char *essid = iter2->data; |
1091 |
|
1092 |
mi = gtk_image_menu_item_new_with_mnemonic (essid); |
1093 |
|
1094 |
if (essid_has_key(essid)) { |
1095 |
image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION, |
1096 |
GTK_ICON_SIZE_MENU); |
1097 |
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), |
1098 |
image); |
1099 |
} |
1100 |
|
1101 |
gtk_menu_shell_append (GTK_MENU_SHELL (sm), mi); |
1102 |
|
1103 |
g_object_set_data_full (G_OBJECT (mi), "essid", |
1104 |
g_strdup (essid), g_free); |
1105 |
g_signal_connect (mi, "activate", |
1106 |
G_CALLBACK (preferred_aps_activate_cb), NULL); |
1107 |
gtk_widget_set_sensitive (mi, netapplet->authorized); |
1108 |
gtk_widget_show (mi); |
1109 |
} |
1110 |
|
1111 |
image = gtk_image_new_from_stock (GTK_STOCK_INDEX, |
1112 |
GTK_ICON_SIZE_MENU); |
1113 |
mi = gtk_image_menu_item_new_with_mnemonic (_("Preferred Networks")); |
1114 |
gtk_image_menu_item_set_image ((GtkImageMenuItem*) mi, image); |
1115 |
gtk_widget_show (mi); |
1116 |
gtk_menu_item_set_submenu (GTK_MENU_ITEM (mi), sm); |
1117 |
gtk_menu_shell_append (GTK_MENU_SHELL (netapplet->popup_menu), mi); |
1118 |
} |
1072 |
|
1119 |
|
1073 |
if (netapplet->active && |
1120 |
if (netapplet->wireless_available) { |
1074 |
strcmp (netapplet->active->type, "Wireless") == 0) { |
1121 |
mi = gtk_menu_item_new_with_label ("Other Network..."); |
1075 |
mi = gtk_menu_item_new_with_label ("Other ..."); |
|
|
1076 |
gtk_menu_shell_append (GTK_MENU_SHELL (netapplet->popup_menu), |
1122 |
gtk_menu_shell_append (GTK_MENU_SHELL (netapplet->popup_menu), |
1077 |
mi); |
1123 |
mi); |
1078 |
g_signal_connect (mi, "activate", G_CALLBACK (other_essid_cb), |
1124 |
g_signal_connect (mi, "activate", G_CALLBACK (other_essid_cb), |
Lines 1080-1091
Link Here
|
1080 |
|
1126 |
|
1081 |
gtk_widget_set_sensitive (mi, netapplet->authorized); |
1127 |
gtk_widget_set_sensitive (mi, netapplet->authorized); |
1082 |
gtk_widget_show (mi); |
1128 |
gtk_widget_show (mi); |
1083 |
} |
1129 |
|
1084 |
|
1130 |
|
1085 |
mi = gtk_separator_menu_item_new (); |
1131 |
image = gtk_image_new_from_stock (GTK_STOCK_REFRESH, |
1086 |
gtk_menu_shell_append (GTK_MENU_SHELL (netapplet->popup_menu), mi); |
1132 |
GTK_ICON_SIZE_MENU); |
1087 |
gtk_widget_show (mi); |
1133 |
mi = gtk_image_menu_item_new_with_mnemonic (_("Refresh Networks")); |
|
|
1134 |
gtk_image_menu_item_set_image ((GtkImageMenuItem*) mi, image); |
1135 |
gtk_menu_shell_append (GTK_MENU_SHELL (netapplet->popup_menu), mi); |
1136 |
g_signal_connect (mi, "activate", G_CALLBACK (refresh_accesspoints_cb), |
1137 |
NULL); |
1088 |
|
1138 |
|
|
|
1139 |
gtk_widget_set_sensitive (mi, netapplet->authorized); |
1140 |
gtk_widget_show (mi); |
1141 |
|
1142 |
mi = gtk_separator_menu_item_new (); |
1143 |
gtk_menu_shell_append (GTK_MENU_SHELL (netapplet->popup_menu), mi); |
1144 |
gtk_widget_show (mi); |
1145 |
} |
1146 |
|
1089 |
/* 'Connection Information' item */ |
1147 |
/* 'Connection Information' item */ |
1090 |
image = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, |
1148 |
image = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES, |
1091 |
GTK_ICON_SIZE_MENU); |
1149 |
GTK_ICON_SIZE_MENU); |
Lines 1096-1101
Link Here
|
1096 |
gtk_widget_show (mi); |
1154 |
gtk_widget_show (mi); |
1097 |
g_signal_connect (mi, "activate", G_CALLBACK (show_info_cb), netapplet); |
1155 |
g_signal_connect (mi, "activate", G_CALLBACK (show_info_cb), netapplet); |
1098 |
|
1156 |
|
|
|
1157 |
#ifdef NETWORK_CONF_TOOL |
1099 |
/* 'Configure Network Settings' item */ |
1158 |
/* 'Configure Network Settings' item */ |
1100 |
image = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, |
1159 |
image = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, |
1101 |
GTK_ICON_SIZE_MENU); |
1160 |
GTK_ICON_SIZE_MENU); |
Lines 1106-1111
Link Here
|
1106 |
gtk_widget_show (mi); |
1165 |
gtk_widget_show (mi); |
1107 |
g_signal_connect (mi, "activate", G_CALLBACK (configure_activate_cb), |
1166 |
g_signal_connect (mi, "activate", G_CALLBACK (configure_activate_cb), |
1108 |
netapplet); |
1167 |
netapplet); |
|
|
1168 |
#endif |
1109 |
|
1169 |
|
1110 |
mi = gtk_separator_menu_item_new (); |
1170 |
mi = gtk_separator_menu_item_new (); |
1111 |
gtk_menu_shell_append (GTK_MENU_SHELL (netapplet->popup_menu), mi); |
1171 |
gtk_menu_shell_append (GTK_MENU_SHELL (netapplet->popup_menu), mi); |
Lines 1325-1339
Link Here
|
1325 |
netapplet->accesspoints = new_aps; |
1385 |
netapplet->accesspoints = new_aps; |
1326 |
netapplet->active_ap = new_active; |
1386 |
netapplet->active_ap = new_active; |
1327 |
|
1387 |
|
1328 |
netapplet->active->icon = wireless_icon (netapplet->active); |
|
|
1329 |
netapplet_set_icon (netapplet->active->icon); |
1330 |
|
1331 |
if (changed) |
1388 |
if (changed) |
1332 |
populate_popup_menu (); |
1389 |
populate_popup_menu (); |
1333 |
else |
1390 |
else |
1334 |
update_popup_accesspoint_strengths (); |
1391 |
update_popup_accesspoint_strengths (); |
1335 |
} |
1392 |
} |
1336 |
|
1393 |
|
|
|
1394 |
static void |
1395 |
netapplet_handle_keys (GIOChannel *channel G_GNUC_UNUSED, |
1396 |
char **args) |
1397 |
{ |
1398 |
GSList *keys = NULL; |
1399 |
char **iter; |
1400 |
|
1401 |
for (iter = &args[1]; *iter != NULL; iter++) { |
1402 |
char *essid; |
1403 |
essid = g_strdup(*iter); |
1404 |
keys = g_slist_append(keys, essid); |
1405 |
} |
1406 |
|
1407 |
netapplet_free_keys(); |
1408 |
netapplet->keys = keys; |
1409 |
netapplet->need_keys = FALSE; |
1410 |
populate_popup_menu(); |
1411 |
} |
1412 |
|
1413 |
static void |
1414 |
netapplet_handle_preferred_aps (GIOChannel *channel G_GNUC_UNUSED, |
1415 |
char **args) |
1416 |
{ |
1417 |
GList *p_aps = NULL; |
1418 |
char **iter; |
1419 |
|
1420 |
for (iter = &args[1]; *iter != NULL; iter++) { |
1421 |
char *essid; |
1422 |
essid = g_strdup(*iter); |
1423 |
p_aps = g_list_append(p_aps, essid); |
1424 |
} |
1425 |
|
1426 |
netapplet_free_preferred_aps(); |
1427 |
netapplet->preferred_aps = p_aps; |
1428 |
|
1429 |
populate_popup_menu(); |
1430 |
} |
1431 |
|
1337 |
/* |
1432 |
/* |
1338 |
* handle the 'wireless' message, which tells us the active ESSID |
1433 |
* handle the 'wireless' message, which tells us the active ESSID |
1339 |
* |
1434 |
* |
Lines 1372-1377
Link Here
|
1372 |
netapplet->active_ap = ap; |
1467 |
netapplet->active_ap = ap; |
1373 |
} |
1468 |
} |
1374 |
|
1469 |
|
|
|
1470 |
if (preferred_aps_add(args[1])) |
1471 |
netapplet_set_preferred_aps(); |
1472 |
|
1473 |
if (netapplet->clear_essid) |
1474 |
netapplet_clr_essid("0"); |
1475 |
|
1476 |
if (netapplet->need_keys) |
1477 |
netapplet_get_keys(); |
1478 |
|
1375 |
out: |
1479 |
out: |
1376 |
populate_popup_menu (); |
1480 |
populate_popup_menu (); |
1377 |
} |
1481 |
} |
Lines 1382-1391
Link Here
|
1382 |
{ |
1486 |
{ |
1383 |
netapplet_set_icon (DISCONNECT_ICON); |
1487 |
netapplet_set_icon (DISCONNECT_ICON); |
1384 |
netapplet->active = NULL; |
1488 |
netapplet->active = NULL; |
1385 |
if (netapplet->accesspoints) { |
1489 |
netapplet->active_ap = NULL; |
1386 |
/* remove no-longer-valid wireless information */ |
|
|
1387 |
netapplet_free_accesspoints (); |
1388 |
} |
1389 |
|
1490 |
|
1390 |
populate_popup_menu (); |
1491 |
populate_popup_menu (); |
1391 |
} |
1492 |
} |
Lines 1431-1436
Link Here
|
1431 |
char **iter; |
1532 |
char **iter; |
1432 |
Connection *new_active = NULL; |
1533 |
Connection *new_active = NULL; |
1433 |
|
1534 |
|
|
|
1535 |
if (netapplet->wireless_available) |
1536 |
g_free(netapplet->wireless_interface); |
1537 |
|
1538 |
netapplet->wireless_available = 0; |
1539 |
|
1434 |
/* |
1540 |
/* |
1435 |
* This is used to restore netapplet->active to the new Connection |
1541 |
* This is used to restore netapplet->active to the new Connection |
1436 |
* value obtained below. This avoids a race where netapplet->active |
1542 |
* value obtained below. This avoids a race where netapplet->active |
Lines 1454-1459
Link Here
|
1454 |
if (strcmp (type, TYPE_WIRELESS) == 0) { |
1560 |
if (strcmp (type, TYPE_WIRELESS) == 0) { |
1455 |
conn->type = "Wireless"; |
1561 |
conn->type = "Wireless"; |
1456 |
conn->icon = wireless_icon (conn); |
1562 |
conn->icon = wireless_icon (conn); |
|
|
1563 |
|
1564 |
/* track the wireless interface. for more than one wireless |
1565 |
* interface, the first one becomes default */ |
1566 |
if (!netapplet->wireless_available) { |
1567 |
netapplet->wireless_available = 1; |
1568 |
netapplet->wireless_interface = g_strdup(interface); |
1569 |
} |
1457 |
} else if (strcmp (type, TYPE_ETHERNET) == 0) { |
1570 |
} else if (strcmp (type, TYPE_ETHERNET) == 0) { |
1458 |
conn->type = "Ethernet"; |
1571 |
conn->type = "Ethernet"; |
1459 |
conn->icon = ETHERNET_ICON; |
1572 |
conn->icon = ETHERNET_ICON; |
Lines 1522-1530
Link Here
|
1522 |
if (g_str_has_prefix (netapplet->active->type, "Wireless")) { |
1635 |
if (g_str_has_prefix (netapplet->active->type, "Wireless")) { |
1523 |
netapplet_get_accesspoints (netapplet->active->interface); |
1636 |
netapplet_get_accesspoints (netapplet->active->interface); |
1524 |
netapplet_get_wireless (netapplet->active->interface); |
1637 |
netapplet_get_wireless (netapplet->active->interface); |
1525 |
} else if (netapplet->accesspoints) { |
1638 |
} else { |
1526 |
/* remove no-longer-valid wireless information */ |
1639 |
netapplet->active_ap = NULL; |
1527 |
netapplet_free_accesspoints (); |
|
|
1528 |
} |
1640 |
} |
1529 |
|
1641 |
|
1530 |
if (changed) { |
1642 |
if (changed) { |
Lines 1601-1618
Link Here
|
1601 |
/* Protocol handlers */ |
1713 |
/* Protocol handlers */ |
1602 |
applet->handlers = g_hash_table_new (g_str_hash, g_str_equal); |
1714 |
applet->handlers = g_hash_table_new (g_str_hash, g_str_equal); |
1603 |
|
1715 |
|
1604 |
g_hash_table_insert (applet->handlers, "interfaces", |
1716 |
g_hash_table_insert (applet->handlers, "interfaces", netapplet_handle_interfaces); |
1605 |
netapplet_handle_interfaces); |
1717 |
g_hash_table_insert (applet->handlers, "active", netapplet_handle_active); |
1606 |
g_hash_table_insert (applet->handlers, "active", |
1718 |
g_hash_table_insert (applet->handlers, "wireless", netapplet_handle_wireless); |
1607 |
netapplet_handle_active); |
1719 |
g_hash_table_insert (applet->handlers, "accesspoints", netapplet_handle_accesspoints); |
1608 |
g_hash_table_insert (applet->handlers, "wireless", |
1720 |
g_hash_table_insert (applet->handlers, "preferred_aps", netapplet_handle_preferred_aps); |
1609 |
netapplet_handle_wireless); |
1721 |
g_hash_table_insert (applet->handlers, "keys", netapplet_handle_keys); |
1610 |
g_hash_table_insert (applet->handlers, "accesspoints", |
1722 |
g_hash_table_insert (applet->handlers, "disconnected", netapplet_handle_disconnected); |
1611 |
netapplet_handle_accesspoints); |
1723 |
g_hash_table_insert (applet->handlers, "unauthorized", netapplet_handle_unauthorized); |
1612 |
g_hash_table_insert (applet->handlers, "disconnected", |
|
|
1613 |
netapplet_handle_disconnected); |
1614 |
g_hash_table_insert (applet->handlers, "unauthorized", |
1615 |
netapplet_handle_unauthorized); |
1616 |
|
1724 |
|
1617 |
return applet; |
1725 |
return applet; |
1618 |
} |
1726 |
} |