feat: allow GUID parameter to avoid systray demotion on Windows (#21891)

* fix: systray icon demotion

Adding support for GUID parameter in Tray API.
In combination with signed binaries this allows to maintain
the position in the systray on Windows.

* unit tests

* make mac and linux compile
This commit is contained in:
bitdisaster 2020-01-30 21:37:03 -08:00 committed by GitHub
parent 2955c67c4e
commit 89eb309d0b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 143 additions and 15 deletions

View file

@ -17,6 +17,7 @@
#include "base/memory/weak_ptr.h"
#include "base/win/scoped_gdi_object.h"
#include "shell/browser/ui/tray_icon.h"
#include "shell/browser/ui/win/notify_icon_host.h"
namespace gfx {
class Point;
@ -34,7 +35,11 @@ class NotifyIconHost;
class NotifyIcon : public TrayIcon {
public:
// Constructor which provides this icon's unique ID and messaging window.
NotifyIcon(NotifyIconHost* host, UINT id, HWND window, UINT message);
NotifyIcon(NotifyIconHost* host,
UINT id,
HWND window,
UINT message,
GUID guid);
~NotifyIcon() override;
// Handles a click event from the user - if |left_button_click| is true and
@ -53,6 +58,7 @@ class NotifyIcon : public TrayIcon {
UINT icon_id() const { return icon_id_; }
HWND window() const { return window_; }
UINT message_id() const { return message_id_; }
GUID guid() const { return guid_; }
// Overridden from TrayIcon:
void SetImage(HICON image) override;
@ -89,6 +95,12 @@ class NotifyIcon : public TrayIcon {
// The context menu.
AtomMenuModel* menu_model_ = nullptr;
// An optional GUID used for identifying tray entries on Windows
GUID guid_ = GUID_DEFAULT;
// indicates whether the tray entry is associated with a guid
bool is_using_guid_ = false;
// Context menu associated with this icon (if any).
std::unique_ptr<views::MenuRunner> menu_runner_;