From 8fb0f430301578ba94b175f0b097fb2752f5ddf9 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Wed, 1 Mar 2023 09:46:56 +0100 Subject: [PATCH] fix: `Notification` with reply obscuring first action on macOS (#37381) fix: Notification with reply obscuring first action --- .../notifications/mac/cocoa_notification.mm | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/shell/browser/notifications/mac/cocoa_notification.mm b/shell/browser/notifications/mac/cocoa_notification.mm index 92ec55a6ab5c..06f896d8131f 100644 --- a/shell/browser/notifications/mac/cocoa_notification.mm +++ b/shell/browser/notifications/mac/cocoa_notification.mm @@ -58,7 +58,11 @@ void CocoaNotification::Show(const NotificationOptions& options) { [notification_ setSoundName:base::SysUTF16ToNSString(options.sound)]; } - [notification_ setHasActionButton:false]; + if (options.has_reply) { + [notification_ setHasReplyButton:true]; + [notification_ setResponsePlaceholder:base::SysUTF16ToNSString( + options.reply_placeholder)]; + } int i = 0; action_index_ = UINT_MAX; @@ -66,7 +70,10 @@ void CocoaNotification::Show(const NotificationOptions& options) { [[[NSMutableArray alloc] init] autorelease]; for (const auto& action : options.actions) { if (action.type == u"button") { - if (action_index_ == UINT_MAX) { + // If the notification has both a reply and actions, + // the reply takes precedence and the actions all + // become additional actions. + if (!options.has_reply && action_index_ == UINT_MAX) { // First button observed is the displayed action [notification_ setHasActionButton:true]; [notification_ @@ -86,16 +93,11 @@ void CocoaNotification::Show(const NotificationOptions& options) { } i++; } + if ([additionalActions count] > 0) { [notification_ setAdditionalActions:additionalActions]; } - if (options.has_reply) { - [notification_ setResponsePlaceholder:base::SysUTF16ToNSString( - options.reply_placeholder)]; - [notification_ setHasReplyButton:true]; - } - if (!options.close_button_text.empty()) { [notification_ setOtherButtonTitle:base::SysUTF16ToNSString( options.close_button_text)];