fix(sni): ignore name/pixmap updates for custom icons

This commit is contained in:
Runxi Yu
2026-06-19 05:51:00 +00:00
parent 05945748dc
commit e37fcee35d
2 changed files with 13 additions and 2 deletions
+1
View File
@@ -46,6 +46,7 @@ class Item : public sigc::trackable {
std::string title; std::string title;
std::string icon_name; std::string icon_name;
Glib::RefPtr<Gdk::Pixbuf> icon_pixmap; Glib::RefPtr<Gdk::Pixbuf> icon_pixmap;
bool has_custom_icon_ = false;
Glib::RefPtr<Gtk::IconTheme> icon_theme; Glib::RefPtr<Gtk::IconTheme> icon_theme;
std::string overlay_icon_name; std::string overlay_icon_name;
Glib::RefPtr<Gdk::Pixbuf> overlay_icon_pixmap; Glib::RefPtr<Gdk::Pixbuf> overlay_icon_pixmap;
+12 -2
View File
@@ -190,9 +190,17 @@ void Item::setProperty(const Glib::ustring& name, Glib::VariantBase& value) {
} else if (name == "Status") { } else if (name == "Status") {
setStatus(get_variant<Glib::ustring>(value)); setStatus(get_variant<Glib::ustring>(value));
} else if (name == "IconName") { } else if (name == "IconName") {
icon_name = get_variant<std::string>(value); if (has_custom_icon_) {
spdlog::trace("Item '{}': ignoring IconName update, custom icon is set", id);
} else {
icon_name = get_variant<std::string>(value);
}
} else if (name == "IconPixmap") { } else if (name == "IconPixmap") {
icon_pixmap = this->extractPixBuf(value.gobj()); if (has_custom_icon_) {
spdlog::trace("Item '{}': ignoring IconPixmap update, custom icon is set", id);
} else {
icon_pixmap = this->extractPixBuf(value.gobj());
}
} else if (name == "OverlayIconName") { } else if (name == "OverlayIconName") {
overlay_icon_name = get_variant<std::string>(value); overlay_icon_name = get_variant<std::string>(value);
} else if (name == "OverlayIconPixmap") { } else if (name == "OverlayIconPixmap") {
@@ -270,11 +278,13 @@ void Item::setCustomIcon(const std::string& id) {
Glib::RefPtr<Gdk::Pixbuf> custom_pixbuf = Gdk::Pixbuf::create_from_file(custom_icon); Glib::RefPtr<Gdk::Pixbuf> custom_pixbuf = Gdk::Pixbuf::create_from_file(custom_icon);
icon_name = ""; // icon_name has priority over pixmap icon_name = ""; // icon_name has priority over pixmap
icon_pixmap = custom_pixbuf; icon_pixmap = custom_pixbuf;
has_custom_icon_ = true;
} catch (const Glib::Error& e) { } catch (const Glib::Error& e) {
spdlog::error("Failed to load custom icon {}: {}", custom_icon, e.what()); spdlog::error("Failed to load custom icon {}: {}", custom_icon, e.what());
} }
} else { // if file doesn't exist it's most likely an icon_name } else { // if file doesn't exist it's most likely an icon_name
icon_name = custom_icon; icon_name = custom_icon;
has_custom_icon_ = true;
} }
} }
} }