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_applet32
1 files changed, 32 insertions, 0 deletions
diff --git a/perl-install/standalone/net_applet b/perl-install/standalone/net_applet
index 14ba43e6f..da696e64b 100644
--- a/perl-install/standalone/net_applet
+++ b/perl-install/standalone/net_applet
@@ -11,6 +11,7 @@ use network::tools;
use mygtk2 qw(gtknew);
use network::activefw;
+use network::monitor;
use Gtk2::TrayIcon;
@@ -31,6 +32,11 @@ my $net = {};
my $watched_interface;
my $dbus = dbus_object::system_bus();
+my $monitor = network::monitor->new($dbus);
+
+my $keyring_pixbuf = Gtk2::Gdk::Pixbuf->new_from_file("/usr/share/pixmaps/keyring-small.png"); #- provided by usermode, required by drakxtools
+my %link_level_pixbufs = map { $_ => Gtk2::Gdk::Pixbuf->new_from_file("wifi-$_.png") } qw(20 40 60 80 100);
+my %wireless_networks;
$SIG{HUP} = sub {
print "received SIGHUP, reloading network configuration\n";
@@ -156,7 +162,30 @@ sub netMonitor() {
system("/usr/sbin/net_monitor&");
checkNetwork();
}
+sub checkWireless() {
+ my $networks = $monitor->list_wireless;
+ foreach (keys %$networks) {
+ my $new = !exists $wireless_networks{$_};
+ my $net = $wireless_networks{$_} ||= {};
+ if ($new) {
+ $net->{image} = Gtk2::Image->new;
+ $net->{menuitem} = Gtk2::MenuItem->new;
+ $net->{menuitem}->add(gtkshow(gtkpack_(Gtk2::HBox->new,
+ 1, gtkset_alignment($net->{ssid_label} = Gtk2::Label->new, 0, 0),
+ 0, $net->{keyring_image} = Gtk2::Image->new_from_pixbuf($keyring_pixbuf),
+ 0, $net->{level_image} = Gtk2::Image->new)));
+ undef $current_state; #- force menu redraw
+ }
+ put_in_hash($net, $networks->{$_});
+ my $approx_level = 20+int($net->{level}/20)*20;
+ $net->{ssid_label}->set_text($net->{ssid} || "[$_]");
+ $net->{keyring_image}->visible(defined $net->{flags});
+ $net->{level_image}->set_from_pixbuf($link_level_pixbufs{$approx_level});
+ }
+ $wireless_networks{$_}{menuitem}->visible(exists $networks->{$_}) foreach keys %wireless_networks;
+}
sub checkNetwork() {
+ checkWireless();
my ($gw_intf, $_is_up, $gw_address) = $watched_interface ?
($watched_interface, network::tools::get_interface_status($watched_interface)) :
network::tools::get_internet_connection($net);
@@ -209,6 +238,9 @@ sub setState {
}
}
$menu->append(gtkshow(Gtk2::SeparatorMenuItem->new));
+ $menu->append($_->{menuitem}) foreach values %wireless_networks;
+ $menu->append(gtkshow(Gtk2::SeparatorMenuItem->new));
+
if ($enable_activefw) {
$menu->append($interactive_cb = gtkshow(gtksignal_connect(gtkset_active(Gtk2::CheckMenuItem->new_with_label(N("Interactive intrusion detection")),
$activefw->get_interactive),