From d2c2107f176ffc269a2b3992b3612c1ee86ceb64 Mon Sep 17 00:00:00 2001 From: Olivier Blin Date: Tue, 7 May 2013 01:42:40 +0000 Subject: connection manager: extract gtk2 specific code in separate module (to reuse connection manager in harddrake service for packages installation) --- lib/network/connection_manager.pm | 176 +------------------------------------- 1 file changed, 4 insertions(+), 172 deletions(-) (limited to 'lib/network/connection_manager.pm') diff --git a/lib/network/connection_manager.pm b/lib/network/connection_manager.pm index 5cbe07e..9b920a7 100644 --- a/lib/network/connection_manager.pm +++ b/lib/network/connection_manager.pm @@ -7,27 +7,10 @@ use common; use run_program; use detect_devices; use interactive; -use mygtk2; -use ugtk2 qw(:create :helpers :wrappers); -use Gtk2::SimpleList; -use network::signal_strength; use network::network; use network::tools; use network::connection; use modules; -use locale; # for cmp - -sub create_pixbufs() { - { - state => { map { $_ => gtkcreate_pixbuf($_) } qw(connected disconnected refresh) }, - link_level => { map { - $_ => gtkcreate_pixbuf('wifi-' . sprintf('%03d', $_))->scale_simple(24, 24, 'hyper'); - } qw(20 40 60 80 100) }, - encryption => { map { - $_ => gtkcreate_pixbuf("encryption-$_-24"); - } qw(open weak strong) }, - }; -} sub new { my ($class, $in, $net, $w, $pixbufs) = @_; @@ -204,7 +187,6 @@ sub start_connection { or return; } - gtkset_mousecursor_wait($cmanager->{gui}{w}{window}->window); my $wait = $cmanager->{in}->wait_message(N("Please wait"), N("Connecting...")); if ($cmanager->{connection}->can('apply_network_selection')) { $cmanager->load_settings; @@ -213,7 +195,6 @@ sub start_connection { $cmanager->{connection}->prepare_connection if $cmanager->{connection}->can('prepare_connection'); $cmanager->{connection}->disconnect; $cmanager->{connection}->connect($cmanager->{in}, $cmanager->{net}); - gtkset_mousecursor_normal($cmanager->{gui}{w}{window}->window); $cmanager->update_on_status_change; if ($cmanager->{wait_message_timeout}) { @@ -232,12 +213,8 @@ sub start_connection { sub stop_connection { my ($cmanager) = @_; - - gtkset_mousecursor_wait($cmanager->{gui}{w}{window}->window); my $_wait = $cmanager->{in}->wait_message(N("Please wait"), N("Disconnecting...")); $cmanager->{connection}->disconnect; - gtkset_mousecursor_normal($cmanager->{gui}{w}{window}->window); - $cmanager->update_on_status_change; } @@ -265,67 +242,6 @@ sub toggle_connection { } } -sub create_networks_list { - my ($cmanager) = @_; - - if ($cmanager->{gui}{show_unique_network}) { - $cmanager->{gui}{networks_list} = gtknew('HBox', spacing => 20); - return; - } - - $cmanager->{gui}{networks_list} = Gtk2::SimpleList->new( - "AP" => "hidden", - '' => "pixbuf", - N("SSID") => "text", - N("Signal strength") => "pixbuf", - N("Encryption") => "pixbuf", - N("Operating Mode") => "text", - ); - $cmanager->{gui}{networks_list}->get_selection->set_mode('single'); - $cmanager->{gui}{networks_list}->get_selection->signal_connect('changed' => sub { $cmanager->select_network }); - - $cmanager->{gui}{networks_list}->signal_connect('query-tooltip' => sub { - my ($widget, $x, $y, $kbd_tip, $tooltip) = @_; - (undef, undef, my $model, my $path, my $iter) = $widget->get_tooltip_context($x, $y, $kbd_tip) or return; - my $ap = $model->get($iter, 0); - my $network = $cmanager->{connection}{networks}{$ap}; - $tooltip->set_text(sprintf("%2.2f%% %s\n", $network->{signal_strength}, $network->{flags})); - $widget->set_tooltip_row($tooltip, $path); - 1; - }); - $cmanager->{gui}{networks_list}->set_has_tooltip(1); - $cmanager->{gui}{networks_list}->get_column(1)->set_sort_column_id(1); - $cmanager->{gui}{networks_list}->get_model->set_sort_func(1, sub { - my ($sortable, $iter_left, $iter_right) = @_; - my $s1 = $sortable->get($iter_left, 2); - my $s2 = $sortable->get($iter_right, 2); - return $s1 cmp $s2; - }); - $cmanager->{gui}{networks_list}->get_column(2)->set_sort_column_id(2); - $cmanager->{gui}{networks_list}->get_model->set_sort_func(2, sub { - my ($sortable, $iter_left, $iter_right) = @_; - my $s1 = $cmanager->{connection}{networks}{$sortable->get($iter_left, 0)}{signal_strength}; - my $s2 = $cmanager->{connection}{networks}{$sortable->get($iter_right, 0)}{signal_strength}; - return $s1 <=> $s2; - }); - $cmanager->{gui}{networks_list}->get_column(3)->set_sort_column_id(3); - $cmanager->{gui}{networks_list}->get_model->set_sort_func(3, sub { - my ($sortable, $iter_left, $iter_right) = @_; - my $s1 = $cmanager->{connection}{networks}{$sortable->get($iter_left, 0)}{flags}; - my $s2 = $cmanager->{connection}{networks}{$sortable->get($iter_right, 0)}{flags}; - #FIXME Should define an explicit order OPEN < WEP < WPA - return $s1 cmp $s2; - }); - $cmanager->{gui}{networks_list}->set_enable_search(1); - $cmanager->{gui}{networks_list}->set_search_column(1); - $cmanager->{gui}{networks_list}->set_search_equal_func(sub { - my ($model, $_column, $key, $iter) = @_; - return $model->get($iter, 2) !~ /^\Q$key/i; - }); - # Sort by signal level by default - $cmanager->{gui}{networks_list}->get_model->set_sort_column_id(2, 'descending'); -} - sub select_network { my ($cmanager) = @_; @@ -336,14 +252,6 @@ sub select_network { $cmanager->update_on_status_change; } -sub filter_networks { - my ($connection) = @_; - $_->{configured} = $connection->network_is_configured($_) foreach values %{$connection->{networks}}; - sort { - $b->{current} <=> $a->{current} || $b->{configured} <=> $a->{configured} || $b->{signal_strength} <=> $a->{signal_strength} || $a->{name} cmp $b->{name}; - } values %{$connection->{networks}}; -} - sub update_networks { my ($cmanager) = @_; @@ -356,90 +264,15 @@ sub update_networks { $cmanager->{connection}{networks} = $cmanager->{connection}->get_networks($cmanager->{net}); $cmanager->{connection}{network} ||= find { $cmanager->{connection}{networks}{$_}{current} } keys %{$cmanager->{connection}{networks}}; - my $routes = network::tools::get_routes(); - my $interface = $cmanager->{connection}->get_interface; - my $connected = exists $routes->{$interface}{network}; - - my @networks = filter_networks($cmanager->{connection}); - foreach my $network (@networks) { - my $ap = $network->{ap}; - my $connected_pixbuf = $network->{current} ? $connected ? $cmanager->{gui}{pixbufs}{state}{connected} : $cmanager->{gui}{pixbufs}{state}{refresh} : undef; - my $network_name = !$network->{essid} && exists $cmanager->{net}{wireless}{$ap} && $cmanager->{net}{wireless}{$ap}{WIRELESS_ESSID} || $network->{name}; - my $strength_pixbuf = network::signal_strength::get_strength_icon($network); - - if ($cmanager->{gui}{show_unique_network}) { - gtkset($cmanager->{gui}{networks_list}, children => [ - 1, $network_name, - 0, Gtk2::Image->new_from_pixbuf($strength_pixbuf), - ]); - $cmanager->{connection}{network} = $network_name; - } else { - push @{$cmanager->{gui}{networks_list}{data}}, [ - $ap || $network->{name}, - $connected_pixbuf, - $network_name, - $strength_pixbuf, - $cmanager->{gui}{pixbufs}{encryption}{$network->{flags} =~ /WPA/i ? 'strong' : $network->{flags} =~ /WEP/i ? 'weak' : 'open'}, - $network->{mode}, - ]; - } - } - - if ($cmanager->{connection}{network} && !$cmanager->{gui}{show_unique_network}) { - my $index = eval { find_index { $_->[0] eq $cmanager->{connection}{network} } @{$cmanager->{gui}{networks_list}{data}} }; - $cmanager->{gui}{networks_list}->select($index) if defined $index; - } - + $cmanager->update_networks_list(); undef $wait; } $cmanager->update_on_status_change; } -sub update_on_status_change { - my ($cmanager) = @_; - - if ($cmanager->{gui}{buttons}{connect_toggle}) { - my $disconnect = $cmanager->toggle_would_disconnect; - $cmanager->{gui}{buttons}{connect_toggle}->set_label($disconnect ? N("Disconnect") : N("Connect")); - gtkset($cmanager->{gui}{buttons}{connect_toggle}, image => gtknew('Image', file => $disconnect ? 'stop-16' : 'activate-16')) - if $cmanager->{gui}{buttons}{connect_toggle}->get_image; - $cmanager->{gui}{buttons}{connect_toggle}->set_sensitive( - $cmanager->{connection} && ( - !$cmanager->{connection}->can('get_networks') || - $cmanager->{connection}->get_status || #- always allow to disconnect if connected - $cmanager->{connection}{network} - )); - } - - $cmanager->{gui}{buttons}{connect_start}->set_sensitive($cmanager->{connection} && (!$cmanager->{connection}->get_status || $cmanager->{connection}{network})) - if $cmanager->{gui}{buttons}{connect_start}; - $cmanager->{gui}{buttons}{connect_stop}->set_sensitive($cmanager->{connection} && $cmanager->{connection}->get_status) - if $cmanager->{gui}{buttons}{connect_stop}; - - my $allow_configure; - if ($cmanager->{connection}) { - my $may_have_network = - !$cmanager->{connection}->can('get_networks') || - $cmanager->{connection}{network}; - $allow_configure = $may_have_network || !$cmanager->check_setup; - } - - $cmanager->{gui}{buttons}{configure}->set_sensitive($allow_configure) - if $cmanager->{gui}{buttons}{configure}; - - my $has_interface = to_bool($cmanager->{connection} && $cmanager->{connection}->get_interface); - $cmanager->{gui}{buttons}{refresh}->set_sensitive($has_interface) - if $cmanager->{gui}{buttons}{refresh}; - $cmanager->{gui}{buttons}{monitor}->set_sensitive($has_interface) - if $cmanager->{gui}{buttons}{monitor}; - - if ($cmanager->{gui}{status_image} && $cmanager->{connection}) { - my $icon = $cmanager->{connection}->get_status_icon; - ugtk2::_find_imgfile($icon) or $icon = $cmanager->{connection}->get_type_icon; - gtkset($cmanager->{gui}{status_image}, file => $icon); - } -} +sub update_networks_list {} +sub update_on_status_change {} sub _get_network_event_message { my ($connections, $member, @args) = @_; @@ -473,7 +306,7 @@ sub setup_dbus_handlers { if ($cmanager->{connection}->can('get_networks') && !$cmanager->{connection}->network_scan_is_slow) { $cmanager->update_networks; } else { - $cmanager->network::connection_manager::update_on_status_change; + $cmanager->update_on_status_change; } if ($cmanager->{wait_message}) { if ($status eq 'interface_up') { @@ -502,7 +335,6 @@ sub setup_dbus_handlers { }); $dbus->{connection}->add_match("type='signal',interface='org.mageia.network'"); $dbus->{connection}->add_match("type='signal',interface='org.mageia.monitoring.wireless'"); - dbus_object::set_gtk2_watch_helper($dbus); } 1; -- cgit v1.2.1