diff --git a/qtile_extras/widget/iwd.py b/qtile_extras/widget/iwd.py index 8d424209..bf1854ba 100644 --- a/qtile_extras/widget/iwd.py +++ b/qtile_extras/widget/iwd.py @@ -490,17 +490,20 @@ def refresh(self, *args): def do_menu(self): menu_items = [] - if self.device.scanning: - item = PopupMenuItem("Scanning...", enabled=False) - else: - item = PopupMenuItem( - "Scan for networks", - mouse_callbacks={"Button1": self.scan}, + if self.device.connected_network: + menu_items.extend( + [ + PopupMenuItem("Connected to:"), + PopupMenuItem(self.networks[self.device.connected_network].name), + PopupMenuSeparator(), + ] ) - menu_items.extend([item, PopupMenuSeparator()]) + networks = [] - for network in self.networks.values(): + for path, network in self.networks.items(): + if path == self.device.connected_network: + continue def connect(n): task = create_task(n.connect()) @@ -513,7 +516,22 @@ def connect(n): mouse_callbacks={"Button1": lambda n=network: connect(n)} if enabled else {}, enabled=enabled, ) - menu_items.append(item) + networks.append(item) + + if networks: + networks.insert(0, PopupMenuItem("Visible networks:")) + networks.append(PopupMenuSeparator()) + menu_items.extend(networks) + + if self.device.scanning: + device_item = PopupMenuItem("Scanning...", enabled=False) + else: + device_item = PopupMenuItem( + "Scan for networks", + mouse_callbacks={"Button1": self.scan}, + ) + + menu_items.append(device_item) self.display_menu(menu_items) diff --git a/test/widget/test_iwd.py b/test/widget/test_iwd.py index b5aaa570..897597a4 100644 --- a/test/widget/test_iwd.py +++ b/test/widget/test_iwd.py @@ -339,7 +339,7 @@ def test_menu(iwd_manager): expected = {"8021x_network (8021x)", "open_network (open)", "qtile_extras (psk)"} assert networks == expected - widget.eval("self.menu.controls[0].button_press(0, 0, 1)") + widget.eval("self.menu.controls[-1].button_press(0, 0, 1)") widget.eval("self.menu.kill()") wait_for_menu(iwd_manager, hidden=True) iwd_manager.c.bar["top"].fake_button_press(0, "top", 0, 0, 1)