|
@@ -4,7 +4,10 @@
|
|
|
|
|
|
#include "atom/browser/ui/win/notify_icon.h"
|
|
|
|
|
|
+#include <shobjidl.h>
|
|
|
+
|
|
|
#include "atom/browser/ui/win/notify_icon_host.h"
|
|
|
+#include "base/md5.h"
|
|
|
#include "base/strings/string_number_conversions.h"
|
|
|
#include "base/strings/utf_string_conversions.h"
|
|
|
#include "base/win/windows_version.h"
|
|
@@ -26,6 +29,18 @@ NotifyIcon::NotifyIcon(NotifyIconHost* host,
|
|
|
window_(window),
|
|
|
message_id_(message),
|
|
|
menu_model_(NULL) {
|
|
|
+
|
|
|
+ // NB: If we have an App Model ID, we should propagate that to the tray.
|
|
|
+ // Doing this prevents duplicate items from showing up in the notification
|
|
|
+ // preferences (i.e. "Always Show / Show notifications only / etc")
|
|
|
+ PWSTR explicit_app_id;
|
|
|
+
|
|
|
+ if (SUCCEEDED(GetCurrentProcessExplicitAppUserModelID(&explicit_app_id))) {
|
|
|
+ // GUIDs and MD5 hashes are the same length. So convenient!
|
|
|
+ MD5Sum(explicit_app_id, sizeof(wchar_t) * wcslen(explicit_app_id), (MD5Digest*)&tray_app_id_hash_);
|
|
|
+ CoTaskMemFree(explicit_app_id);
|
|
|
+ }
|
|
|
+
|
|
|
NOTIFYICONDATA icon_data;
|
|
|
InitIconData(&icon_data);
|
|
|
icon_data.uFlags = NIF_MESSAGE;
|
|
@@ -161,6 +176,7 @@ void NotifyIcon::InitIconData(NOTIFYICONDATA* icon_data) {
|
|
|
icon_data->cbSize = sizeof(NOTIFYICONDATA);
|
|
|
icon_data->hWnd = window_;
|
|
|
icon_data->uID = icon_id_;
|
|
|
+ memcpy(icon_data->guidItem, tray_app_id_hash_, sizeof(GUID));
|
|
|
}
|
|
|
|
|
|
} // namespace atom
|