From 7f003d5216df548a17cf6bd7f2702944a63bba30 Mon Sep 17 00:00:00 2001 From: Sander Sweers Date: Tue, 2 Apr 2024 20:46:26 +0200 Subject: [PATCH] ManagerDeviceList: Fix broken fallback in _load_surface Loading the surface directly from the Gtk.IconTheme raises an GError. We look up the icon first and check for None like we used to. --- blueman/gui/manager/ManagerDeviceList.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/blueman/gui/manager/ManagerDeviceList.py b/blueman/gui/manager/ManagerDeviceList.py index 0a5988ebe..abfbecb1d 100644 --- a/blueman/gui/manager/ManagerDeviceList.py +++ b/blueman/gui/manager/ManagerDeviceList.py @@ -270,12 +270,20 @@ def _on_key_pressed(self, _widget: Gtk.Widget, event: Gdk.EventKey) -> bool: def _load_surface(self, icon_name: str, size: int) -> cairo.ImageSurface: window = self.get_window() scale = self.get_scale_factor() - surface = self.icon_theme.load_surface(icon_name, size, scale, window, Gtk.IconLookupFlags.FORCE_SIZE) - if surface is None: - surface = self.icon_theme.load_surface("image-missing", size, scale, window, Gtk.IconLookupFlags.FORCE_SIZE) - assert surface is not None - - return cast(cairo.ImageSurface, surface) + icon_info = self.icon_theme.lookup_icon_for_scale(icon_name, size, scale, Gtk.IconLookupFlags.FORCE_SIZE) + + if icon_info is None: + logging.error(f"Failed to look up icon \"{icon_name}\" likely due to broken icon theme.") + missing_icon_info = self.icon_theme.lookup_icon_for_scale( + "image-missing", + size, + scale, + Gtk.IconLookupFlags.FORCE_SIZE + ) + assert missing_icon_info is not None + return cast(cairo.ImageSurface, missing_icon_info.load_surface(window)) + else: + return cast(cairo.ImageSurface, icon_info.load_surface(window)) def _make_device_icon(self, icon_name: str, is_paired: bool, is_connected: bool, is_trusted: bool, is_blocked: bool) -> cairo.ImageSurface: