From: Christoph Heiss <c.heiss@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH installer v5 20/23] gui: network: split advanced options dialog into tabs
Date: Fri, 6 Nov 2026 14:10:49 +0100 [thread overview]
Message-ID: <20261106131058.804870-21-c.heiss@proxmox.com> (raw)
In-Reply-To: <20261106131058.804870-1-c.heiss@proxmox.com>
With the bond and VLAN options, the advanced network options dialog
stacks three sections, and both the pinning and the bond section list
every physical network interface. Servers with six or more ports, for
example two each of 1G, 10G and 100G, are not unusual, which makes the
dialog taller than smaller screen resolutions can show.
Put each section on its own tab and limit the page height relative to
the screen height, so that a page with many interfaces scrolls instead
of pushing the dialog buttons off the screen. If an input is invalid,
switch to the tab that contains it before showing the error, as it
could otherwise be on a page that is not visible.
Originally-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
Changes v4 -> v5:
* no changes
Changes v3 -> v4:
* no changes
Changes v2 -> v3:
* new patch
proxinstall | 80 ++++++++++++++++++++++++++---------------------------
1 file changed, 40 insertions(+), 40 deletions(-)
diff --git a/proxinstall b/proxinstall
index 079b227..6b8c7e8 100755
--- a/proxinstall
+++ b/proxinstall
@@ -381,13 +381,10 @@ my $create_label_widget_grid = sub {
return $grid;
};
-my sub create_network_interface_pin_frame {
+my sub create_network_interface_pin_page {
my ($on_enable_changed) = @_;
- my $frame = Gtk3::Frame->new('Interface Name Pinning');
-
my $vbox = Gtk3::Box->new('vertical', 5);
- $frame->add($vbox);
$vbox->set_margin_start(10);
$vbox->set_margin_end(10);
$vbox->set_margin_top(5);
@@ -468,14 +465,11 @@ my sub create_network_interface_pin_frame {
Proxmox::Install::Config::set_network_interface_pin_map(\%new_mapping);
};
- return ($frame, $on_done);
+ return ($vbox, $on_done);
}
-my sub create_network_bond_frame {
- my $frame = Gtk3::Frame->new('Management Bond');
-
+my sub create_network_bond_page {
my $vbox = Gtk3::Box->new('vertical', 5);
- $frame->add($vbox);
$vbox->set_margin_start(10);
$vbox->set_margin_end(10);
$vbox->set_margin_top(5);
@@ -483,7 +477,7 @@ my sub create_network_bond_frame {
my $enable_checkbox = Gtk3::CheckButton->new('Enable bonding for management interface');
$enable_checkbox->set_active($gtk_state->{network_bonding_enabled});
- $vbox->pack_start($enable_checkbox, 1, 0, 5);
+ $vbox->pack_start($enable_checkbox, 0, 0, 5);
my $bond_opts = Proxmox::Install::Config::get_mngmt_bond_opt();
my $interfaces = Proxmox::Install::RunEnv::get()->{network}->{interfaces};
@@ -639,14 +633,11 @@ my sub create_network_bond_frame {
Proxmox::Install::Config::set_mngmt_bond_opt('primary_interface', $primary_mac);
};
- return ($frame, $refresh_if_names, $on_done);
+ return ($vbox, $refresh_if_names, $on_done);
}
-my sub create_network_vlan_frame {
- my $frame = Gtk3::Frame->new('Management VLAN');
-
+my sub create_network_vlan_page {
my $vbox = Gtk3::Box->new('vertical', 5);
- $frame->add($vbox);
$vbox->set_margin_start(10);
$vbox->set_margin_end(10);
$vbox->set_margin_top(5);
@@ -654,7 +645,7 @@ my sub create_network_vlan_frame {
my $enable_checkbox = Gtk3::CheckButton->new('Enable VLAN setup on management interface');
$enable_checkbox->set_active($gtk_state->{network_vlan_enabled});
- $vbox->pack_start($enable_checkbox, 1, 0, 5);
+ $vbox->pack_start($enable_checkbox, 0, 0, 5);
my $vlan_opts = Proxmox::Install::Config::get_mngmt_vlan_opt();
@@ -697,7 +688,7 @@ my sub create_network_vlan_frame {
Proxmox::Install::Config::set_mngmt_vlan_opt('enabled', 1);
};
- return ($frame, $on_done);
+ return ($vbox, $on_done);
}
my sub create_network_advanced_options_view {
@@ -709,37 +700,46 @@ my sub create_network_advanced_options_view {
my $content = $dialog->get_content_area();
- my $scrolled_window = Gtk3::ScrolledWindow->new();
- $scrolled_window->set_hexpand(1);
- $scrolled_window->set_vexpand(1);
- $scrolled_window->set_propagate_natural_height(1);
- $scrolled_window->set_policy('never', 'automatic');
- $scrolled_window->set_min_content_height(200);
+ my ($bond_page, $bond_refresh, $bond_on_done) = create_network_bond_page();
+ my ($pin_page, $pin_on_done) = create_network_interface_pin_page($bond_refresh);
+ my ($vlan_page, $vlan_on_done) = create_network_vlan_page();
- my $hbox = Gtk3::Box->new('vertical', 0);
+ # leave room for the title, tabs and buttons, so the dialog also fits smaller screens
+ my $max_page_height = Gtk3::Gdk::Screen::get_default()->get_height() - 250;
+ $max_page_height = 200 if $max_page_height < 200;
- my ($bond_frame, $bond_refresh, $bond_on_done) = create_network_bond_frame();
- my ($pin_frame, $pin_on_done) = create_network_interface_pin_frame($bond_refresh);
- my ($vlan_frame, $vlan_on_done) = create_network_vlan_frame();
+ my $notebook = Gtk3::Notebook->new();
+ my @pages = (
+ ['Interface Name Pinning', $pin_page, $pin_on_done],
+ ['Management Bond', $bond_page, $bond_on_done],
+ ['Management VLAN', $vlan_page, $vlan_on_done],
+ );
+ for my $page (@pages) {
+ my ($title, $widget) = $page->@*;
- $hbox->pack_start($pin_frame, 0, 0, 10);
- $hbox->pack_start($bond_frame, 0, 0, 10);
- $hbox->pack_start($vlan_frame, 0, 0, 10);
+ my $scrolled_window = Gtk3::ScrolledWindow->new();
+ $scrolled_window->set_hexpand(1);
+ $scrolled_window->set_vexpand(1);
+ $scrolled_window->set_propagate_natural_height(1);
+ $scrolled_window->set_policy('never', 'automatic');
+ $scrolled_window->set_min_content_height(200);
+ $scrolled_window->set_max_content_height($max_page_height);
+ $scrolled_window->add($widget);
- $scrolled_window->add($hbox);
- $content->pack_start($scrolled_window, 1, 1, 10);
+ $notebook->append_page($scrolled_window, Gtk3::Label->new($title));
+ }
+ $content->pack_start($notebook, 1, 1, 10);
my $inputs = {};
$dialog->signal_connect(
response => sub {
- eval {
- $pin_on_done->();
- $bond_on_done->();
- $vlan_on_done->();
- };
- if ($@) {
- Proxmox::UI::message($@, $dialog);
- return;
+ for my $i (0 .. $#pages) {
+ eval { $pages[$i]->[2]->() };
+ if (my $err = $@) {
+ $notebook->set_current_page($i);
+ Proxmox::UI::message($err, $dialog);
+ return;
+ }
}
$dialog->destroy();
--
2.56.0
next prev parent reply other threads:[~2026-11-06 13:14 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 13:10 [PATCH installer v5 00/23] fix #2164: add bond and vlan setup across all installers Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 01/23] install: run make tidy Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 02/23] tree-wide: use `MacAddress` type instead of string for MAC addresses Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 03/23] install: factor out ifupdown2 config generation into own subroutine Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 04/23] install: do not rely on interface name map to be fully populated Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 05/23] install: config: add option for setting up bond on management interface Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 06/23] install: config: add option for setting up vlan " Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 07/23] install: network: set up management bond if requested Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 08/23] install: network: set up vlan on management interface " Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 09/23] gui: network: factor out name pinning into advanced options dialog Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 10/23] gui: network: add bond setup options to " Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 11/23] gui: network: add vlan setup options to advanced network dialog Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 12/23] auto: pass through management network bond options to low-level installer Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 13/23] auto: pass through management network vlan " Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 14/23] tui: drop long obsolete comment about logo formatting Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 15/23] tui: views: add widget for displaying a group of checkboxes Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 16/23] tui: network: factor out name pinning into advanced options dialog Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 17/23] tui: network: match form label style when enabling/disabling elements Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 18/23] tui: network: add bond setup options to advanced network dialog Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 19/23] tui: network: add vlan " Christoph Heiss
2026-11-06 13:10 ` Christoph Heiss [this message]
2026-11-06 13:10 ` [PATCH installer v5 21/23] tui: network: split advanced options dialog into tabs Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 22/23] gui: network: list bond member candidates sharing a MAC address once Christoph Heiss
2026-11-06 13:10 ` [PATCH installer v5 23/23] tui: " Christoph Heiss
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261106131058.804870-21-c.heiss@proxmox.com \
--to=c.heiss@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.