diff --git a/panels/network.py b/panels/network.py index eae86a0bb..bff3d0fb3 100644 --- a/panels/network.py +++ b/panels/network.py @@ -46,7 +46,7 @@ def __init__(self, screen, title): self._screen.panels_reinit.append(self._screen._cur_panels[-1]) return self.update_timeout = None - self.network_list = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=True, vexpand=True) + self.network_list = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=True, vexpand=False) self.network_rows = {} self.networks = {} self.wifi_signal_icons = { @@ -66,23 +66,24 @@ def __init__(self, screen, title): logging.info(f"Primary interface: {self.interface}") self.is_ap_mode = False + self.max_info_width_chars = 30 if self._screen.vertical_mode else 60 self.labels['interface'] = Gtk.Label( - hexpand=True, - halign=Gtk.Align.START, + halign=Gtk.Align.CENTER, wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR, ) - self.labels['interface'].set_xalign(0) - self.labels['interface'].set_max_width_chars(30 if self._screen.vertical_mode else 60) + self.labels['interface'].set_xalign(0.5) + self.labels['interface'].set_justify(Gtk.Justification.CENTER) + self.labels['interface'].set_max_width_chars(self.max_info_width_chars) self.labels['interface'].set_no_show_all(True) self.labels['ip'] = Gtk.Label( - hexpand=True, - halign=Gtk.Align.START, + halign=Gtk.Align.CENTER, wrap=True, wrap_mode=Pango.WrapMode.WORD_CHAR, ) - self.labels['ip'].set_xalign(0) - self.labels['ip'].set_max_width_chars(30 if self._screen.vertical_mode else 60) + self.labels['ip'].set_xalign(0.5) + self.labels['ip'].set_justify(Gtk.Justification.CENTER) + self.labels['ip'].set_max_width_chars(self.max_info_width_chars) if self.interface is not None: self.update_interface_display() self.labels['ip'].set_text(f"IP: {self.sdbus_nm.get_ip_address()}") @@ -100,7 +101,8 @@ def __init__(self, screen, title): ) self.wifi_toggle.connect("notify::active", self.toggle_wifi) - info_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=True, vexpand=False) + info_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=False, vexpand=False) + info_box.set_halign(Gtk.Align.CENTER) info_box.add(self.labels['interface']) info_box.add(self.labels['ip']) @@ -108,12 +110,19 @@ def __init__(self, screen, title): controls_box.add(self.reload_button) controls_box.add(self.wifi_toggle) + right_area = Gtk.Box(hexpand=True, vexpand=False) + right_area.set_halign(Gtk.Align.END) + right_area.add(controls_box) + sbox = Gtk.Box(spacing=5, hexpand=True, vexpand=False) + sbox.add(Gtk.Box(hexpand=True)) sbox.add(info_box) - sbox.pack_end(controls_box, False, False, 0) + sbox.add(right_area) scroll = self._gtk.ScrolledWindow() - self.labels['main_box'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, vexpand=True) + scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) + scroll.set_propagate_natural_height(False) + self.labels['main_box'] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, hexpand=True, vexpand=True) # AP test feature visibility flag self.show_ap_toggle = self._config.get_main_config().getboolean('show_ap_toggle', False) @@ -166,7 +175,7 @@ def __init__(self, screen, title): self.update_single_network_info() self.labels['main_box'].pack_start(scroll, True, True, 0) - self.content.add(self.labels['main_box']) + self.content.pack_start(self.labels['main_box'], True, True, 0) def popup_callback(self, msg, level=3): self._screen.show_popup_message(msg, level) @@ -301,7 +310,7 @@ def close_add_network(self): for child in self.content.get_children(): self.content.remove(child) - self.content.add(self.labels['main_box']) + self.content.pack_start(self.labels['main_box'], True, True, 0) self.content.show() for i in ['add_network', 'network_psk', 'network_identity']: if i in self.labels: @@ -631,18 +640,22 @@ def update_ap_display(self): # Add AP info display ap_info_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10, - valign=Gtk.Align.CENTER, vexpand=True) + valign=Gtk.Align.CENTER, vexpand=False) ap_info_box.get_style_context().add_class("frame-item") ap_name_label = Gtk.Label() - ap_name_label.set_markup(f"{self.ap_ssid}") + ap_name_label.set_markup( + f"{GLib.markup_escape_text(self.ap_ssid)}" + ) ap_name_label.set_halign(Gtk.Align.CENTER) ap_status_label = Gtk.Label(label=_("Access Point Mode")) ap_status_label.set_halign(Gtk.Align.CENTER) ap_password_label = Gtk.Label() - ap_password_label.set_markup(f"{_('Password')}: {self.ap_password}") + ap_password_label.set_markup( + f"{_('Password')}: {GLib.markup_escape_text(self.ap_password)}" + ) ap_password_label.set_halign(Gtk.Align.CENTER) ap_info_box.add(ap_name_label) @@ -660,9 +673,11 @@ def update_ip_display(self): wifi_ip = ip_info.get("wifi", "?") ethernet_ips = ip_info.get("ethernet", []) ethernet_text = ", ".join(ethernet_ips) if ethernet_ips else _("Not connected") - self.labels['ip'].set_text(f"IP: Wlan {wifi_ip} | Eth {ethernet_text}") + self.labels['ip'].set_max_width_chars(self.max_info_width_chars) + self.labels['ip'].set_text(f"Wlan: {wifi_ip}\nEth: {ethernet_text}") return True + self.labels['ip'].set_max_width_chars(self.max_info_width_chars) ip = self.sdbus_nm.get_ip_address() self.labels['ip'].set_text(f"IP: {ip}") return True