Files
electron/patches/common/chromium/customizable_app_indicator_id_prefix.patch

114 lines
5.3 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jeremy Apthorp <jeremya@chromium.org>
Date: Mon, 5 Nov 2018 20:13:27 +0000
Subject: backport from M72: Make gtk app indicator id prefix customizable
This makes the app indicator API in libgtkui usable by non-Chrome apps (in
particular, Electron).
Change-Id: I39e547fc04595900d99806208955c632e4199be4
Reviewed-on: https://chromium-review.googlesource.com/c/1315840
Commit-Queue: Jeremy Apthorp <jeremya@chromium.org>
Reviewed-by: Thomas Anderson <thomasanderson@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605435}
diff --git a/chrome/browser/ui/libgtkui/gtk_ui.cc b/chrome/browser/ui/libgtkui/gtk_ui.cc
index 3a829df4099f5223d0862c33a6ffc61b107b20b7..3b86e178d4c83f07231649360c8b65ca83143408 100644
--- a/chrome/browser/ui/libgtkui/gtk_ui.cc
+++ b/chrome/browser/ui/libgtkui/gtk_ui.cc
@@ -234,11 +234,6 @@ typedef std::unique_ptr<GIcon, GObjectDeleter> ScopedGIcon;
typedef std::unique_ptr<GtkIconInfo, GtkIconInfoDeleter> ScopedGtkIconInfo;
typedef std::unique_ptr<GdkPixbuf, GObjectDeleter> ScopedGdkPixbuf;
-#if !GTK_CHECK_VERSION(3, 90, 0)
-// Prefix for app indicator ids
-const char kAppIndicatorIdPrefix[] = "chrome_app_indicator_";
-#endif
-
// Number of app indicators used (used as part of app-indicator id).
int indicators_count;
@@ -545,7 +540,8 @@ bool GtkUi::IsStatusIconSupported() const {
std::unique_ptr<views::StatusIconLinux> GtkUi::CreateLinuxStatusIcon(
const gfx::ImageSkia& image,
- const base::string16& tool_tip) const {
+ const base::string16& tool_tip,
+ const char* id_prefix) const {
#if GTK_CHECK_VERSION(3, 90, 0)
NOTIMPLEMENTED();
return nullptr;
@@ -553,8 +549,8 @@ std::unique_ptr<views::StatusIconLinux> GtkUi::CreateLinuxStatusIcon(
if (AppIndicatorIcon::CouldOpen()) {
++indicators_count;
return std::unique_ptr<views::StatusIconLinux>(new AppIndicatorIcon(
- base::StringPrintf("%s%d", kAppIndicatorIdPrefix, indicators_count),
- image, tool_tip));
+ base::StringPrintf("%s%d", id_prefix, indicators_count), image,
+ tool_tip));
} else {
return std::unique_ptr<views::StatusIconLinux>(
new GtkStatusIcon(image, tool_tip));
diff --git a/chrome/browser/ui/libgtkui/gtk_ui.h b/chrome/browser/ui/libgtkui/gtk_ui.h
index 1c626d1cafd1ec979be8dd5ef6ddbbc9d1b29bc2..2c98c1990419eb5276c01553caad559cf60714ad 100644
--- a/chrome/browser/ui/libgtkui/gtk_ui.h
+++ b/chrome/browser/ui/libgtkui/gtk_ui.h
@@ -90,7 +90,8 @@ class GtkUi : public views::LinuxUI {
bool IsStatusIconSupported() const override;
std::unique_ptr<views::StatusIconLinux> CreateLinuxStatusIcon(
const gfx::ImageSkia& image,
- const base::string16& tool_tip) const override;
+ const base::string16& tool_tip,
+ const char* id_prefix) const override;
gfx::Image GetIconForContentType(const std::string& content_type,
int size) const override;
std::unique_ptr<views::Border> CreateNativeBorder(
diff --git a/chrome/browser/ui/views/status_icons/status_icon_linux_wrapper.cc b/chrome/browser/ui/views/status_icons/status_icon_linux_wrapper.cc
index eed6bb2eaf756189be016c382673e23eb7ca18e0..4694a9a920b1f9150399e183038f04ac700b4f52 100644
--- a/chrome/browser/ui/views/status_icons/status_icon_linux_wrapper.cc
+++ b/chrome/browser/ui/views/status_icons/status_icon_linux_wrapper.cc
@@ -8,6 +8,13 @@
#include "ui/message_center/public/cpp/notifier_id.h"
#include "ui/views/linux_ui/linux_ui.h"
+namespace {
+
+// Prefix for app indicator ids
+const char kAppIndicatorIdPrefix[] = "chrome_app_indicator_";
+
+} // namespace
+
StatusIconLinuxWrapper::StatusIconLinuxWrapper(
std::unique_ptr<views::StatusIconLinux> status_icon)
: status_icon_(std::move(status_icon)), menu_model_(nullptr) {
@@ -53,7 +60,8 @@ StatusIconLinuxWrapper::CreateWrappedStatusIcon(
const base::string16& tool_tip) {
const views::LinuxUI* linux_ui = views::LinuxUI::instance();
if (linux_ui) {
- auto status_icon = linux_ui->CreateLinuxStatusIcon(image, tool_tip);
+ auto status_icon =
+ linux_ui->CreateLinuxStatusIcon(image, tool_tip, kAppIndicatorIdPrefix);
if (status_icon) {
return base::WrapUnique(
new StatusIconLinuxWrapper(std::move(status_icon)));
diff --git a/ui/views/linux_ui/linux_ui.h b/ui/views/linux_ui/linux_ui.h
index 759d4ab03f02a338f5e89bf971a423f6b42814ed..208c9a5ac7eb5441110f34b3f7859945c591df21 100644
--- a/ui/views/linux_ui/linux_ui.h
+++ b/ui/views/linux_ui/linux_ui.h
@@ -130,10 +130,12 @@ class VIEWS_EXPORT LinuxUI : public ui::LinuxInputMethodContextFactory,
// Checks for platform support for status icons.
virtual bool IsStatusIconSupported() const = 0;
- // Create a native status icon.
+ // Create a native status icon. The id_prefix is used to distinguish Chrome's
+ // status icons from other apps' status icons, and should be unique.
virtual std::unique_ptr<StatusIconLinux> CreateLinuxStatusIcon(
const gfx::ImageSkia& image,
- const base::string16& tool_tip) const = 0;
+ const base::string16& tool_tip,
+ const char* id_prefix) const = 0;
// Returns the icon for a given content type from the icon theme.
// TODO(davidben): Add an observer for the theme changing, so we can drop the