Skip to content
12 changes: 7 additions & 5 deletions blueman/gui/DeviceList.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from datetime import datetime
import logging
from typing import Any
from collections.abc import Callable
from collections.abc import Callable, Mapping

from blueman.Functions import adapter_path_to_name
from blueman.gui.GenericList import GenericList, ListDataDict
Expand Down Expand Up @@ -151,7 +151,8 @@ def on_icon_theme_changed(self, _icon_them: Gtk.IconTheme) -> None:
# ##### virtual funcs #####

# called when row needs to be initialized
def row_setup_event(self, tree_iter: Gtk.TreeIter, device: Device) -> None:
def row_setup_event(self, tree_iter: Gtk.TreeIter, device: Device,
properties: Mapping[str, Any] | None = None) -> None:
pass

# called when a property for a device changes
Expand Down Expand Up @@ -222,8 +223,9 @@ def update_progress(self, time: float, totaltime: float) -> bool:

def add_device(self, object_path: ObjectPath) -> None:
device = Device(obj_path=object_path)
properties = device.get_properties()
# device belongs to another adapter
if not self.Adapter or not device['Adapter'] == self.Adapter.get_object_path():
if not self.Adapter or properties["Adapter"] != self.Adapter.get_object_path():
return

logging.info("adding new device")
Expand All @@ -232,11 +234,11 @@ def add_device(self, object_path: ObjectPath) -> None:
"device": device,
"dbus_path": object_path,
"timestamp": float(datetime.strftime(datetime.now(), '%Y%m%d%H%M%S%f')),
"no_name": "Name" not in device
"no_name": "Name" not in properties
}

tree_iter = self.append(**colls)
self.row_setup_event(tree_iter, device)
self.row_setup_event(tree_iter, device, properties)

if self.get_selected_device() is None:
self.selection.select_path(Gtk.TreePath.new_first())
Expand Down
14 changes: 9 additions & 5 deletions blueman/gui/DeviceSelectorList.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from collections.abc import Mapping
from html import escape
from typing import Any

Expand Down Expand Up @@ -36,11 +37,14 @@ def on_icon_theme_changed(self, _icon_them: Gtk.IconTheme) -> None:
device = self.get(row.iter, "device")["device"]
self.row_setup_event(row.iter, device)

def row_setup_event(self, tree_iter: Gtk.TreeIter, device: Device) -> None:
self.row_update_event(tree_iter, "Trusted", device['Trusted'])
self.row_update_event(tree_iter, "Paired", device['Paired'])
self.row_update_event(tree_iter, "Alias", device.display_name)
self.row_update_event(tree_iter, "Icon", device['Icon'])
def row_setup_event(self, tree_iter: Gtk.TreeIter, device: Device,
properties: Mapping[str, Any] | None = None) -> None:
if properties is None:
properties = device.get_properties()
self.row_update_event(tree_iter, "Trusted", properties["Trusted"])
self.row_update_event(tree_iter, "Paired", properties["Paired"])
self.row_update_event(tree_iter, "Alias", properties["Alias"].strip())
self.row_update_event(tree_iter, "Icon", properties["Icon"])

def row_update_event(self, tree_iter: Gtk.TreeIter, key: str, value: Any) -> None:
if key == "Trusted":
Expand Down
6 changes: 4 additions & 2 deletions blueman/gui/GenericList.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,10 @@ def prepend(self, **list_columns: object) -> Gtk.TreeIter:
return self.liststore.prepend(vals)

def set(self, tree_iter: Gtk.TreeIter, **list_columns: object) -> None:
for col_id, col_value in list_columns.items():
self.liststore.set(tree_iter, self.list_col_order[col_id], col_value)
# a single set call emits one row-changed instead of one per column,
# so the filter and sort machinery only run once per update
self.liststore.set(tree_iter, {self.list_col_order[col_id]: col_value
for col_id, col_value in list_columns.items()})

def get(self, tree_iter: Gtk.TreeIter, *items: str) -> dict[str, Any]:
data = {}
Expand Down
Loading