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
-