From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Damglador Date: Mon, 27 Oct 2025 23:35:43 +0100 Subject: fix: allow setting tray id This is needed to allow setting custom tray id when initializing a tray icon. With current behaviour all programs get chrome_status_icon_1 as their id in tray. So tray can't tell apart Electron apps, which introduces issues like https://bugs.kde.org/show_bug.cgi?id=470840. This patch can be removed after being upstreamed. See discussion at https://github.com/electron/electron/pull/48675#issuecomment-3452781711 for more info. diff --git a/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.cc b/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.cc index 27b65721dc9f127b15f92821d3f3ea4ce0a2f19c..ff69b5cab40156a30872ee1793f4e72a38d91b03 100644 --- a/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.cc +++ b/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.cc @@ -131,8 +131,8 @@ int NextServiceId() { return ++status_icon_count; } -std::string PropertyIdFromId(int service_id) { - return "chrome_status_icon_" + base::NumberToString(service_id); +std::string PropertyIdFromId(int service_id, const std::string_view app_name) { + return base::StrCat({ app_name, "_status_icon_", base::NumberToString(service_id) }); } using DbusImage = std::tupleSetProperty<"s">(kInterfaceStatusNotifierItem, kPropertyCategory, kPropertyValueCategory, false); properties_->SetProperty<"s">(kInterfaceStatusNotifierItem, kPropertyId, - PropertyIdFromId(service_id_), false); + PropertyIdFromId(service_id_, app_name_), false); properties_->SetProperty<"s">(kInterfaceStatusNotifierItem, kPropertyOverlayIconName, "", false); properties_->SetProperty<"s">(kInterfaceStatusNotifierItem, kPropertyStatus, diff --git a/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.h b/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.h index 7b6b005f98e5de8b858a39e733dbf95888df3bc3..bf85004d8f42b30f12662078b24b684ea5c0c924 100644 --- a/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.h +++ b/chrome/browser/ui/views/status_icons/status_icon_linux_dbus.h @@ -36,7 +36,7 @@ class StatusIconLinuxDbus : public ui::StatusIconLinux, public ui::SimpleMenuModel::Delegate, public base::RefCounted { public: - StatusIconLinuxDbus(); + StatusIconLinuxDbus(const std::string_view app_name = "chrome"); StatusIconLinuxDbus(const StatusIconLinuxDbus&) = delete; StatusIconLinuxDbus& operator=(const StatusIconLinuxDbus&) = delete; @@ -137,6 +137,8 @@ class StatusIconLinuxDbus : public ui::StatusIconLinux, size_t icon_file_id_ = 0; base::FilePath icon_file_; + std::string app_name_; + base::WeakPtrFactory weak_factory_{this}; };