From fccba24f0b09c9bb96f48475b9cb3b6068f703b8 Mon Sep 17 00:00:00 2001 From: pagedown Date: Fri, 19 Nov 2021 14:08:00 +0800 Subject: [PATCH 1/2] Allow macOS notification to play sound --- kitty/cocoa_window.m | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/kitty/cocoa_window.m b/kitty/cocoa_window.m index 2a335324c..c59552aaf 100644 --- a/kitty/cocoa_window.m +++ b/kitty/cocoa_window.m @@ -222,6 +222,18 @@ cocoa_send_notification(PyObject *self UNUSED, PyObject *args) { @end @implementation NotificationDelegate + - (void)userNotificationCenter:(UNUserNotificationCenter *)center + willPresentNotification:(UNNotification *)notification + withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { + UNNotificationPresentationOptions options = UNNotificationPresentationOptionSound; +#if MAC_OS_X_VERSION_MAX_ALLOWED < 110000 + options |= UNNotificationPresentationOptionAlert; +#else + options |= UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner; +#endif + completionHandler(options); + } + - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { @@ -247,6 +259,7 @@ schedule_notification(const char *identifier, const char *title, const char *bod if (title) content.title = @(title); if (body) content.body = @(body); if (subtitle) content.subtitle = @(subtitle); + content.sound = [UNNotificationSound defaultSound]; // Deliver the notification static unsigned long counter = 1; UNNotificationRequest* request = [ @@ -306,7 +319,9 @@ cocoa_send_notification(PyObject *self UNUSED, PyObject *args) { if (!center.delegate) center.delegate = [[NotificationDelegate alloc] init]; queue_notification(identifier, title, body, subtitle); - [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert) + // The badge permission needs to be requested as well, even though it is not used, + // otherwise macOS refuses to show the preference checkbox for enable/disable notification sound. + [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) { if (error != nil) { log_error("Failed to request permission for showing notification: %s", [[error localizedDescription] UTF8String]); From 8e87b639fa04214a0cc39cb9f28c01995965f135 Mon Sep 17 00:00:00 2001 From: pagedown Date: Fri, 19 Nov 2021 14:08:00 +0800 Subject: [PATCH 2/2] Use macOS 11.0 version number --- glfw/cocoa_window.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glfw/cocoa_window.m b/glfw/cocoa_window.m index e673d8c95..97ee504b6 100644 --- a/glfw/cocoa_window.m +++ b/glfw/cocoa_window.m @@ -2439,7 +2439,7 @@ void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor UNUSED) bool _glfwPlatformIsFullscreen(_GLFWwindow* w, unsigned int flags) { NSWindow *window = w->ns.object; bool traditional = !(flags & 1); - if (traditional) { if(@available(macOS 10.16, *)) return w->ns.in_traditional_fullscreen; } + if (traditional) { if(@available(macOS 11.0, *)) return w->ns.in_traditional_fullscreen; } NSWindowStyleMask sm = [window styleMask]; return sm & NSWindowStyleMaskFullScreen; } @@ -2450,7 +2450,7 @@ bool _glfwPlatformToggleFullscreen(_GLFWwindow* w, unsigned int flags) { bool traditional = !(flags & 1); NSWindowStyleMask sm = [window styleMask]; if (traditional) { - if (@available(macOS 10.16, *)) { + if (@available(macOS 11.0, *)) { // As of Big Turd NSWindowStyleMaskFullScreen is no longer useable if (!w->ns.in_traditional_fullscreen) { w->ns.pre_full_screen_style_mask = sm;