[pve-devel] [PATCH installer v3] fix #4869: Show state in management interface ComboBox

Maximiliano Sandoval R m.sandoval at proxmox.com
Thu Oct 19 10:35:31 CEST 2023


From: Maximiliano Sandoval <m.sandoval at proxmox.com>

This is a continuation of
https://lists.proxmox.com/pipermail/pve-devel/2023-August/058639.html.

Signed-off-by: Maximiliano Sandoval R <m.sandoval at proxmox.com>
---
v3 was tested only with `make check-pve`. v2 was properly tested by Filip
Schauer <f.schauer at proxmox.com> in a VM.

Differences from v2:
  - Use a escaped utf8 character instead of using `use uft-8;`

Differences from v1:
  - Instead of adding a `- UP` or `- DOWN` to the interface label, we display a
    green BLACK CIRCLE ● similar to what systemd does. To achieve this we
    separate the GtkWidget in the dropdown in two, and set the color of the new
    one to green. It was discussed off-list that adding a character for
    interfaces that were down introduced too much visual noise.

 proxinstall | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/proxinstall b/proxinstall
index d5b2565..11e537b 100755
--- a/proxinstall
+++ b/proxinstall
@@ -341,10 +341,20 @@ sub create_ipconf_view {
 
     my ($cidr_box, $ipconf_entry_addr, $ipconf_entry_mask) = create_cidr_inputs($cidr);
 
-    my $device_cb = Gtk3::ComboBoxText->new();
+    my $device_model = Gtk3::ListStore->new('Glib::String', 'Glib::String');
+    my $device_cb = Gtk3::ComboBox->new_with_model($device_model);
     $device_cb->set_active(0);
     $device_cb->set_visible(1);
 
+    my $icon_cell = Gtk3::CellRendererText->new();
+    $device_cb->pack_start($icon_cell, 0);
+    $device_cb->add_attribute($icon_cell, 'text', 0);
+    $icon_cell->set_property('foreground', 'green');
+
+    my $cell = Gtk3::CellRendererText->new();
+    $device_cb->pack_start($cell, 0);
+    $device_cb->add_attribute($cell, 'text', 1);
+
     my $get_device_desc = sub {
 	my $iface = shift;
 	return "$iface->{name} - $iface->{mac} ($iface->{driver})";
@@ -374,7 +384,12 @@ sub create_ipconf_view {
     my $i = 0;
     for my $index (sort keys $ipconf->{ifaces}->%*) {
 	my $iface = $ipconf->{ifaces}->{$index};
-	$device_cb->append_text($get_device_desc->($iface));
+	my $iter = $device_model->append();
+	my $symbol = "$iface->{state}" eq "UP" ? "\x{25CF}" : ' ';
+	$device_model->set($iter,
+	   0 => $symbol,
+	   1 => $get_device_desc->($iface),
+	);
 	$device_active_map->{$i} = $index;
 	$device_active_reverse_map->{$iface->{name}} = $i;
 	if ($ipconf_first_view && $index == $ipconf->{default}) {
-- 
2.39.2






More information about the pve-devel mailing list