Browse Source

Merge pull request #10944 from electron/fix-notification-ref-crash

Close the previous notification on multiple calls to show
Samuel Attard 7 years ago
parent
commit
dc8b583363

+ 9 - 0
atom/browser/api/atom_api_notification.cc

@@ -175,8 +175,16 @@ void Notification::NotificationClosed() {
   Emit("close");
 }
 
+void Notification::Close() {
+  if (notification_) {
+    notification_->Dismiss();
+    notification_.reset();
+  }
+}
+
 // Showing notifications
 void Notification::Show() {
+  Close();
   if (presenter_) {
     notification_ = presenter_->CreateNotification(this);
     if (notification_) {
@@ -207,6 +215,7 @@ void Notification::BuildPrototype(v8::Isolate* isolate,
   mate::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate())
       .MakeDestroyable()
       .SetMethod("show", &Notification::Show)
+      .SetMethod("close", &Notification::Close)
       .SetProperty("title", &Notification::GetTitle, &Notification::SetTitle)
       .SetProperty("subtitle", &Notification::GetSubtitle,
                    &Notification::SetSubtitle)

+ 1 - 0
atom/browser/api/atom_api_notification.h

@@ -45,6 +45,7 @@ class Notification : public mate::TrackableObject<Notification>,
   ~Notification() override;
 
   void Show();
+  void Close();
 
   // Prop Getters
   base::string16 GetTitle() const;

+ 7 - 0
docs/api/notification.md

@@ -104,6 +104,13 @@ HTML5 Notification implementation, simply instantiating a `new Notification` doe
 not immediately show it to the user, you need to call this method before the OS
 will display it.
 
+If the notification has been shown before, this method will dismiss the previously
+shown notification and create a new one with identical properties.
+
+#### `notification.close()`
+
+Dismisses the notification.
+
 ### Playing Sounds
 
 On macOS, you can specify the name of the sound you'd like to play when the