Browse Source

feat: add object to subscribe notification callback (#19110)

Louis Rose 5 years ago
parent
commit
79114ff40a

+ 5 - 1
docs/api/system-preferences.md

@@ -82,13 +82,15 @@ that contains the user information dictionary sent along with the notification.
 * `callback` Function
   * `event` String
   * `userInfo` Object
+  * `object` String
 
 Returns `Number` - The ID of this subscription
 
 Subscribes to native notifications of macOS, `callback` will be called with
 `callback(event, userInfo)` when the corresponding `event` happens. The
 `userInfo` is an Object that contains the user information dictionary sent
-along with the notification.
+along with the notification. The `object` is the sender of the notification,
+and only supports `NSString` values for now.
 
 The `id` of the subscriber is returned, which can be used to unsubscribe the
 `event`.
@@ -107,6 +109,7 @@ example values of `event` are:
 * `callback` Function
   * `event` String
   * `userInfo` Object
+  * `object` String
 
 Returns `Number` - The ID of this subscription
 
@@ -119,6 +122,7 @@ This is necessary for events such as `NSUserDefaultsDidChangeNotification`.
 * `callback` Function
   * `event` String
   * `userInfo` Object
+  * `object` String
 
 Same as `subscribeNotification`, but uses `NSWorkspace.sharedWorkspace.notificationCenter`.
 This is necessary for events such as `NSWorkspaceDidActivateApplicationNotification`.

+ 2 - 1
shell/browser/api/atom_api_system_preferences.h

@@ -67,7 +67,8 @@ class SystemPreferences : public mate::EventEmitter<SystemPreferences>
 #elif defined(OS_MACOSX)
   using NotificationCallback =
       base::RepeatingCallback<void(const std::string&,
-                                   const base::DictionaryValue&)>;
+                                   const base::DictionaryValue&,
+                                   const std::string&)>;
 
   void PostNotification(const std::string& name,
                         const base::DictionaryValue& user_info,

+ 11 - 2
shell/browser/api/atom_api_system_preferences_mac.mm

@@ -210,13 +210,22 @@ int SystemPreferences::DoSubscribeNotification(
               usingBlock:^(NSNotification* notification) {
                 std::unique_ptr<base::DictionaryValue> user_info =
                     NSDictionaryToDictionaryValue(notification.userInfo);
+
+                std::string object = "";
+                if ([notification.object isKindOfClass:[NSString class]]) {
+                  object = base::SysNSStringToUTF8(notification.object);
+                }
+
                 if (user_info) {
                   copied_callback.Run(
-                      base::SysNSStringToUTF8(notification.name), *user_info);
+                      base::SysNSStringToUTF8(notification.name),
+                      *user_info,
+                      object);
                 } else {
                   copied_callback.Run(
                       base::SysNSStringToUTF8(notification.name),
-                      base::DictionaryValue());
+                      base::DictionaryValue(),
+                      object);
                 }
               }];
   return request_id;