diff --git a/blueman/gui/manager/ManagerToolbar.py b/blueman/gui/manager/ManagerToolbar.py index 9ecb4b6a7..8eaa37425 100644 --- a/blueman/gui/manager/ManagerToolbar.py +++ b/blueman/gui/manager/ManagerToolbar.py @@ -24,8 +24,8 @@ def __init__(self, blueman: "Blueman") -> None: self.blueman.List.connect("adapter-changed", self.on_adapter_changed) self.blueman.List.connect("adapter-property-changed", self.on_adapter_property_changed) - self.b_search = blueman.builder.get_widget("b_search", Gtk.ToolButton) - self.b_search.connect("clicked", lambda button: blueman.inquiry()) + self.b_search = blueman.builder.get_widget("b_search", Gtk.ToggleToolButton) + self.b_search.connect("toggled", self.on_search_toggled) self.b_bond = blueman.builder.get_widget("b_bond", Gtk.ToolButton) self.b_bond.connect("clicked", self.on_action, self.blueman.bond) @@ -56,14 +56,40 @@ def on_action(self, _button: Gtk.ToolButton, func: Callable[[Device], None]) -> if device is not None: func(device) + def on_search_toggled(self, button: Gtk.ToggleToolButton) -> None: + if not self.blueman.List.discovering and button.get_active(): + self.blueman.inquiry() + label =_("Searching…") + icon_name = "process-stop-symbolic" + tooltip = _("Click to stop searching") + elif self.blueman.List.discovering: + label = _("Search") + icon_name = "edit-find-symbolic" + tooltip = _("Search for nearby devices") + self.blueman.List.stop_discovery() + + button.set_icon_name(icon_name) + button.set_label(label) + button.set_tooltip_text(tooltip) + def on_adapter_property_changed(self, _lst: ManagerDeviceList, _adapter: Adapter, key_value: Tuple[str, object]) -> None: key, value = key_value if key == "Discovering": - if value: - self.b_search.props.sensitive = False - else: - self.b_search.props.sensitive = True + if value and not self.blueman.List.discovering: + # It's not blueman discovering + self.b_search.set_sensitive(False) + elif not value: + self.b_search.set_sensitive(True) + + # Update the toggle button + self.b_search.handler_block_by_func(self.on_search_toggled) + if value and not self.b_search.get_active(): + self.b_search.set_active(True) + elif not value and self.b_search.get_active(): + self.b_search.set_active(False) + + self.b_search.handler_unblock_by_func(self.on_search_toggled) def on_adapter_changed(self, _lst: ManagerDeviceList, adapter_path: Optional[str]) -> None: logging.debug(f"toolbar adapter {adapter_path}") diff --git a/data/ui/manager-main.ui b/data/ui/manager-main.ui index 58aeeced7..fb6aa531c 100644 --- a/data/ui/manager-main.ui +++ b/data/ui/manager-main.ui @@ -289,7 +289,7 @@ True False - + True False False