[vlc-commits] osx_notifications: Check if user notifications classes exist to prevent crash on 10.7

Marvin Scholz git at videolan.org
Fri Oct 23 13:15:24 CEST 2015


vlc | branch: master | Marvin Scholz <epirat07 at gmail.com> | Fri Oct 23 13:11:29 2015 +0200| [bf294ee5cc3830b05a4505fb1624191b70244e81] | committer: Jean-Baptiste Kempf

osx_notifications: Check if user notifications classes exist to prevent crash on 10.7

Add checks for NSUserNotification and NSUserNotificationCenter so we do not
use them on OS X 10.7 and below, to prevent VLC from crashing if it
is compiled on 10.8 or higher but ran on 10.7 or below.

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=bf294ee5cc3830b05a4505fb1624191b70244e81
---

 modules/notify/osx_notifications.m |   17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/modules/notify/osx_notifications.m b/modules/notify/osx_notifications.m
index 914787d..8fb03d8 100644
--- a/modules/notify/osx_notifications.m
+++ b/modules/notify/osx_notifications.m
@@ -87,6 +87,7 @@
     NSMutableDictionary *registrationDictionary;
     id lastNotification;
     bool isInForeground;
+    bool hasNativeNotifications;
     intf_thread_t *interfaceThread;
 }
 
@@ -299,6 +300,12 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var,
     // Start in background
     isInForeground = NO;
 
+    // Check for native notification support
+    Class userNotificationClass = NSClassFromString(@"NSUserNotification");
+    Class userNotificationCenterClass = NSClassFromString(@"NSUserNotificationCenter");
+    hasNativeNotifications = (userNotificationClass && userNotificationCenterClass) ? YES : NO;
+
+    lastNotification = nil;
     applicationName = nil;
     notificationType = nil;
     registrationDictionary = nil;
@@ -312,7 +319,7 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var,
 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
     // Clear the remaining lastNotification in Notification Center, if any
     @autoreleasepool {
-        if (lastNotification) {
+        if (lastNotification && hasNativeNotifications) {
             [NSUserNotificationCenter.defaultUserNotificationCenter
              removeDeliveredNotification:(NSUserNotification *)lastNotification];
             [lastNotification release];
@@ -344,8 +351,10 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var,
         [GrowlApplicationBridge setGrowlDelegate:self];
 
 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
-        [[NSUserNotificationCenter defaultUserNotificationCenter]
-         setDelegate:(id<NSUserNotificationCenterDelegate>)self];
+        if (hasNativeNotifications) {
+            [[NSUserNotificationCenter defaultUserNotificationCenter]
+             setDelegate:(id<NSUserNotificationCenterDelegate>)self];
+        }
 #endif
     }
 }
@@ -409,7 +418,7 @@ static int ItemChange( vlc_object_t *p_this, const char *psz_var,
                                            isSticky:NO
                                        clickContext:nil
                                          identifier:@"VLCNowPlayingNotification"];
-        } else {
+        } else if (hasNativeNotifications) {
 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
             // Make the OS X notification and string
             NSUserNotification *notification = [NSUserNotification new];



More information about the vlc-commits mailing list