summaryrefslogtreecommitdiffstats
path: root/perl-install/standalone/net_applet
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/standalone/net_applet')
-rw-r--r--perl-install/standalone/net_applet29
1 files changed, 16 insertions, 13 deletions
diff --git a/perl-install/standalone/net_applet b/perl-install/standalone/net_applet
index 939c697f7..bfc751064 100644
--- a/perl-install/standalone/net_applet
+++ b/perl-install/standalone/net_applet
@@ -21,11 +21,11 @@ use ugtk2 qw(:create :helpers :wrappers :dialogs);
my $onstartupfile = "$ENV{HOME}/.net_applet";
shouldStart() or die "$onstartupfile should be set to TRUE or use net_applet --force";
-# Allow multiple instances, but only one per user:
+#- Allow multiple instances, but only one per user:
is_running('net_applet') and die "net_applet already running\n";
my ($eventbox, $img, $bubble);
-my ($current_state, $current_interface, $menu, $wireless_menu, $timeout, $update_timeout);
+my ($current_state, $current_interface, $menu, $wireless_device, $wireless_menu, $timeout, $update_timeout);
add_icon_path("/usr/share/libDrakX/pixmaps/");
my $net = {};
@@ -57,7 +57,7 @@ my %actions = (
'downNetwork' => { name => sub { N("Disconnect %s", $_[0]) }, launch => sub { network::tools::stop_interface($_[0], 1) } },
'monitorNetwork' => { name => N("Monitor Network"), launch => \&run_net_monitor },
'monitorIFW' => { name => N("Interactive Firewall"), launch => \&run_drakids },
- 'wireless' => { name => N("Manage wireless networks"), launch => \&run_drakroam },
+ 'wireless' => { name => N("Manage wireless networks"), launch => sub { run_drakroam() } },
'confNetwork' => { name => N("Configure Network"), launch => sub { system("/usr/sbin/drakconnect --skip-wizard &") } },
'chooseInterface' => {
name => N("Watched interface"),
@@ -155,8 +155,9 @@ sub shouldStart() {
sub run_net_monitor() {
run_program::raw({ detach => 1 }, '/usr/sbin/net_monitor', '--defaultintf', $current_interface) unless is_running('net_monitor');
}
-sub run_drakroam() {
- run_program::raw({ detach => 1 }, '/usr/sbin/drakroam') unless is_running('drakroam');
+sub run_drakroam {
+ my ($o_ap) = @_;
+ run_program::raw({ detach => 1 }, '/usr/sbin/drakroam', if_($o_ap, "--ap=$o_ap")) unless is_running('drakroam');
}
sub run_drakids() {
$ifw_alert = 0;
@@ -167,7 +168,7 @@ sub run_drakids() {
}
}
sub generate_wireless_menuitem {
- my ($net) = @_;
+ my ($net, $ap) = @_;
$net->{menuitem} = Gtk2::CheckMenuItem->new;
$net->{menuitem}->set_draw_as_radio(1);
$net->{menuitem}->add(gtkpack_(gtkshow(Gtk2::HBox->new),
@@ -179,7 +180,7 @@ sub generate_wireless_menuitem {
eval { $monitor->select_network($net->{id}) };
$@ and err_dialog(N("Interactive Firewall"), N("Unable to contact daemon"));
} else {
- run_drakroam();
+ run_drakroam($ap);
}
checkNetworkForce();
});
@@ -187,7 +188,7 @@ sub generate_wireless_menuitem {
}
sub update_wireless_item {
my ($net, $ap_address) = @_;
- $net->{ssid_label}->set_text($net->{ssid} || "[$ap_address]");
+ $net->{ssid_label}->set_text($net->{essid} || "[$ap_address]");
$net->{keyring_image}->visible(to_bool($net->{flags}));
$net->{level_image}->set_from_pixbuf($pixbufs{link_level}{$net->{approx_level}});
@@ -196,11 +197,12 @@ sub update_wireless_item {
$net->{menuitem}->signal_handler_unblock($net->{activate});
}
sub checkWireless() {
- my $networks = eval { $monitor->list_wireless };
+ $wireless_device or return;
+ my ($networks) = network::monitor::list_wireless($monitor, $wireless_device);
foreach (keys %$networks) {
my $net = $wireless_networks{$_} ||= {};
put_in_hash($net, $networks->{$_});
- exists $net->{menuitem} or generate_wireless_menuitem($net);
+ exists $net->{menuitem} or generate_wireless_menuitem($net, $_);
update_wireless_item($net, $_);
}
$wireless_networks{$_}{menuitem}->visible(exists $networks->{$_}) foreach keys %wireless_networks;
@@ -215,6 +217,7 @@ sub checkNetworkForce() {
$net = {};
network::network::read_net_conf($net);
undef $current_state;
+ $wireless_device = detect_devices::get_wireless_interface();
checkWireless();
checkNetwork();
}
@@ -231,6 +234,7 @@ sub go2State {
if ($current_state ne $state_type || $current_interface ne $interface) {
$current_state = $state_type;
$current_interface = $interface;
+ $wireless_device = detect_devices::get_wireless_interface();
if ($menu) {
if (my $m = $wireless_menu && $wireless_menu->get_submenu) {
$_->{menuitem}->get_parent and $m->remove($_->{menuitem}) foreach values %wireless_networks;
@@ -283,7 +287,6 @@ sub generate_menu {
};
my (@settings);
- my $has_wireless = $monitor && detect_devices::has_wireless();
my $interactive;
eval { $interactive = $ifw->get_interactive };
@@ -296,7 +299,7 @@ sub generate_menu {
$menu->append($create_item->('confNetwork'));
if ($current_state ne 'notconfigured') {
- $menu->append($create_item->('wireless')) if $has_wireless;
+ $menu->append($create_item->('wireless')) if $wireless_device;
push @settings, $create_item->('chooseInterface');
}
@@ -311,7 +314,7 @@ sub generate_menu {
toggled => sub { setAutoStart(uc(bool2text($_[0]->get_active))) }));
$menu->append(gtkshow(Gtk2::SeparatorMenuItem->new));
- $has_wireless and $menu->append(gtkshow($wireless_menu = create_menu(N("Wireless networks"),
+ $wireless_device and $menu->append(gtkshow($wireless_menu = create_menu(N("Wireless networks"),
map { $_->{menuitem} } values %wireless_networks)));
$menu->append(gtkshow(create_menu(N("Settings"), grep { $_ } @settings)));
$menu->append(gtkshow(Gtk2::SeparatorMenuItem->new));