feat: On macOS, Closing Notifications Triggers the 'close' Event (#13306)
* feat(macOS): implement NotificationDismissed() for Cocoa * feat(macOS): emit NotificationDismissed() when closing "Alert" notifications * feat(macOS): emit NotificationDismissed() when closing "Banner" notifications * fix(macos): Remove calls to private APIs from MAS builds (github.com/electron/electron/pull/13306)
This commit is contained in:
parent
c0959bd534
commit
23541b5b2a
3 changed files with 32 additions and 0 deletions
|
@ -31,6 +31,7 @@ class CocoaNotification : public Notification {
|
||||||
void NotificationActivated();
|
void NotificationActivated();
|
||||||
void NotificationActivated(NSUserNotificationAction* action)
|
void NotificationActivated(NSUserNotificationAction* action)
|
||||||
API_AVAILABLE(macosx(10.10));
|
API_AVAILABLE(macosx(10.10));
|
||||||
|
void NotificationDismissed();
|
||||||
|
|
||||||
NSUserNotification* notification() const { return notification_; }
|
NSUserNotification* notification() const { return notification_; }
|
||||||
|
|
||||||
|
|
|
@ -156,6 +156,13 @@ void CocoaNotification::NotificationActivated(
|
||||||
this->LogAction("button clicked");
|
this->LogAction("button clicked");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CocoaNotification::NotificationDismissed() {
|
||||||
|
if (delegate())
|
||||||
|
delegate()->NotificationClosed();
|
||||||
|
|
||||||
|
this->LogAction("dismissed");
|
||||||
|
}
|
||||||
|
|
||||||
void CocoaNotification::LogAction(const char* action) {
|
void CocoaNotification::LogAction(const char* action) {
|
||||||
if (getenv("ELECTRON_DEBUG_NOTIFICATIONS")) {
|
if (getenv("ELECTRON_DEBUG_NOTIFICATIONS")) {
|
||||||
NSString* identifier = [notification_ valueForKey:@"identifier"];
|
NSString* identifier = [notification_ valueForKey:@"identifier"];
|
||||||
|
|
|
@ -65,4 +65,28 @@
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(MAS_BUILD)
|
||||||
|
// This undocumented method notifies us if a user closes "Alert" notifications
|
||||||
|
// https://chromium.googlesource.com/chromium/src/+/lkgr/chrome/browser/notifications/notification_platform_bridge_mac.mm
|
||||||
|
- (void)userNotificationCenter:(NSUserNotificationCenter*)center
|
||||||
|
didDismissAlert:(NSUserNotification*)notif {
|
||||||
|
auto* notification = presenter_->GetNotification(notif);
|
||||||
|
if (notification)
|
||||||
|
notification->NotificationDismissed();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(MAS_BUILD)
|
||||||
|
// This undocumented method notifies us if a user closes "Banner" notifications
|
||||||
|
// https://github.com/mozilla/gecko-dev/blob/master/widget/cocoa/OSXNotificationCenter.mm
|
||||||
|
- (void)userNotificationCenter:(NSUserNotificationCenter*)center
|
||||||
|
didRemoveDeliveredNotifications:(NSArray*)notifications {
|
||||||
|
for (NSUserNotification* notif in notifications) {
|
||||||
|
auto* notification = presenter_->GetNotification(notif);
|
||||||
|
if (notification)
|
||||||
|
notification->NotificationDismissed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
Loading…
Reference in a new issue