mirror of
https://github.com/electron/electron.git
synced 2026-01-07 22:54:25 -05:00
* fix: use browser name as tray id * fix: remove unnecessary .c_str() * fix: use string_view instead of string& * fix: move app_name_ to the bottom of private: section https://google.github.io/styleguide/cppguide.html#Declaration_Order * fix: use base's string utils to join strings * docs: note when to remove the patch * fix: update patch * fix: make linter happy * fix: move app_name_ to the bottom of private: section
77 lines
3.8 KiB
Diff
77 lines
3.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Damglador <vse.stopchanskyi@gmail.com>
|
|
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 e268573d360b1744c739bc516e81261c3869cd23..cf69e72a1a391451a31e28356cb6b86fc6010646 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::tuple</*width=*/int32_t,
|
|
@@ -222,12 +222,13 @@ base::FilePath WriteIconFile(size_t icon_file_id,
|
|
|
|
} // namespace
|
|
|
|
-StatusIconLinuxDbus::StatusIconLinuxDbus()
|
|
+StatusIconLinuxDbus::StatusIconLinuxDbus(const std::string_view app_name)
|
|
: bus_(dbus_thread_linux::GetSharedSessionBus()),
|
|
should_write_icon_to_file_(ShouldWriteIconToFile()),
|
|
icon_task_runner_(base::ThreadPool::CreateSequencedTaskRunner(
|
|
{base::MayBlock(), base::TaskPriority::USER_VISIBLE,
|
|
- base::TaskShutdownBehavior::BLOCK_SHUTDOWN})) {
|
|
+ base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
|
|
+ app_name_(app_name) {
|
|
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
CheckStatusNotifierWatcherHasOwner();
|
|
}
|
|
@@ -402,7 +403,7 @@ void StatusIconLinuxDbus::OnHostRegisteredResponse(dbus::Response* response) {
|
|
properties_->SetProperty<"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 78c0ddf50ae6cafed1badaeb951b1dab3110f095..984673954bb7f0b4c902677c70ab88c602201060 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
|
|
@@ -35,7 +35,7 @@ class StatusIconLinuxDbus : public ui::StatusIconLinux,
|
|
public ui::SimpleMenuModel::Delegate,
|
|
public base::RefCounted<StatusIconLinuxDbus> {
|
|
public:
|
|
- StatusIconLinuxDbus();
|
|
+ StatusIconLinuxDbus(const std::string_view app_name = "chrome");
|
|
|
|
StatusIconLinuxDbus(const StatusIconLinuxDbus&) = delete;
|
|
StatusIconLinuxDbus& operator=(const StatusIconLinuxDbus&) = delete;
|
|
@@ -136,6 +136,8 @@ class StatusIconLinuxDbus : public ui::StatusIconLinux,
|
|
size_t icon_file_id_ = 0;
|
|
base::FilePath icon_file_;
|
|
|
|
+ std::string app_name_;
|
|
+
|
|
base::WeakPtrFactory<StatusIconLinuxDbus> weak_factory_{this};
|
|
};
|
|
|