diff --git a/docs/api/notification.md b/docs/api/notification.md index 61a0c3aabf23e..6489c12670e06 100644 --- a/docs/api/notification.md +++ b/docs/api/notification.md @@ -37,6 +37,7 @@ Returns `Boolean` - Whether or not desktop notifications are supported on the cu * `hasReply` Boolean (optional) _macOS_ - Whether or not to add an inline reply option to the notification. * `replyPlaceholder` String (optional) _macOS_ - The placeholder to write in the inline reply input field. * `sound` String (optional) _macOS_ - The name of the sound file to play when the notification is shown. + * `urgency` _Linux_ - The urgency level of the notification. * `actions` [NotificationAction[]](structures/notification-action.md) (optional) _macOS_ - Actions to add to the notification. Please read the available actions and limitations in the `NotificationAction` documentation. * `closeButtonText` String (optional) _macOS_ - A custom title for the close button of an alert. An empty string will cause the default localized text to be used. @@ -144,6 +145,12 @@ A `Boolean` property representing whether the notification is silent. A `Boolean` property representing whether the notification has a reply action. +#### `notification.urgency` _Linux_ + +A `String` property representing the urgency level of the notification. Can be 'normal', 'critical', or 'low'. + +Default is 'low' - see [NotifyUrgency](https://developer.gnome.org/libnotify/unstable/NotifyNotification.html#notify-notification-set-urgency) for more information. + #### `notification.actions` A [`NotificationAction[]`](structures/notification-action.md) property representing the actions of the notification. diff --git a/shell/browser/api/atom_api_notification.cc b/shell/browser/api/atom_api_notification.cc index b9eefc9beff4a..e1e48f1046d52 100644 --- a/shell/browser/api/atom_api_notification.cc +++ b/shell/browser/api/atom_api_notification.cc @@ -68,6 +68,7 @@ Notification::Notification(v8::Isolate* isolate, } opts.Get("silent", &silent_); opts.Get("replyPlaceholder", &reply_placeholder_); + opts.Get("urgency", &urgency_); opts.Get("hasReply", &has_reply_); opts.Get("actions", &actions_); opts.Get("sound", &sound_); @@ -118,6 +119,10 @@ base::string16 Notification::GetSound() const { return sound_; } +base::string16 Notification::GetUrgency() const { + return urgency_; +} + std::vector Notification::GetActions() const { return actions_; } @@ -155,6 +160,10 @@ void Notification::SetSound(const base::string16& new_sound) { sound_ = new_sound; } +void Notification::SetUrgency(const base::string16& new_urgency) { + urgency_ = new_urgency; +} + void Notification::SetActions( const std::vector& actions) { actions_ = actions; @@ -211,6 +220,7 @@ void Notification::Show() { options.actions = actions_; options.sound = sound_; options.close_button_text = close_button_text_; + options.urgency = urgency_; notification_->Show(options); } } @@ -238,6 +248,8 @@ void Notification::BuildPrototype(v8::Isolate* isolate, &Notification::SetHasReply) .SetProperty("replyPlaceholder", &Notification::GetReplyPlaceholder, &Notification::SetReplyPlaceholder) + .SetProperty("urgency", &Notification::GetUrgency, + &Notification::SetUrgency) .SetProperty("sound", &Notification::GetSound, &Notification::SetSound) .SetProperty("actions", &Notification::GetActions, &Notification::SetActions) diff --git a/shell/browser/api/atom_api_notification.h b/shell/browser/api/atom_api_notification.h index eea76adc6bc3b..be83ee3ea0716 100644 --- a/shell/browser/api/atom_api_notification.h +++ b/shell/browser/api/atom_api_notification.h @@ -80,6 +80,7 @@ class Notification : public mate::TrackableObject, bool has_reply_ = false; base::string16 reply_placeholder_; base::string16 sound_; + base::string16 urgency_; std::vector actions_; base::string16 close_button_text_; diff --git a/shell/browser/notifications/linux/libnotify_notification.cc b/shell/browser/notifications/linux/libnotify_notification.cc index 3949188162ad0..d286d559fcebb 100644 --- a/shell/browser/notifications/linux/libnotify_notification.cc +++ b/shell/browser/notifications/linux/libnotify_notification.cc @@ -100,6 +100,16 @@ void LibnotifyNotification::Show(const NotificationOptions& options) { nullptr); } + NotifyUrgency urgency = NOTIFY_URGENCY_NORMAL; + if (options.urgency == base::ASCIIToUTF16("critical")) { + urgency = NOTIFY_URGENCY_CRITICAL; + } else if (options.urgency == base::ASCIIToUTF16("low")) { + urgency = NOTIFY_URGENCY_LOW; + } + + // Set the urgency level of the notification. + libnotify_loader_.notify_notification_set_urgency(notification_, urgency); + if (!options.icon.drawsNothing()) { GdkPixbuf* pixbuf = libgtkui::GdkPixbufFromSkBitmap(options.icon); libnotify_loader_.notify_notification_set_image_from_pixbuf(notification_, diff --git a/shell/browser/notifications/notification.h b/shell/browser/notifications/notification.h index 6de8d5e9c84af..74dd8f964ad28 100644 --- a/shell/browser/notifications/notification.h +++ b/shell/browser/notifications/notification.h @@ -34,6 +34,7 @@ struct NotificationOptions { bool has_reply; base::string16 reply_placeholder; base::string16 sound; + base::string16 urgency; // Linux std::vector actions; base::string16 close_button_text;