+ my $ipbox;
+ ($ipbox, $ipconf_entry_addr) =
+ create_text_input ("192.168.100.2", 'IP Address:');
+
+ my $maskbox;
+ ($maskbox, $ipconf_entry_mask) =
+ create_text_input ("255.255.255.0", 'Netmask:');
+
+ my $device_cb = Gtk3::ComboBoxText->new();
+ $device_cb->set_active(0);
+ $device_cb->set_visible(1);
+
+ my $get_device_desc = sub {
+ my $iface = shift;
+ return "$iface->{name} - $iface->{mac} ($iface->{driver})";
+ };
+
+ my $device_active_map = {};
+
+ my $device_change_handler = sub {
+ my $current = shift;
+ $ipconf->{selected} = $device_active_map->{$current->get_active()};
+ my $iface = $ipconf->{ifaces}->{$ipconf->{selected}};
+ $ipconf_entry_addr->set_text($iface->{inet}->{addr} || $iface->{inet6}->{addr})
+ if $iface->{inet}->{addr} || $iface->{inet6}->{addr};
+ $ipconf_entry_mask->set_text($iface->{inet}->{mask} || $iface->{inet6}->{mask})
+ if $iface->{inet}->{mask} || $iface->{inet6}->{mask};
+ };
+
+ my $i = 0;
+ foreach my $index (sort keys %{$ipconf->{ifaces}}) {
+ $device_cb->append_text(&$get_device_desc($ipconf->{ifaces}->{$index}));
+ $device_active_map->{$i} = $index;
+ if ($ipconf_first_view && $index == $ipconf->{default}) {
+ $device_cb->set_active($i);
+ &$device_change_handler($device_cb);
+ $ipconf_first_view = 0;
+ }
+ $device_cb->signal_connect ('changed' => $device_change_handler);
+ $i++;
+ }
+
+ $device_cb->set_active(0)
+ if !($ipconf->{selected});