From f437bf96e38f6edb5e271ebc4792dc2d92c60c36 Mon Sep 17 00:00:00 2001 From: Marvin Dostal Date: Sun, 17 Jul 2022 22:11:08 +0200 Subject: [PATCH] sni: Prefer system icons over pixmap --- src/modules/sni/item.cpp | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/src/modules/sni/item.cpp b/src/modules/sni/item.cpp index b2c41edb..cd77964c 100644 --- a/src/modules/sni/item.cpp +++ b/src/modules/sni/item.cpp @@ -318,20 +318,42 @@ void Item::updateImage() { } Glib::RefPtr Item::getIconPixbuf() { - try { - if (icon_pixmap) { - return icon_pixmap; - } - if (!icon_name.empty()) { + + if (!icon_name.empty()) { + + try { std::ifstream temp(icon_name); if (temp.is_open()) { return Gdk::Pixbuf::create_from_file(icon_name); } - return getIconByName(icon_name, getScaledIconSize()); + } catch (Glib::Error& e) { + // Ignore because we want to also try different methods of getting an icon. + // + // But a warning is logged, as the file apparently exists, but there was + // a failure in creating a pixbuf out of it. + + spdlog::warn("Item '{}': {}", id, static_cast(e.what())); + } + + try { + // Will throw if it can not find an icon. + return getIconByName(icon_name, getScaledIconSize()); + } catch (Glib::Error& e) { + spdlog::info("Item '{}': {}", id, static_cast(e.what())); } - } catch (Glib::Error& e) { - spdlog::error("Item '{}': {}", id, static_cast(e.what())); } + + // Return the pixmap only if an icon for the given name could not be found. + if (icon_pixmap) { + return icon_pixmap; + } + + if (icon_name.empty()) { + spdlog::error("Item '{}': No icon name or pixmap given.", id, icon_name); + } else { + spdlog::error("Item '{}': Could not find an icon named '{}' and no pixmap given.", id, icon_name); + } + return getIconByName("image-missing", getScaledIconSize()); }