]> granicus.if.org Git - handbrake/commitdiff
MacGui: set the minimum deployment target to 10.10. Remove Growl and use macOS standa...
authorDamiano Galassi <damiog@gmail.com>
Fri, 8 Jun 2018 14:59:25 +0000 (16:59 +0200)
committerDamiano Galassi <damiog@gmail.com>
Fri, 8 Jun 2018 14:59:25 +0000 (16:59 +0200)
50 files changed:
macosx/English.lproj/PictureSettings.xib
macosx/Growl.framework/Growl [deleted symlink]
macosx/Growl.framework/Headers [deleted symlink]
macosx/Growl.framework/Resources [deleted symlink]
macosx/Growl.framework/Versions/A/Growl [deleted file]
macosx/Growl.framework/Versions/A/Headers/Growl.h [deleted file]
macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h [deleted file]
macosx/Growl.framework/Versions/A/Headers/GrowlDefines.h [deleted file]
macosx/Growl.framework/Versions/A/Resources/Info.plist [deleted file]
macosx/Growl.framework/Versions/Current [deleted symlink]
macosx/HBAVPlayer.m
macosx/HBAddCategoryController.m
macosx/HBAddPresetController.m
macosx/HBAppDelegate.m
macosx/HBApplication.m
macosx/HBAudioController.m
macosx/HBAudioDefaultsController.m
macosx/HBCodingUtilities.h
macosx/HBCodingUtilities.m [deleted file]
macosx/HBController.h
macosx/HBController.m
macosx/HBCore.m
macosx/HBFiltersViewController.m
macosx/HBHUDButtonCell.h [deleted file]
macosx/HBHUDButtonCell.m [deleted file]
macosx/HBHUDView.h
macosx/HBHUDView.m
macosx/HBJob+HBJobConversion.m
macosx/HBJob.m
macosx/HBOutputFileWriter.m
macosx/HBPictureController.m
macosx/HBPictureViewController.m
macosx/HBPlayerHUDController.m
macosx/HBPreferencesController.m
macosx/HBPresetsViewController.m
macosx/HBPreviewController.m
macosx/HBQTKitPlayer.h [deleted file]
macosx/HBQTKitPlayer.m [deleted file]
macosx/HBQueueController.h
macosx/HBQueueController.m
macosx/HBRenamePresetController.m
macosx/HBSubtitlesController.m
macosx/HBSubtitlesDefaultsController.m
macosx/HBTitleSelectionController.m
macosx/HBVideo+UIAdditions.h
macosx/HBVideo+UIAdditions.m
macosx/HBVideoController.m
macosx/HandBrake.xcodeproj/project.pbxproj
macosx/Info.plist.m4
test/test.c

index 6cc1caf51432cd03385bd6bf33d00f601247b44f..dccbacc02340aff9664c5d85fc0b8445274145ad 100644 (file)
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13168.3" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14113" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
     <dependencies>
         <deployment identifier="macosx"/>
         <development version="8000" identifier="xcode"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13168.3"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14113"/>
         <capability name="box content view" minToolsVersion="7.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
                                 <button id="45">
                                     <rect key="frame" x="73" y="57" width="125" height="18"/>
                                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                                    <buttonCell key="cell" type="check" title="Keep Aspect Ratio" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="170" customClass="HBHUDButtonCell">
+                                    <buttonCell key="cell" type="check" title="Keep Aspect Ratio" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="170">
                                         <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
                                         <font key="font" metaFont="smallSystem"/>
                                     </buttonCell>
                                         <font key="font" metaFont="smallSystem"/>
                                     </stepperCell>
                                     <connections>
-                                        <binding destination="-2" name="maxValue" keyPath="self.picture.maxTopCrop" id="Kft-ci-UbK"/>
                                         <binding destination="-2" name="enabled" keyPath="self.picture.autocrop" id="Vp0-sU-c5s">
                                             <dictionary key="options">
                                                 <string key="NSValueTransformerName">NSNegateBoolean</string>
                                             </dictionary>
                                         </binding>
                                         <binding destination="-2" name="value" keyPath="self.picture.cropTop" previousBinding="Kft-ci-UbK" id="Zqw-Pu-qi1"/>
+                                        <binding destination="-2" name="maxValue" keyPath="self.picture.maxTopCrop" id="Kft-ci-UbK"/>
                                     </connections>
                                 </stepper>
                                 <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" id="15">
                                         <font key="font" metaFont="smallSystem"/>
                                     </stepperCell>
                                     <connections>
-                                        <binding destination="-2" name="maxValue" keyPath="self.picture.maxRightCrop" id="Fyc-RI-h9A"/>
                                         <binding destination="-2" name="enabled" keyPath="self.picture.autocrop" id="5QD-Dh-bzl">
                                             <dictionary key="options">
                                                 <string key="NSValueTransformerName">NSNegateBoolean</string>
                                             </dictionary>
                                         </binding>
                                         <binding destination="-2" name="value" keyPath="self.picture.cropRight" previousBinding="Fyc-RI-h9A" id="L3c-i2-kQY"/>
+                                        <binding destination="-2" name="maxValue" keyPath="self.picture.maxRightCrop" id="Fyc-RI-h9A"/>
                                     </connections>
                                 </stepper>
                                 <matrix verticalHuggingPriority="750" allowsEmptySelection="NO" autosizesCells="NO" id="16">
                                     <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
                                     <size key="cellSize" width="90" height="20"/>
                                     <size key="intercellSpacing" width="2" height="3"/>
-                                    <buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="178" customClass="HBHUDButtonCell">
+                                    <buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="178">
                                         <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
                                         <font key="font" metaFont="smallSystem"/>
                                     </buttonCell>
                                     <cells>
                                         <column>
-                                            <buttonCell type="radio" title="Automatic" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="17" customClass="HBHUDButtonCell">
+                                            <buttonCell type="radio" title="Automatic" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="17">
                                                 <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
                                                 <font key="font" metaFont="smallSystem"/>
                                             </buttonCell>
-                                            <buttonCell type="radio" title="Custom:" imagePosition="left" alignment="left" controlSize="small" inset="2" id="18" customClass="HBHUDButtonCell">
+                                            <buttonCell type="radio" title="Custom:" imagePosition="left" alignment="left" controlSize="small" inset="2" id="18">
                                                 <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
                                                 <font key="font" metaFont="smallSystem"/>
                                             </buttonCell>
                                         <font key="font" metaFont="smallSystem"/>
                                     </stepperCell>
                                     <connections>
-                                        <binding destination="-2" name="maxValue" keyPath="self.picture.maxLeftCrop" id="CcF-LX-2Wg"/>
                                         <binding destination="-2" name="enabled" keyPath="self.picture.autocrop" id="WmV-2A-EDo">
                                             <dictionary key="options">
                                                 <string key="NSValueTransformerName">NSNegateBoolean</string>
                                             </dictionary>
                                         </binding>
                                         <binding destination="-2" name="value" keyPath="self.picture.cropLeft" previousBinding="CcF-LX-2Wg" id="VtG-0s-YHK"/>
+                                        <binding destination="-2" name="maxValue" keyPath="self.picture.maxLeftCrop" id="CcF-LX-2Wg"/>
                                     </connections>
                                 </stepper>
                                 <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="11">
                                         <font key="font" metaFont="smallSystem"/>
                                     </stepperCell>
                                     <connections>
-                                        <binding destination="-2" name="maxValue" keyPath="self.picture.maxBottomCrop" id="YKW-no-4sN"/>
                                         <binding destination="-2" name="enabled" keyPath="self.picture.autocrop" id="soK-UE-pde">
                                             <dictionary key="options">
                                                 <string key="NSValueTransformerName">NSNegateBoolean</string>
                                             </dictionary>
                                         </binding>
                                         <binding destination="-2" name="value" keyPath="self.picture.cropBottom" previousBinding="YKW-no-4sN" id="4AO-dA-bmi"/>
+                                        <binding destination="-2" name="maxValue" keyPath="self.picture.maxBottomCrop" id="YKW-no-4sN"/>
                                     </connections>
                                 </stepper>
                                 <textField verticalHuggingPriority="750" allowsCharacterPickerTouchBarItem="YES" id="382">
diff --git a/macosx/Growl.framework/Growl b/macosx/Growl.framework/Growl
deleted file mode 120000 (symlink)
index 85956e2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Growl
\ No newline at end of file
diff --git a/macosx/Growl.framework/Headers b/macosx/Growl.framework/Headers
deleted file mode 120000 (symlink)
index a177d2a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Headers
\ No newline at end of file
diff --git a/macosx/Growl.framework/Resources b/macosx/Growl.framework/Resources
deleted file mode 120000 (symlink)
index 953ee36..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Versions/Current/Resources
\ No newline at end of file
diff --git a/macosx/Growl.framework/Versions/A/Growl b/macosx/Growl.framework/Versions/A/Growl
deleted file mode 100755 (executable)
index 395dd2b..0000000
Binary files a/macosx/Growl.framework/Versions/A/Growl and /dev/null differ
diff --git a/macosx/Growl.framework/Versions/A/Headers/Growl.h b/macosx/Growl.framework/Versions/A/Headers/Growl.h
deleted file mode 100644 (file)
index 7b1a324..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include <Growl/GrowlDefines.h>
-
-#ifdef __OBJC__
-#      include <Growl/GrowlApplicationBridge.h>
-#endif
diff --git a/macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h b/macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h
deleted file mode 100644 (file)
index 0bf3583..0000000
+++ /dev/null
@@ -1,567 +0,0 @@
-//
-//  GrowlApplicationBridge.h
-//  Growl
-//
-//  Created by Evan Schoenberg on Wed Jun 16 2004.
-//  Copyright 2004-2006 The Growl Project. All rights reserved.
-//
-
-/*!
- *     @header         GrowlApplicationBridge.h
- *     @abstract   Defines the GrowlApplicationBridge class.
- *     @discussion This header defines the GrowlApplicationBridge class as well as
- *      the GROWL_PREFPANE_BUNDLE_IDENTIFIER constant.
- */
-
-#ifndef __GrowlApplicationBridge_h__
-#define __GrowlApplicationBridge_h__
-
-#import <Foundation/Foundation.h>
-#import <AppKit/AppKit.h>
-#import <Growl/GrowlDefines.h>
-
-//Forward declarations
-@protocol GrowlApplicationBridgeDelegate;
-
-//------------------------------------------------------------------------------
-#pragma mark -
-
-/*!
- *     @class      GrowlApplicationBridge
- *     @abstract   A class used to interface with Growl.
- *     @discussion This class provides a means to interface with Growl.
- *
- *      Currently it provides a way to detect if Growl is installed and launch the
- *      GrowlHelperApp if it's not already running.
- */
-@interface GrowlApplicationBridge : NSObject {
-
-}
-
-/*!
- *     @method isGrowlInstalled
- *     @abstract Detects whether Growl is installed.
- *     @discussion Determines if the Growl prefpane and its helper app are installed.
- *     @result this method will forever return YES.
- */
-+ (BOOL) isGrowlInstalled __attribute__((deprecated));
-
-/*!
- *     @method isGrowlRunning
- *     @abstract Detects whether GrowlHelperApp is currently running.
- *     @discussion Cycles through the process list to find whether GrowlHelperApp is running and returns its findings.
- *     @result Returns YES if GrowlHelperApp is running, NO otherwise.
- */
-+ (BOOL) isGrowlRunning;
-
-
-/*!
- *     @method isMistEnabled
- *     @abstract Gives the caller a fairly good indication of whether or not built-in notifications(Mist) will be used.
- *     @discussion since this call makes use of isGrowlRunning it is entirely possible for this value to change between call and
- *    executing a notification dispatch
- *     @result Returns YES if Growl isn't reachable and the developer has not opted-out of
- *    Mist and the user hasn't set the global mist enable key to false.
- */
-+ (BOOL)isMistEnabled;
-
-/*!
- *     @method setShouldUseBuiltInNotifications
- *     @abstract opt-out mechanism for the mist notification style in the event growl can't be reached.
- *     @discussion if growl is unavailable due to not being installed or as a result of being turned off then
- *    this option can enable/disable a built-in fire and forget display style
- *     @param should Specifies whether or not the developer wants to opt-in (default) or opt out
- *    of the built-in Mist style in the event Growl is unreachable.
- */
-+ (void)setShouldUseBuiltInNotifications:(BOOL)should;
-
-/*!
- *     @method shouldUseBuiltInNotifications
- *     @abstract returns the current opt-in state of the framework's use of the Mist display style.
- *     @result Returns NO if the developer opt-ed out of Mist, the default value is YES.
- */
-+ (BOOL)shouldUseBuiltInNotifications;
-
-#pragma mark -
-
-/*!
- *     @method setGrowlDelegate:
- *     @abstract Set the object which will be responsible for providing and receiving Growl information.
- *     @discussion This must be called before using GrowlApplicationBridge.
- *
- *      The methods in the GrowlApplicationBridgeDelegate protocol are required
- *      and return the basic information needed to register with Growl.
- *
- *      The methods in the GrowlApplicationBridgeDelegate_InformalProtocol
- *      informal protocol are individually optional.  They provide a greater
- *      degree of interaction between the application and growl such as informing
- *      the application when one of its Growl notifications is clicked by the user.
- *
- *      The methods in the GrowlApplicationBridgeDelegate_Installation_InformalProtocol
- *      informal protocol are individually optional and are only applicable when
- *      using the Growl-WithInstaller.framework which allows for automated Growl
- *      installation.
- *
- *      When this method is called, data will be collected from inDelegate, Growl
- *      will be launched if it is not already running, and the application will be
- *      registered with Growl.
- *
- *      If using the Growl-WithInstaller framework, if Growl is already installed
- *      but this copy of the framework has an updated version of Growl, the user
- *      will be prompted to update automatically.
- *
- *     @param inDelegate The delegate for the GrowlApplicationBridge. It must conform to the GrowlApplicationBridgeDelegate protocol.
- */
-+ (void) setGrowlDelegate:(id<GrowlApplicationBridgeDelegate>)inDelegate;
-
-/*!
- *     @method growlDelegate
- *     @abstract Return the object responsible for providing and receiving Growl information.
- *     @discussion See setGrowlDelegate: for details.
- *     @result The Growl delegate.
- */
-+ (id<GrowlApplicationBridgeDelegate>) growlDelegate;
-
-#pragma mark -
-
-/*!
- *     @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:
- *     @abstract Send a Growl notification.
- *     @discussion This is the preferred means for sending a Growl notification.
- *      The notification name and at least one of the title and description are
- *      required (all three are preferred).  All other parameters may be
- *      <code>nil</code> (or 0 or NO as appropriate) to accept default values.
- *
- *      If using the Growl-WithInstaller framework, if Growl is not installed the
- *      user will be prompted to install Growl. If the user cancels, this method
- *      will have no effect until the next application session, at which time when
- *      it is called the user will be prompted again. The user is also given the
- *      option to not be prompted again.  If the user does choose to install Growl,
- *      the requested notification will be displayed once Growl is installed and
- *      running.
- *
- *     @param title            The title of the notification displayed to the user.
- *     @param description      The full description of the notification displayed to the user.
- *     @param notifName        The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
- *     @param iconData         <code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
- *     @param priority         The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
- *     @param isSticky         If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
- *     @param clickContext     A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
- */
-+ (void) notifyWithTitle:(NSString *)title
-                        description:(NSString *)description
-               notificationName:(NSString *)notifName
-                               iconData:(NSData *)iconData
-                               priority:(signed int)priority
-                               isSticky:(BOOL)isSticky
-                       clickContext:(id)clickContext;
-
-/*!
- *     @method notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:identifier:
- *     @abstract Send a Growl notification.
- *     @discussion This is the preferred means for sending a Growl notification.
- *      The notification name and at least one of the title and description are
- *      required (all three are preferred).  All other parameters may be
- *      <code>nil</code> (or 0 or NO as appropriate) to accept default values.
- *
- *      If using the Growl-WithInstaller framework, if Growl is not installed the
- *      user will be prompted to install Growl. If the user cancels, this method
- *      will have no effect until the next application session, at which time when
- *      it is called the user will be prompted again. The user is also given the
- *      option to not be prompted again.  If the user does choose to install Growl,
- *      the requested notification will be displayed once Growl is installed and
- *      running.
- *
- *     @param title            The title of the notification displayed to the user.
- *     @param description      The full description of the notification displayed to the user.
- *     @param notifName        The internal name of the notification. Should be human-readable, as it will be displayed in the Growl preference pane.
- *     @param iconData         <code>NSData</code> object to show with the notification as its icon. If <code>nil</code>, the application's icon will be used instead.
- *     @param priority         The priority of the notification. The default value is 0; positive values are higher priority and negative values are lower priority. Not all Growl displays support priority.
- *     @param isSticky         If YES, the notification will remain on screen until clicked. Not all Growl displays support sticky notifications.
- *     @param clickContext     A context passed back to the Growl delegate if it implements -(void)growlNotificationWasClicked: and the notification is clicked. Not all display plugins support clicking. The clickContext must be plist-encodable (completely of <code>NSString</code>, <code>NSArray</code>, <code>NSNumber</code>, <code>NSDictionary</code>, and <code>NSData</code> types).
- *     @param identifier       An identifier for this notification. Notifications with equal identifiers are coalesced.
- */
-+ (void) notifyWithTitle:(NSString *)title
-                        description:(NSString *)description
-               notificationName:(NSString *)notifName
-                               iconData:(NSData *)iconData
-                               priority:(signed int)priority
-                               isSticky:(BOOL)isSticky
-                       clickContext:(id)clickContext
-                         identifier:(NSString *)identifier;
-
-/*!    @method notifyWithDictionary:
- *     @abstract       Notifies using a userInfo dictionary suitable for passing to
- *      <code>NSDistributedNotificationCenter</code>.
- *     @param  userInfo        The dictionary to notify with.
- *     @discussion     Before Growl 0.6, your application would have posted
- *      notifications using <code>NSDistributedNotificationCenter</code> by
- *      creating a userInfo dictionary with the notification data. This had the
- *      advantage of allowing you to add other data to the dictionary for programs
- *      besides Growl that might be listening.
- *
- *      This method allows you to use such dictionaries without being restricted
- *      to using <code>NSDistributedNotificationCenter</code>. The keys for this dictionary
- *      can be found in GrowlDefines.h.
- */
-+ (void) notifyWithDictionary:(NSDictionary *)userInfo;
-
-#pragma mark -
-
-/*!    @method registerWithDictionary:
- *     @abstract       Register your application with Growl without setting a delegate.
- *     @discussion     When you call this method with a dictionary,
- *      GrowlApplicationBridge registers your application using that dictionary.
- *      If you pass <code>nil</code>, GrowlApplicationBridge will ask the delegate
- *      (if there is one) for a dictionary, and if that doesn't work, it will look
- *      in your application's bundle for an auto-discoverable plist.
- *      (XXX refer to more information on that)
- *
- *      If you pass a dictionary to this method, it must include the
- *      <code>GROWL_APP_NAME</code> key, unless a delegate is set.
- *
- *      This method is mainly an alternative to the delegate system introduced
- *      with Growl 0.6. Without a delegate, you cannot receive callbacks such as
- *      <code>-growlIsReady</code> (since they are sent to the delegate). You can,
- *      however, set a delegate after registering without one.
- *
- *      This method was introduced in Growl.framework 0.7.
- */
-+ (BOOL) registerWithDictionary:(NSDictionary *)regDict;
-
-/*!    @method reregisterGrowlNotifications
- *     @abstract       Reregister the notifications for this application.
- *     @discussion     This method does not normally need to be called.  If your
- *      application changes what notifications it is registering with Growl, call
- *      this method to have the Growl delegate's
- *      <code>-registrationDictionaryForGrowl</code> method called again and the
- *      Growl registration information updated.
- *
- *      This method is now implemented using <code>-registerWithDictionary:</code>.
- */
-+ (void) reregisterGrowlNotifications;
-
-#pragma mark -
-
-/*!    @method setWillRegisterWhenGrowlIsReady:
- *     @abstract       Tells GrowlApplicationBridge to register with Growl when Growl
- *      launches (or not).
- *     @discussion     When Growl has started listening for notifications, it posts a
- *      <code>GROWL_IS_READY</code> notification on the Distributed Notification
- *      Center. GrowlApplicationBridge listens for this notification, using it to
- *      perform various tasks (such as calling your delegate's
- *      <code>-growlIsReady</code> method, if it has one). If this method is
- *      called with <code>YES</code>, one of those tasks will be to reregister
- *      with Growl (in the manner of <code>-reregisterGrowlNotifications</code>).
- *
- *      This attribute is automatically set back to <code>NO</code> (the default)
- *      after every <code>GROWL_IS_READY</code> notification.
- *     @param  flag    <code>YES</code> if you want GrowlApplicationBridge to register with
- *      Growl when next it is ready; <code>NO</code> if not.
- */
-+ (void) setWillRegisterWhenGrowlIsReady:(BOOL)flag;
-
-/*!    @method willRegisterWhenGrowlIsReady
- *     @abstract       Reports whether GrowlApplicationBridge will register with Growl
- *      when Growl next launches.
- *     @result <code>YES</code> if GrowlApplicationBridge will register with Growl
- *      when next it posts GROWL_IS_READY; <code>NO</code> if not.
- */
-+ (BOOL) willRegisterWhenGrowlIsReady;
-
-#pragma mark -
-
-/*!    @method registrationDictionaryFromDelegate
- *     @abstract       Asks the delegate for a registration dictionary.
- *     @discussion     If no delegate is set, or if the delegate's
- *      <code>-registrationDictionaryForGrowl</code> method returns
- *      <code>nil</code>, this method returns <code>nil</code>.
- *
- *      This method does not attempt to clean up the dictionary in any way - for
- *      example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
- *      will be missing it too. Use <code>+[GrowlApplicationBridge
- *      registrationDictionaryByFillingInDictionary:]</code> or
- *      <code>+[GrowlApplicationBridge
- *      registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try
- *      to fill in missing keys.
- *
- *      This method was introduced in Growl.framework 0.7.
- *     @result A registration dictionary.
- */
-+ (NSDictionary *) registrationDictionaryFromDelegate;
-
-/*!    @method registrationDictionaryFromBundle:
- *     @abstract       Looks in a bundle for a registration dictionary.
- *     @discussion     This method looks in a bundle for an auto-discoverable
- *      registration dictionary file using <code>-[NSBundle
- *      pathForResource:ofType:]</code>. If it finds one, it loads the file using
- *      <code>+[NSDictionary dictionaryWithContentsOfFile:]</code> and returns the
- *      result.
- *
- *      If you pass <code>nil</code> as the bundle, the main bundle is examined.
- *
- *      This method does not attempt to clean up the dictionary in any way - for
- *      example, if it is missing the <code>GROWL_APP_NAME</code> key, the result
- *      will be missing it too. Use <code>+[GrowlApplicationBridge
- *      registrationDictionaryByFillingInDictionary:]</code> or
- *      <code>+[GrowlApplicationBridge
- *      registrationDictionaryByFillingInDictionary:restrictToKeys:]</code> to try
- *      to fill in missing keys.
- *
- *      This method was introduced in Growl.framework 0.7.
- *     @result A registration dictionary.
- */
-+ (NSDictionary *) registrationDictionaryFromBundle:(NSBundle *)bundle;
-
-/*!    @method bestRegistrationDictionary
- *     @abstract       Obtains a registration dictionary, filled out to the best of
- *      GrowlApplicationBridge's knowledge.
- *     @discussion     This method creates a registration dictionary as best
- *      GrowlApplicationBridge knows how.
- *
- *      First, GrowlApplicationBridge contacts the Growl delegate (if there is
- *      one) and gets the registration dictionary from that. If no such dictionary
- *      was obtained, GrowlApplicationBridge looks in your application's main
- *      bundle for an auto-discoverable registration dictionary file. If that
- *      doesn't exist either, this method returns <code>nil</code>.
- *
- *      Second, GrowlApplicationBridge calls
- *      <code>+registrationDictionaryByFillingInDictionary:</code> with whatever
- *      dictionary was obtained. The result of that method is the result of this
- *      method.
- *
- *      GrowlApplicationBridge uses this method when you call
- *      <code>+setGrowlDelegate:</code>, or when you call
- *      <code>+registerWithDictionary:</code> with <code>nil</code>.
- *
- *      This method was introduced in Growl.framework 0.7.
- *     @result A registration dictionary.
- */
-+ (NSDictionary *) bestRegistrationDictionary;
-
-#pragma mark -
-
-/*!    @method registrationDictionaryByFillingInDictionary:
- *     @abstract       Tries to fill in missing keys in a registration dictionary.
- *     @discussion     This method examines the passed-in dictionary for missing keys,
- *      and tries to work out correct values for them. As of 0.7, it uses:
- *
- *      Key                                                                 Value
- *      ---                                                                 -----
- *      <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
- *      <code>GROWL_APP_ICON_DATA</code>            The data of the icon of the application.
- *      <code>GROWL_APP_LOCATION</code>             The location of the application.
- *      <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
- *
- *      Keys are only filled in if missing; if a key is present in the dictionary,
- *      its value will not be changed.
- *
- *      This method was introduced in Growl.framework 0.7.
- *     @param  regDict The dictionary to fill in.
- *     @result The dictionary with the keys filled in. This is an autoreleased
- *      copy of <code>regDict</code>.
- */
-+ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict;
-
-/*!    @method registrationDictionaryByFillingInDictionary:restrictToKeys:
- *     @abstract       Tries to fill in missing keys in a registration dictionary.
- *     @discussion     This method examines the passed-in dictionary for missing keys,
- *      and tries to work out correct values for them. As of 0.7, it uses:
- *
- *      Key                                                                 Value
- *      ---                                                                 -----
- *      <code>GROWL_APP_NAME</code>                 <code>CFBundleExecutableName</code>
- *      <code>GROWL_APP_ICON_DATA</code>            The data of the icon of the application.
- *      <code>GROWL_APP_LOCATION</code>             The location of the application.
- *      <code>GROWL_NOTIFICATIONS_DEFAULT</code>    <code>GROWL_NOTIFICATIONS_ALL</code>
- *
- *      Only those keys that are listed in <code>keys</code> will be filled in.
- *      Other missing keys are ignored. Also, keys are only filled in if missing;
- *      if a key is present in the dictionary, its value will not be changed.
- *
- *      This method was introduced in Growl.framework 0.7.
- *     @param  regDict The dictionary to fill in.
- *     @param  keys    The keys to fill in. If <code>nil</code>, any missing keys are filled in.
- *     @result The dictionary with the keys filled in. This is an autoreleased
- *      copy of <code>regDict</code>.
- */
-+ (NSDictionary *) registrationDictionaryByFillingInDictionary:(NSDictionary *)regDict restrictToKeys:(NSSet *)keys;
-
-/*!    @brief  Tries to fill in missing keys in a notification dictionary.
- *     @param  notifDict       The dictionary to fill in.
- *     @return The dictionary with the keys filled in. This will be a separate instance from \a notifDict.
- *     @discussion     This function examines the \a notifDict for missing keys, and 
- *      tries to get them from the last known registration dictionary. As of 1.1, 
- *      the keys that it will look for are:
- *
- *      \li <code>GROWL_APP_NAME</code>
- *      \li <code>GROWL_APP_ICON_DATA</code>
- *
- *     @since Growl.framework 1.1
- */
-+ (NSDictionary *) notificationDictionaryByFillingInDictionary:(NSDictionary *)regDict;
-
-+ (NSDictionary *) frameworkInfoDictionary;
-
-#pragma mark -
-
-/*!
- *@method growlURLSchemeAvailable
- *@abstract Lets the app know whether growl:// is registered on the system, used for certain methods below this
- *@return Returns whether growl:// is registered on the system
- *@discussion Methods such as openGrowlPreferences rely on the growl:// URL scheme to function
- * Further, this method can provide a check on whether Growl is installed, 
- * however, the framework will not be relying on this method for choosing when/how to notify, 
- * and it is not recommended that the app rely on it for other than whether to use growl:// methods
- *@since Growl.framework 1.4
- */
-+ (BOOL) isGrowlURLSchemeAvailable;
-
-/*!
- * @method openGrowlPreferences:
- * @abstract Open Growl preferences, optionally to this app's settings, growl:// method
- * @param showApp Whether to show the application's settings, otherwise just opens to the last position
- * @return Returns whether opening the URL was successful or not.  
- * @discussion Will launch if Growl is installed, but not running, and open the preferences window
- * Uses growl:// URL scheme
- * @since Growl.framework 1.4
- */
-+ (BOOL) openGrowlPreferences:(BOOL)showApp;
-
-@end
-
-//------------------------------------------------------------------------------
-#pragma mark -
-
-/*!
- *     @protocol GrowlApplicationBridgeDelegate
- *     @abstract Required protocol for the Growl delegate.
- *     @discussion The methods in this protocol are optional and are called
- *      automatically as needed by GrowlApplicationBridge. See
- *      <code>+[GrowlApplicationBridge setGrowlDelegate:]</code>.
- *      See also <code>GrowlApplicationBridgeDelegate_InformalProtocol</code>.
- */
-
-@protocol GrowlApplicationBridgeDelegate <NSObject>
-
-@optional
-
-/*!
- *     @method registrationDictionaryForGrowl
- *     @abstract Return the dictionary used to register this application with Growl.
- *     @discussion The returned dictionary gives Growl the complete list of
- *      notifications this application will ever send, and it also specifies which
- *      notifications should be enabled by default.  Each is specified by an array
- *      of <code>NSString</code> objects.
- *
- *      For most applications, these two arrays can be the same (if all sent
- *      notifications should be displayed by default).
- *
- *      The <code>NSString</code> objects of these arrays will correspond to the
- *      <code>notificationName:</code> parameter passed in
- *      <code>+[GrowlApplicationBridge
- *      notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:]</code> calls.
- *
- *      The dictionary should have the required key object pairs:
- *      key: GROWL_NOTIFICATIONS_ALL           object: <code>NSArray</code> of <code>NSString</code> objects
- *      key: GROWL_NOTIFICATIONS_DEFAULT       object: <code>NSArray</code> of <code>NSString</code> objects
- *
- *   The dictionary may have the following key object pairs:
- *   key: GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES     object: <code>NSDictionary</code> of key: notification name             object: human-readable notification name
- *
- *      You do not need to implement this method if you have an auto-discoverable
- *      plist file in your app bundle. (XXX refer to more information on that)
- *
- *     @result The <code>NSDictionary</code> to use for registration.
- */
-- (NSDictionary *) registrationDictionaryForGrowl;
-
-/*!
- *     @method applicationNameForGrowl
- *     @abstract Return the name of this application which will be used for Growl bookkeeping.
- *     @discussion This name is used both internally and in the Growl preferences.
- *
- *      This should remain stable between different versions and incarnations of
- *      your application.
- *      For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
- *      "SurfWriter Lite" are not.
- *
- *      You do not need to implement this method if you are providing the
- *      application name elsewhere, meaning in an auto-discoverable plist file in
- *      your app bundle (XXX refer to more information on that) or in the result
- *      of -registrationDictionaryForGrowl.
- *
- *     @result The name of the application using Growl.
- */
-- (NSString *) applicationNameForGrowl;
-
-/*!
- *     @method applicationIconForGrowl
- *     @abstract Return the <code>NSImage</code> to treat as the application icon.
- *     @discussion The delegate may optionally return an <code>NSImage</code>
- *      object to use as the application icon. If this method is not implemented,
- *      {{{-applicationIconDataForGrowl}}} is tried. If that method is not
- *      implemented, the application's own icon is used. Neither method is
- *      generally needed.
- *     @result The <code>NSImage</code> to treat as the application icon.
- */
-- (NSImage *) applicationIconForGrowl;
-
-/*!
- *     @method applicationIconDataForGrowl
- *     @abstract Return the <code>NSData</code> to treat as the application icon.
- *     @discussion The delegate may optionally return an <code>NSData</code>
- *      object to use as the application icon; if this is not implemented, the
- *      application's own icon is used.  This is not generally needed.
- *     @result The <code>NSData</code> to treat as the application icon.
- *     @deprecated In version 1.1, in favor of {{{-applicationIconForGrowl}}}.
- */
-- (NSData *) applicationIconDataForGrowl;
-
-/*!
- *     @method growlIsReady
- *     @abstract Informs the delegate that Growl has launched.
- *     @discussion Informs the delegate that Growl (specifically, the
- *      GrowlHelperApp) was launched successfully. The application can take actions
- *   with the knowledge that Growl is installed and functional.
- */
-- (void) growlIsReady;
-
-/*!
- *     @method growlNotificationWasClicked:
- *     @abstract Informs the delegate that a Growl notification was clicked.
- *     @discussion Informs the delegate that a Growl notification was clicked.  It
- *      is only sent for notifications sent with a non-<code>nil</code>
- *      clickContext, so if you want to receive a message when a notification is
- *      clicked, clickContext must not be <code>nil</code> when calling
- *      <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>.
- *     @param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:].
- */
-- (void) growlNotificationWasClicked:(id)clickContext;
-
-/*!
- *     @method growlNotificationTimedOut:
- *     @abstract Informs the delegate that a Growl notification timed out.
- *     @discussion Informs the delegate that a Growl notification timed out. It
- *      is only sent for notifications sent with a non-<code>nil</code>
- *      clickContext, so if you want to receive a message when a notification is
- *      clicked, clickContext must not be <code>nil</code> when calling
- *      <code>+[GrowlApplicationBridge notifyWithTitle: description:notificationName:iconData:priority:isSticky:clickContext:]</code>.
- *     @param clickContext The clickContext passed when displaying the notification originally via +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:].
- */
-- (void) growlNotificationTimedOut:(id)clickContext;
-
-
-/*!
- * @method hasNetworkClientEntitlement
- * @abstract Used only in sandboxed situations since we don't know whether the app has com.apple.security.network.client entitlement
- * @discussion GrowlDelegate calls to find out if we have the com.apple.security.network.client entitlement,
- *  since we can't find this out without hitting the sandbox.  We only call it if we detect that the application is sandboxed.
- */
-- (BOOL) hasNetworkClientEntitlement;
-
-@end
-
-#pragma mark -
-
-#endif /* __GrowlApplicationBridge_h__ */
diff --git a/macosx/Growl.framework/Versions/A/Headers/GrowlDefines.h b/macosx/Growl.framework/Versions/A/Headers/GrowlDefines.h
deleted file mode 100644 (file)
index 0a196f1..0000000
+++ /dev/null
@@ -1,386 +0,0 @@
-//
-//  GrowlDefines.h
-//
-
-#ifndef _GROWLDEFINES_H
-#define _GROWLDEFINES_H
-
-#ifdef __OBJC__
-#define XSTR(x) (@x)
-#else
-#define XSTR CFSTR
-#endif
-
-/*!    @header GrowlDefines.h
- *     @abstract   Defines all the notification keys.
- *     @discussion Defines all the keys used for registration with Growl and for
- *      Growl notifications.
- *
- *      Most applications should use the functions or methods of Growl.framework
- *      instead of posting notifications such as those described here.
- *     @updated 2004-01-25
- */
-
-// UserInfo Keys for Registration
-#pragma mark UserInfo Keys for Registration
-
-/*!    @group Registration userInfo keys */
-/*     @abstract       Keys for the userInfo dictionary of a GROWL_APP_REGISTRATION distributed notification.
- *     @discussion The values of these keys describe the application and the
- *      notifications it may post.
- *
- *      Your application must register with Growl before it can post Growl
- *      notifications (and have them not be ignored). However, as of Growl 0.6,
- *      posting GROWL_APP_REGISTRATION notifications directly is no longer the
- *      preferred way to register your application. Your application should instead
- *      use Growl.framework's delegate system.
- *      See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for
- *      more information.
- */
-
-/*!    @defined GROWL_APP_NAME
- *     @abstract The name of your application.
- *     @discussion The name of your application. This should remain stable between
- *      different versions and incarnations of your application.
- *      For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and
- *      "SurfWriter Lite" are not.
- */
-#define GROWL_APP_NAME                                 XSTR("ApplicationName")
-/*!    @defined GROWL_APP_ID
- *     @abstract The bundle identifier of your application.
- *     @discussion The bundle identifier of your application. This key should
- *   be unique for your application while there may be several applications
- *   with the same GROWL_APP_NAME.
- *   This key is optional.
- */
-#define GROWL_APP_ID                                   XSTR("ApplicationId")
-/*!    @defined GROWL_APP_ICON_DATA
- *     @abstract The image data for your application's icon.
- *     @discussion Image data representing your application's icon. This may be
- *      superimposed on a notification icon as a badge, used as the notification
- *      icon when a notification-specific icon is not supplied, or ignored
- *      altogether, depending on the display. Must be in a format supported by
- *      NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
- *
- *      Optional. Not supported by all display plugins.
- */
-#define GROWL_APP_ICON_DATA                            XSTR("ApplicationIcon")
-/*!    @defined GROWL_NOTIFICATIONS_DEFAULT
- *     @abstract The array of notifications to turn on by default.
- *     @discussion These are the names of the notifications that should be enabled
- *      by default when your application registers for the first time. If your
- *      application reregisters, Growl will look here for any new notification
- *      names found in GROWL_NOTIFICATIONS_ALL, but ignore any others.
- */
-#define GROWL_NOTIFICATIONS_DEFAULT            XSTR("DefaultNotifications")
-/*!    @defined GROWL_NOTIFICATIONS_ALL
- *     @abstract The array of all notifications your application can send.
- *     @discussion These are the names of all of the notifications that your
- *      application may post. See GROWL_NOTIFICATION_NAME for a discussion of good
- *      notification names.
- */
-#define GROWL_NOTIFICATIONS_ALL                        XSTR("AllNotifications")
-/*! @defined GROWL_NOTIFICATIONS_HUMAN_READABLE_DESCRIPTIONS
- *  @abstract A dictionary of human-readable names for your notifications.
- *  @discussion By default, the Growl UI will display notifications by the names given in GROWL_NOTIFICATIONS_ALL
- *  which correspond to the GROWL_NOTIFICATION_NAME. This dictionary specifies the human-readable name to display.
- *  The keys of the dictionary are GROWL_NOTIFICATION_NAME strings; the objects are the human-readable versions.
- *  For any GROWL_NOTIFICATION_NAME not specific in this dictionary, the GROWL_NOTIFICATION_NAME will be displayed.
- *
- *  This key is optional.
- */
-#define GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES               XSTR("HumanReadableNames")
-/*! @defined GROWL_NOTIFICATIONS_DESCRIPTIONS
-*  @abstract A dictionary of descriptions of _when_ each notification occurs
-*  @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are
-*  descriptions of _when_ each notification occurs, such as "You received a new mail message" or
-*  "A file finished downloading".
-*
-*  This key is optional.
-*/
-#define GROWL_NOTIFICATIONS_DESCRIPTIONS               XSTR("NotificationDescriptions")
-/*! @defined GROWL_NOTIFICATIONS_ICONS
- *  @abstract A dictionary of icons for each notification
- *  @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are
- *  icons for each notification, for GNTP spec
- *
- *  This key is optional.
- */
-#define GROWL_NOTIFICATIONS_ICONS XSTR("NotificationIcons")
-
-/*!    @defined        GROWL_TICKET_VERSION
- *     @abstract       The version of your registration ticket.
- *     @discussion     Include this key in a ticket plist file that you put in your
- *      application bundle for auto-discovery. The current ticket version is 1.
- */
-#define GROWL_TICKET_VERSION                   XSTR("TicketVersion")
-// UserInfo Keys for Notifications
-#pragma mark UserInfo Keys for Notifications
-
-/*!    @group Notification userInfo keys */
-/*     @abstract       Keys for the userInfo dictionary of a GROWL_NOTIFICATION distributed notification.
- *     @discussion The values of these keys describe the content of a Growl
- *      notification.
- *
- *      Not all of these keys are supported by all displays. Only the name, title,
- *      and description of a notification are universal. Most of the built-in
- *      displays do support all of these keys, and most other visual displays
- *      probably will also. But, as of 0.6, the Log, MailMe, and Speech displays
- *      support only textual data.
- */
-
-/*!    @defined GROWL_NOTIFICATION_NAME
- *     @abstract The name of the notification.
- *     @discussion The name of the notification. Note that if you do not define
- *  GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES when registering your ticket originally this name
- *  will the one displayed within the Growl preference pane and should be human-readable.
- */
-#define GROWL_NOTIFICATION_NAME                        XSTR("NotificationName")
-/*!    @defined GROWL_NOTIFICATION_TITLE
- *     @abstract The title to display in the notification.
- *     @discussion The title of the notification. Should be very brief.
- *      The title usually says what happened, e.g. "Download complete".
- */
-#define GROWL_NOTIFICATION_TITLE               XSTR("NotificationTitle")
-/*!    @defined GROWL_NOTIFICATION_DESCRIPTION
- *     @abstract The description to display in the notification.
- *     @discussion The description should be longer and more verbose than the title.
- *      The description usually tells the subject of the action,
- *      e.g. "Growl-0.6.dmg downloaded in 5.02 minutes".
- */
-#define GROWL_NOTIFICATION_DESCRIPTION         XSTR("NotificationDescription")
-/*!    @defined GROWL_NOTIFICATION_ICON
- *     @discussion Image data for the notification icon. Image data must be in a format
- *      supported by NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
- *
- *      Optional. Not supported by all display plugins.
- */
-#define GROWL_NOTIFICATION_ICON_DATA                   XSTR("NotificationIcon")
-/*!    @defined GROWL_NOTIFICATION_APP_ICON
- *     @discussion Image data for the application icon, in case GROWL_APP_ICON does
- *      not apply for some reason. Image data be in a format supported by NSImage, such
- *      as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF.
- *
- *      Optional. Not supported by all display plugins.
- */
-#define GROWL_NOTIFICATION_APP_ICON_DATA               XSTR("NotificationAppIcon")
-/*!    @defined GROWL_NOTIFICATION_PRIORITY
- *     @discussion The priority of the notification as an integer number from
- *      -2 to +2 (+2 being highest).
- *
- *      Optional. Not supported by all display plugins.
- */
-#define GROWL_NOTIFICATION_PRIORITY            XSTR("NotificationPriority")
-/*!    @defined GROWL_NOTIFICATION_STICKY
- *     @discussion A Boolean number controlling whether the notification is sticky.
- *
- *      Optional. Not supported by all display plugins.
- */
-#define GROWL_NOTIFICATION_STICKY              XSTR("NotificationSticky")
-/*!    @defined GROWL_NOTIFICATION_CLICK_CONTEXT
- *     @abstract Identifies which notification was clicked.
- *     @discussion An identifier for the notification for clicking purposes.
- *
- *      This will be passed back to the application when the notification is
- *      clicked. It must be plist-encodable (a data, dictionary, array, number, or
- *      string object), and it should be unique for each notification you post.
- *      A good click context would be a UUID string returned by NSProcessInfo or
- *      CFUUID.
- *
- *      Optional. Not supported by all display plugins.
- */
-#define GROWL_NOTIFICATION_CLICK_CONTEXT                       XSTR("NotificationClickContext")
-
-/*!    @defined GROWL_NOTIFICATION_IDENTIFIER
- *     @abstract An identifier for the notification for coalescing purposes.
- *   Notifications with the same identifier fall into the same class; only
- *   the last notification of a class is displayed on the screen. If a
- *   notification of the same class is currently being displayed, it is
- *   replaced by this notification.
- *
- *      Optional. Not supported by all display plugins.
- */
-#define GROWL_NOTIFICATION_IDENTIFIER  XSTR("GrowlNotificationIdentifier")
-
-/*!    @defined GROWL_APP_PID
- *     @abstract The process identifier of the process which sends this
- *   notification. If this field is set, the application will only receive
- *   clicked and timed out notifications which originate from this process.
- *
- *      Optional.
- */
-#define GROWL_APP_PID                                  XSTR("ApplicationPID")
-
-/*!    @defined GROWL_NOTIFICATION_PROGRESS
-*      @abstract If this key is set, it should contain a double value wrapped
-*     in a NSNumber which describes some sort of progress (from 0.0 to 100.0).
-*     If this is key is not set, no progress bar is shown.
-*
-*       Optional. Not supported by all display plugins.
-*/
-#define GROWL_NOTIFICATION_PROGRESS            XSTR("NotificationProgress")
-
-/*!    @defined GROWL_NOTIFICATION_ALREADY_SHOWN
- *     @abstract If this key is set, it should contain a bool value wrapped
- *   in a NSNumber which describes whether the notification has
- *   already been displayed, for instance by built in Notification
- *   Center support.  This value can be used to allow display
- *   plugins to skip a notification, while still allowing Growl
- *   actions to run on them.
- *
- *      Optional. Not supported by all display plugins.
- */
-#define GROWL_NOTIFICATION_ALREADY_SHOWN               XSTR("AlreadyShown")
-
-
-// Notifications
-#pragma mark Notifications
-
-/*!    @group Notification names */
-/*     @abstract       Names of distributed notifications used by Growl.
- *     @discussion     These are notifications used by applications (directly or
- *      indirectly) to interact with Growl, and by Growl for interaction between
- *      its components.
- *
- *      Most of these should no longer be used in Growl 0.6 and later, in favor of
- *      Growl.framework's GrowlApplicationBridge APIs.
- */
-
-/*!    @defined GROWL_APP_REGISTRATION
- *     @abstract The distributed notification for registering your application.
- *     @discussion This is the name of the distributed notification that can be
- *      used to register applications with Growl.
- *
- *      The userInfo dictionary for this notification can contain these keys:
- *      <ul>
- *             <li>GROWL_APP_NAME</li>
- *             <li>GROWL_APP_ICON_DATA</li>
- *             <li>GROWL_NOTIFICATIONS_ALL</li>
- *             <li>GROWL_NOTIFICATIONS_DEFAULT</li>
- *      </ul>
- *
- *      No longer recommended as of Growl 0.6. An alternate method of registering
- *      is to use Growl.framework's delegate system.
- *      See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for
- *      more information.
- */
-#define GROWL_APP_REGISTRATION                 XSTR("GrowlApplicationRegistrationNotification")
-/*!    @defined GROWL_APP_REGISTRATION_CONF
- *     @abstract The distributed notification for confirming registration.
- *     @discussion The name of the distributed notification sent to confirm the
- *      registration. Used by the Growl preference pane. Your application probably
- *      does not need to use this notification.
- */
-#define GROWL_APP_REGISTRATION_CONF            XSTR("GrowlApplicationRegistrationConfirmationNotification")
-/*!    @defined GROWL_NOTIFICATION
- *     @abstract The distributed notification for Growl notifications.
- *     @discussion This is what it all comes down to. This is the name of the
- *      distributed notification that your application posts to actually send a
- *      Growl notification.
- *
- *      The userInfo dictionary for this notification can contain these keys:
- *      <ul>
- *             <li>GROWL_NOTIFICATION_NAME (required)</li>
- *             <li>GROWL_NOTIFICATION_TITLE (required)</li>
- *             <li>GROWL_NOTIFICATION_DESCRIPTION (required)</li>
- *             <li>GROWL_NOTIFICATION_ICON</li>
- *             <li>GROWL_NOTIFICATION_APP_ICON</li>
- *             <li>GROWL_NOTIFICATION_PRIORITY</li>
- *             <li>GROWL_NOTIFICATION_STICKY</li>
- *             <li>GROWL_NOTIFICATION_CLICK_CONTEXT</li>
- *             <li>GROWL_APP_NAME (required)</li>
- *      </ul>
- *
- *      No longer recommended as of Growl 0.6. Three alternate methods of posting
- *      notifications are +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:],
- *      Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext, and
- *      Growl_PostNotification.
- */
-#define GROWL_NOTIFICATION                             XSTR("GrowlNotification")
-/*!    @defined GROWL_PING
- *     @abstract A distributed notification to check whether Growl is running.
- *     @discussion This is used by the Growl preference pane. If it receives a
- *      GROWL_PONG, the preference pane takes this to mean that Growl is running.
- */
-#define GROWL_PING                                             XSTR("Honey, Mind Taking Out The Trash")
-/*!    @defined GROWL_PONG
- *     @abstract The distributed notification sent in reply to GROWL_PING.
- *     @discussion GrowlHelperApp posts this in reply to GROWL_PING.
- */
-#define GROWL_PONG                                             XSTR("What Do You Want From Me, Woman")
-/*!    @defined GROWL_IS_READY
- *     @abstract The distributed notification sent when Growl starts up.
- *     @discussion GrowlHelperApp posts this when it has begin listening on all of
- *      its sources for new notifications. GrowlApplicationBridge (in
- *      Growl.framework), upon receiving this notification, reregisters using the
- *      registration dictionary supplied by its delegate.
- */
-#define GROWL_IS_READY                                 XSTR("Lend Me Some Sugar; I Am Your Neighbor!")
-
-
-/*!    @defined GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX
- *     @abstract Part of the name of the distributed notification sent when a supported notification is clicked.
- *     @discussion When a Growl notification with a click context is clicked on by
- *      the user, Growl posts a distributed notification whose name is in the format:
- *        [NSString stringWithFormat:@"%@-%d-%@", appName, pid, GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX]
- *      The GrowlApplicationBridge responds to this notification by calling a callback in its delegate.
- */
-#define GROWL_DISTRIBUTED_NOTIFICATION_CLICKED_SUFFIX          XSTR("GrowlClicked!")
-
-/*!    @defined GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX
- *     @abstract Part of the name of the distributed notification sent when a supported notification times out without being clicked.
- *     @discussion When a Growl notification with a click context times out, Growl posts a distributed notification
- *      whose name is in the format:
- *               [NSString stringWithFormat:@"%@-%d-%@", appName, pid, GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX]
- *      The GrowlApplicationBridge responds to this notification by calling a callback in its delegate.
- *   NOTE: The user may have actually clicked the 'close' button; this triggers an *immediate* time-out of the notification.
- */
-#define GROWL_DISTRIBUTED_NOTIFICATION_TIMED_OUT_SUFFIX                XSTR("GrowlTimedOut!")
-
-/*!    @defined GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_ON
- *     @abstract The distributed notification sent when the Notification Center support is toggled on in Growl 2.0
- *     @discussion When the user enables Notification Center support in Growl 2.0, this notification is sent
- *      to inform all running apps that they should now speak to Notification Center directly.
- */
-#define GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_ON           XSTR("GrowlNotificationCenterOn!")
-
-/*!    @defined GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_OFF
- *     @abstract The distributed notification sent when the Notification Center support is toggled off in Growl 2.0
- *     @discussion When the user enables Notification Center support in Growl 2.0, this notification is sent
- *      to inform all running apps that they should no longer speak to Notification Center directly.
- */
-#define GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_OFF          XSTR("GrowlNotificationCenterOff!")
-
-/*!    @defined GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_QUERY
- *     @abstract The distributed notification sent by an application to query Growl 2.0's notification center support.
- *     @discussion When an app starts up, it will send this query to get Growl 2.0 to spit out whether notification
- *      center support is on or off.
- */
-#define GROWL_DISTRIBUTED_NOTIFICATION_NOTIFICATIONCENTER_QUERY                XSTR("GrowlNotificationCenterYN?")
-
-
-/*!    @group Other symbols */
-/* Symbols which don't fit into any of the other categories. */
-
-/*!    @defined GROWL_KEY_CLICKED_CONTEXT
- *     @abstract Used internally as the key for the clickedContext passed over DNC.
- *     @discussion This key is used in GROWL_NOTIFICATION_CLICKED, and contains the
- *      click context that was supplied in the original notification.
- */
-#define GROWL_KEY_CLICKED_CONTEXT              XSTR("ClickedContext")
-/*!    @defined GROWL_REG_DICT_EXTENSION
- *     @abstract The filename extension for registration dictionaries.
- *     @discussion The GrowlApplicationBridge in Growl.framework registers with
- *      Growl by creating a file with the extension of .(GROWL_REG_DICT_EXTENSION)
- *      and opening it in the GrowlHelperApp. This happens whether or not Growl is
- *      running; if it was stopped, it quits immediately without listening for
- *      notifications.
- */
-#define GROWL_REG_DICT_EXTENSION               XSTR("growlRegDict")
-
-
-#define GROWL_POSITION_PREFERENCE_KEY                  @"GrowlSelectedPosition"
-
-#define GROWL_PLUGIN_CONFIG_ID XSTR("GrowlPluginConfigurationID")
-
-#endif //ndef _GROWLDEFINES_H
diff --git a/macosx/Growl.framework/Versions/A/Resources/Info.plist b/macosx/Growl.framework/Versions/A/Resources/Info.plist
deleted file mode 100644 (file)
index 6a90f41..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-       <key>BuildMachineOSBuild</key>
-       <string>12C60</string>
-       <key>CFBundleDevelopmentRegion</key>
-       <string>English</string>
-       <key>CFBundleExecutable</key>
-       <string>Growl</string>
-       <key>CFBundleIdentifier</key>
-       <string>com.growl.growlframework</string>
-       <key>CFBundleInfoDictionaryVersion</key>
-       <string>6.0</string>
-       <key>CFBundlePackageType</key>
-       <string>FMWK</string>
-       <key>CFBundleShortVersionString</key>
-       <string>2.0.1</string>
-       <key>CFBundleSignature</key>
-       <string>GRRR</string>
-       <key>CFBundleVersion</key>
-       <string>2.0.1</string>
-       <key>DTCompiler</key>
-       <string>com.apple.compilers.llvm.clang.1_0</string>
-       <key>DTPlatformBuild</key>
-       <string>4G2008a</string>
-       <key>DTPlatformVersion</key>
-       <string>GM</string>
-       <key>DTSDKBuild</key>
-       <string>12C37</string>
-       <key>DTSDKName</key>
-       <string>macosx10.8</string>
-       <key>DTXcode</key>
-       <string>0452</string>
-       <key>DTXcodeBuild</key>
-       <string>4G2008a</string>
-       <key>NSPrincipalClass</key>
-       <string>GrowlApplicationBridge</string>
-</dict>
-</plist>
diff --git a/macosx/Growl.framework/Versions/Current b/macosx/Growl.framework/Versions/Current
deleted file mode 120000 (symlink)
index 8c7e5a6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-A
\ No newline at end of file
index d0b064a61ce50bab75f08f24649f99a83edee80c..833c0643a192e3cfc531556807189558803a1687 100644 (file)
@@ -69,7 +69,7 @@ typedef void (^HBPlayableObverser)(void);
             // The asset invokes its completion handler on an arbitrary queue when loading is complete.
             // Because we want to access our AVPlayer in our ensuing set-up, we must dispatch our handler to the main queue.
             dispatch_async(dispatch_get_main_queue(), ^(void) {
-                [self _setUpPlaybackOfAsset:_movie withKeys:assetKeysToLoadAndTest];
+                [self _setUpPlaybackOfAsset:self->_movie withKeys:assetKeysToLoadAndTest];
             });
 
         }];
index 41de5033063ace49c52f331426e3f4d27fe4b673..dd85ea4d7532dba23b9142f797c222f430db90b6 100644 (file)
@@ -52,8 +52,7 @@
 
 - (IBAction)dismiss:(id)sender
 {
-    [self.window orderOut:nil];
-    [NSApp endSheet:self.window returnCode:NSModalResponseCancel];
+    [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseCancel];
 }
 
 - (IBAction)create:(id)sender
@@ -61,8 +60,7 @@
     self.category = [[HBPreset alloc] initWithCategoryName:self.name.stringValue builtIn:NO];
     [self.manager addPreset:self.category];
 
-    [self.window orderOut:nil];
-    [NSApp endSheet:self.window returnCode:NSModalResponseOK];
+    [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseOK];
 }
 
 
index 7fc0af0a5052398d284a7bfd70ff5e0fea278383..d100a330e3e5816e9e077911af32f3e2cd094020 100644 (file)
@@ -142,21 +142,16 @@ typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) {
 {
     HBAddCategoryController *addCategoryController = [[HBAddCategoryController alloc] initWithPresetManager:self.manager];
 
-    [NSApp beginSheet:addCategoryController.window modalForWindow:self.window modalDelegate:self didEndSelector:@selector(categorySheetDidEnd:returnCode:contextInfo:) contextInfo:(void *)CFBridgingRetain(addCategoryController)];
-}
-
-- (void)categorySheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
-{
-    HBAddCategoryController *addCategoryController = (HBAddCategoryController *)CFBridgingRelease(contextInfo);
-
-    if (returnCode == NSModalResponseOK)
-    {
-        NSMenuItem *item = [self buildMenuItemWithCategory:addCategoryController.category];
-        [self.categories.menu insertItem:item atIndex:2];
-    }
+    [self.window beginSheet:addCategoryController.window completionHandler:^(NSModalResponse returnCode) {
+        if (returnCode == NSModalResponseOK)
+        {
+            NSMenuItem *item = [self buildMenuItemWithCategory:addCategoryController.category];
+            [self.categories.menu insertItem:item atIndex:2];
+        }
 
-    [self.categories selectItemWithTag:2];
-    [self selectCategoryFromMenu:self.categories.selectedItem];
+        [self.categories selectItemWithTag:2];
+        [self selectCategoryFromMenu:self.categories.selectedItem];
+    }];
 }
 
 - (IBAction)selectCategoryFromMenu:(NSMenuItem *)sender
@@ -183,11 +178,13 @@ typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) {
 
     self.defaultsController = [[HBAudioDefaultsController alloc] initWithSettings:defaults];
 
-    [NSApp beginSheet:self.defaultsController.window
-       modalForWindow:self.window
-        modalDelegate:self
-       didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
-          contextInfo:(void *)CFBridgingRetain(defaults)];
+    [self.window beginSheet:self.defaultsController.window completionHandler:^(NSModalResponse returnCode) {
+        if (returnCode == NSModalResponseOK)
+        {
+            [defaults writeToPreset:self.mutablePreset];
+        }
+        self.defaultsController = nil;
+    }];
 }
 
 - (IBAction)showSubtitlesSettingsSheet:(id)sender
@@ -197,22 +194,13 @@ typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) {
 
     self.defaultsController = [[HBSubtitlesDefaultsController alloc] initWithSettings:defaults];
 
-    [NSApp beginSheet:self.defaultsController.window
-       modalForWindow:self.window
-        modalDelegate:self
-       didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
-          contextInfo:(void *)CFBridgingRetain(defaults)];
-}
-
-- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
-{
-    id defaults = (id)CFBridgingRelease(contextInfo);
-
-    if (returnCode == NSModalResponseOK)
-    {
-        [defaults writeToPreset:self.mutablePreset];
-    }
-    self.defaultsController = nil;
+    [self.window beginSheet:self.defaultsController.window completionHandler:^(NSModalResponse returnCode) {
+        if (returnCode == NSModalResponseOK)
+        {
+            [defaults writeToPreset:self.mutablePreset];
+        }
+        self.defaultsController = nil;
+    }];
 }
 
 - (IBAction)add:(id)sender
@@ -254,15 +242,13 @@ typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) {
         self.preset = [newPreset copy];
         [self.selectedCategory insertObject:self.preset inChildrenAtIndex:self.selectedCategory.countOfChildren];
 
-        [self.window orderOut:nil];
-        [NSApp endSheet:self.window returnCode:NSModalResponseContinue];
+        [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseOK];
     }
 }
 
 - (IBAction)cancel:(id)sender
 {
-    [self.window orderOut:nil];
-    [NSApp endSheet:self.window returnCode:NSModalResponseAbort];
+    [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseCancel];
 }
 
 - (IBAction)openUserGuide:(id)sender
index ad93c1cc717cb4da8bca0f042924754aa9a9e48e..b8072ca7897487d33b044be1dfb731f11a4ffd1e 100644 (file)
@@ -62,9 +62,6 @@
         _queueController = [[HBQueueController alloc] initWithURL:[appSupportURL URLByAppendingPathComponent:QUEUE_FILE]];
         _queueController.delegate = self;
         _mainController = [[HBController alloc] initWithQueue:_queueController presetsManager:_presetsManager];
-
-        // Set the Growl Delegate
-        [GrowlApplicationBridge setGrowlDelegate:_queueController];
     }
     return self;
 }
index 1223621b4e5cb6b72eff11b285dd77d148b8d04a..dcd934030b22f3168729cad79dcf642576bdf6b6 100644 (file)
@@ -7,7 +7,7 @@
 #import "HBApplication.h"
 #import "HBExceptionAlertController.h"
 
-@import HandBrakeKit.HBUtilities;
+@import HandBrakeKit;
 
 @implementation HBApplication
 
index 9432e943e23783e4287e930c44017312fc26fac1..66a8d2a8a3ff532e9998c624bfe0ee507ade42f7 100644 (file)
@@ -7,8 +7,7 @@
 #import "HBAudioController.h"
 #import "HBAudioDefaultsController.h"
 
-@import HandBrakeKit.HBAudio;
-@import HandBrakeKit.HBAudioDefaults;
+@import HandBrakeKit;
 
 @interface HBAudioController ()
 
     HBAudioDefaults *defaults = [self.audio.defaults copy];
     self.defaultsController = [[HBAudioDefaultsController alloc] initWithSettings:defaults];
 
-       [NSApp beginSheet:self.defaultsController.window
-       modalForWindow:self.view.window
-        modalDelegate:self
-       didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
-          contextInfo:(void *)CFBridgingRetain(defaults)];
-}
-
-- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
-{
-    HBAudioDefaults *defaults = (HBAudioDefaults *)CFBridgingRelease(contextInfo);
-
-    if (returnCode == NSModalResponseOK)
-    {
-        self.audio.defaults = defaults;
-    }
-    self.defaultsController = nil;
+    [self.view.window beginSheet:self.defaultsController.window completionHandler:^(NSModalResponse returnCode) {
+        if (returnCode == NSModalResponseOK)
+        {
+            self.audio.defaults = defaults;
+        }
+        self.defaultsController = nil;
+    }];
 }
 
 - (IBAction)reloadDefaults:(id)sender
index 023030ecfa6c84599890c1972611e4a7bfbd8e04..88788e63b7111a29281483957da24a2d467c5ab6 100644 (file)
@@ -7,7 +7,7 @@
 #import "HBAudioDefaultsController.h"
 #import "HBLanguagesSelection.h"
 
-@import HandBrakeKit.HBAudioDefaults;
+@import HandBrakeKit;
 
 static void *HBAudioDefaultsContext = &HBAudioDefaultsContext;
 
@@ -87,14 +87,12 @@ static void *HBAudioDefaultsContext = &HBAudioDefaultsContext;
 - (IBAction)ok:(id)sender
 {
     self.settings.trackSelectionLanguages = [self.languagesList.selectedLanguages mutableCopy];
-    [self.window orderOut:nil];
-    [NSApp endSheet:self.window returnCode:NSModalResponseOK];
+    [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseOK];
 }
 
 - (IBAction)cancel:(id)sender
 {
-    [self.window orderOut:nil];
-    [NSApp endSheet:self.window returnCode:NSModalResponseCancel];
+    [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseCancel];
 }
 
 - (IBAction)openUserGuide:(id)sender
index c880e08aa6bc500546dd05c0206962bdc70b4800..8635720ea0c4b2bc7fcdb3608fbadebae93c761b 100644 (file)
 #define decodeInteger(x) x = [decoder decodeIntegerForKey:OBJC_STRINGIFY(x)]
 #define decodeBool(x) x = [decoder decodeBoolForKey:OBJC_STRINGIFY(x)]
 #define decodeDouble(x) x = [decoder decodeDoubleForKey:OBJC_STRINGIFY(x)]
-#define decodeObject(x, cl) x = [HBCodingUtilities decodeObjectOfClass:[cl class] forKey:OBJC_STRINGIFY(x) decoder:decoder];
+#define decodeObject(x, cl) x = [decoder decodeObjectOfClass:[cl class] forKey:OBJC_STRINGIFY(x)];
 
-#define decodeCollectionOfObjects(x, cl, objectcl) x = [HBCodingUtilities decodeObjectOfClasses:[NSSet setWithObjects:[cl class], [objectcl class], nil] forKey:OBJC_STRINGIFY(x) decoder:decoder];
+#define decodeCollectionOfObjects(x, cl, objectcl) x = [decoder decodeObjectOfClasses:[NSSet setWithObjects:[cl class], [objectcl class], nil] forKey:OBJC_STRINGIFY(x)];
 
-#define decodeCollectionOfObjects2(x, cl, objectcl, objectcl2) x = [HBCodingUtilities decodeObjectOfClasses:[NSSet setWithObjects:[cl class], [objectcl class], [objectcl2 class], nil] forKey:OBJC_STRINGIFY(x) decoder:decoder];
+#define decodeCollectionOfObjects2(x, cl, objectcl, objectcl2) x = [decoder decodeObjectOfClasses:[NSSet setWithObjects:[cl class], [objectcl class], [objectcl2 class], nil] forKey:OBJC_STRINGIFY(x)];
 
-#define decodeCollectionOfObjects3(x, cl, objectcl, objectcl2, objectcl3) x = [HBCodingUtilities decodeObjectOfClasses:[NSSet setWithObjects:[cl class], [objectcl class], [objectcl2 class], [objectcl3 class], nil] forKey:OBJC_STRINGIFY(x) decoder:decoder];
+#define decodeCollectionOfObjects3(x, cl, objectcl, objectcl2, objectcl3) x = [decoder decodeObjectOfClasses:[NSSet setWithObjects:[cl class], [objectcl class], [objectcl2 class], [objectcl3 class], nil] forKey:OBJC_STRINGIFY(x)];
 
 
-#define decodeObjectOrFail(x, cl) x = [HBCodingUtilities decodeObjectOfClass:[cl class] forKey:OBJC_STRINGIFY(x) decoder:decoder]; if (x == nil) {NSLog(@"Failed to decode: %@", OBJC_STRINGIFY(x)); goto fail;}
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface HBCodingUtilities : NSObject
-
-/**
- *  Specify what the expected class of the allocated object is. If the coder responds YES to -requiresSecureCoding,
- *  then an exception will be thrown if the class to be decoded does not implement NSSecureCoding or is not isKindOfClass: of the argument.
- *  If the coder responds NO to -requiresSecureCoding, then the class argument is ignored
- *  and no check of the class of the decoded object is performed, exactly as if decodeObjectForKey: had been called.
- *
- *  if NSSecureCoding is not available on the system it check the class after loading the object.
- *
- *  @param aClass  The expect class type.
- *  @param key     The coder key.
- *  @param decoder The NSCoder.
- *
- *  @return the decoder object.
- */
-+ (nullable id)decodeObjectOfClass:(Class)aClass forKey:(NSString *)key decoder:(NSCoder *)decoder;
-
-
-+ (nullable id)decodeObjectOfClasses:(NSSet *)classes forKey:(NSString *)key decoder:(NSCoder *)decoder;
-
-@end
-
-NS_ASSUME_NONNULL_END
+#define decodeObjectOrFail(x, cl) x = [decoder decodeObjectOfClass:[cl class] forKey:OBJC_STRINGIFY(x)]; if (x == nil) {NSLog(@"Failed to decode: %@", OBJC_STRINGIFY(x)); goto fail;}
diff --git a/macosx/HBCodingUtilities.m b/macosx/HBCodingUtilities.m
deleted file mode 100644 (file)
index 80e245a..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-//
-//  HBCodingUtilities.m
-//  HandBrake
-//
-//  Created by Damiano Galassi on 22/04/15.
-//
-//
-
-#import "HBCodingUtilities.h"
-
-static BOOL useSecureCoding;
-
-@implementation HBCodingUtilities
-
-+ (void)initialize
-{
-    static BOOL initialized = NO;
-
-    if (!initialized && self == [HBCodingUtilities class])
-    {
-        useSecureCoding = [NSCoder instancesRespondToSelector:@selector(decodeObjectOfClass:forKey:)] ? YES : NO;
-    }
-}
-
-+ (id)decodeObjectOfClass:(Class)aClass forKey:(NSString *)key decoder:(NSCoder *)decoder
-{
-    if (useSecureCoding)
-    {
-        return [decoder decodeObjectOfClass:aClass forKey:key];
-    }
-    else
-    {
-        id obj = [decoder decodeObjectForKey:key];
-        if (![obj isKindOfClass:aClass])
-        {
-            return nil;
-        }
-        else
-        {
-            return obj;
-        }
-    }
-}
-
-+ (id)decodeObjectOfClasses:(NSSet *)classes forKey:(NSString *)key decoder:(NSCoder *)decoder
-{
-    if (useSecureCoding)
-    {
-        return [decoder decodeObjectOfClasses:classes forKey:key];
-    }
-    else
-    {
-        id obj = [decoder decodeObjectForKey:key];
-        return obj;
-    }
-}
-
-@end
index f650a5bf0759dad7ed42315f18ed650f96b06be8..c3a1eba688e3545fc0f583e0eaee4833803f3f87 100644 (file)
@@ -41,7 +41,6 @@
 - (IBAction)showRenamePresetPanel:(id)sender;
 - (IBAction)selectDefaultPreset:(id)sender;
 
-- (IBAction)renamePreset:(id)sender;
 - (IBAction)deletePreset:(id)sender;
 - (IBAction)reloadPreset:(id)sender;
 
index 15ea6bd07d4e05ffd03a24d7b3970ca376ae8955..12eb06d7b7fb0e5d3217d0437dfacbd31e306ab1 100644 (file)
 
         // Progress
         _progressInfo = @"";
-        if (NSAppKitVersionNumber < NSAppKitVersionNumber10_10)
-        {
-            _visible = YES;
-        }
 
         // Check to see if the last destination has been set, use if so, if not, use Movies
 #ifdef __SANDBOX_ENABLED__
     fPresetsView = [[HBPresetsViewController alloc] initWithPresetManager:presetManager];
     fPresetsView.delegate = self;
 
-    if (NSAppKitVersionNumber < NSAppKitVersionNumber10_10)
-    {
-        self.presetsDrawer = [[NSDrawer alloc] initWithContentSize:NSMakeSize(240, 550) preferredEdge:NSRectEdgeMaxX];
-        self.presetsDrawer.parentWindow = self.window;
-        self.presetsDrawer.delegate = self;
-        self.presetsDrawer.preferredEdge = NSRectEdgeMaxX;
-
-        // Set up the preset drawer
-        self.presetsDrawer.contentView = fPresetsView.view;
-        self.presetsDrawer.contentView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
-
-        NSSize drawerSize = NSSizeFromString([[NSUserDefaults standardUserDefaults]
-                                              stringForKey:@"HBDrawerSize"]);
-        if (drawerSize.width > 0)
-        {
-            self.presetsDrawer.contentSize = drawerSize;
-        }
-
-        // Show/Hide the Presets drawer upon launch based
-        // on user preference DefaultPresetsDrawerShow
-        if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HBDefaultPresetsDrawerShow"])
-        {
-            [self.presetsDrawer open:self];
-        }
-    }
-    else
-    {
-        fPresetsView.showHeader = YES;
+    fPresetsView.showHeader = YES;
 
-        // Set up the presets popover
-        self.presetsPopover = [[NSPopover alloc] init];
+    // Set up the presets popover
+    self.presetsPopover = [[NSPopover alloc] init];
 
-        self.presetsPopover.contentViewController = fPresetsView;
-        self.presetsPopover.contentSize = NSMakeSize(280, 580);
-        self.presetsPopover.animates = YES;
+    self.presetsPopover.contentViewController = fPresetsView;
+    self.presetsPopover.contentSize = NSMakeSize(280, 580);
+    self.presetsPopover.animates = YES;
 
-        // AppKit will close the popover when the user interacts with a user interface element outside the popover.
-        // note that interacting with menus or panels that become key only when needed will not cause a transient popover to close.
-        self.presetsPopover.behavior = NSPopoverBehaviorSemitransient;
-        self.presetsPopover.delegate = self;
+    // AppKit will close the popover when the user interacts with a user interface element outside the popover.
+    // note that interacting with menus or panels that become key only when needed will not cause a transient popover to close.
+    self.presetsPopover.behavior = NSPopoverBehaviorSemitransient;
+    self.presetsPopover.delegate = self;
 
-        [fPresetsView loadView];
-    }
+    [fPresetsView loadView];
 
     // Set up the summary view
     self.summaryController = [[HBSummaryViewController alloc] init];
     {
         return self.job != nil;
     }
-    if (action == @selector(renamePreset:) ||
-        action == @selector(deletePreset:) ||
+    if (action == @selector(deletePreset:) ||
         action == @selector(setDefaultPreset:))
     {
         return self.job != nil && self.edited == NO;//fixme
                   previews:hb_num_previews minDuration:min_title_duration_seconds
            progressHandler:^(HBState state, HBProgress progress, NSString *info)
          {
-             fSrcDVD2Field.stringValue = info;
-             fScanIndicator.hidden = NO;
-             fScanHorizontalLine.hidden = YES;
-             fScanIndicator.doubleValue = progress.percent;
+             self->fSrcDVD2Field.stringValue = info;
+             self->fScanIndicator.hidden = NO;
+             self->fScanHorizontalLine.hidden = YES;
+             self->fScanIndicator.doubleValue = progress.percent;
          }
          completionHandler:^(HBCoreResult result)
          {
-             fScanHorizontalLine.hidden = NO;
-             fScanIndicator.hidden = YES;
-             fScanIndicator.indeterminate = NO;
-             fScanIndicator.doubleValue = 0.0;
+             self->fScanHorizontalLine.hidden = NO;
+             self->fScanIndicator.hidden = YES;
+             self->fScanIndicator.indeterminate = NO;
+             self->fScanIndicator.doubleValue = 0.0;
 
              if (result == HBCoreResultDone)
              {
                  for (HBTitle *title in self.core.titles)
                  {
-                     [fSrcTitlePopUp addItemWithTitle:title.description];
+                     [self->fSrcTitlePopUp addItemWithTitle:title.description];
                  }
                  self.window.representedURL = mediaURL;
                  self.window.title = mediaURL.lastPathComponent;
              else
              {
                  // We display a message if a valid source was not chosen
-                 fSrcDVD2Field.stringValue = NSLocalizedString(@"No Valid Source Found", @"");
+                 self->fSrcDVD2Field.stringValue = NSLocalizedString(@"No Valid Source Found", @"");
              }
 
              // Set the last searched source directory in the prefs here
 
 /**
  Check if the job destination if a valid one,
- if so, call the didEndSelector
- Note: rework this to use a block in the future
-
+ if so, call the handler
  @param job the job
- @param didEndSelector the selector to call if the check is successful
+ @param completionHandler the block to call if the check is successful
  */
-- (void)runDestinationAlerts:(HBJob *)job didEndSelector:(SEL)didEndSelector
+- (void)runDestinationAlerts:(HBJob *)job completionHandler:(void (^ __nullable)(NSModalResponse returnCode))handler
 {
     if ([[NSFileManager defaultManager] fileExistsAtPath:job.outputURL.path] == 0)
     {
         NSAlert *alert = [[NSAlert alloc] init];
         [alert setMessageText:NSLocalizedString(@"Warning!", @"")];
         [alert setInformativeText:NSLocalizedString(@"This is not a valid destination directory!", @"")];
-        [alert beginSheetModalForWindow:self.window modalDelegate:self didEndSelector:didEndSelector contextInfo:NULL];
+        [alert beginSheetModalForWindow:self.window completionHandler:handler];
     }
     else if ([job.fileURL isEqual:job.completeOutputURL])
     {
         NSAlert *alert = [[NSAlert alloc] init];
         [alert setMessageText:NSLocalizedString(@"A file already exists at the selected destination.", @"")];
         [alert setInformativeText:NSLocalizedString(@"The destination is the same as the source, you can not overwrite your source file!", @"")];
-        [alert beginSheetModalForWindow:self.window modalDelegate:self didEndSelector:didEndSelector contextInfo:NULL];
+        [alert beginSheetModalForWindow:self.window completionHandler:handler];
     }
     else if ([[NSFileManager defaultManager] fileExistsAtPath:job.completeOutputURL.path])
     {
         [alert addButtonWithTitle:NSLocalizedString(@"Overwrite", @"")];
         [alert setAlertStyle:NSCriticalAlertStyle];
 
-        [alert beginSheetModalForWindow:self.window modalDelegate:self didEndSelector:didEndSelector contextInfo:NULL];
+        [alert beginSheetModalForWindow:self.window completionHandler:handler];
     }
     else if ([fQueueController jobExistAtURL:job.completeOutputURL])
     {
         [alert addButtonWithTitle:NSLocalizedString(@"Overwrite", @"")];
         [alert setAlertStyle:NSCriticalAlertStyle];
 
-        [alert beginSheetModalForWindow:self.window modalDelegate:self didEndSelector:didEndSelector contextInfo:NULL];
+        [alert beginSheetModalForWindow:self.window completionHandler:handler];
     }
     else
     {
-        NSInteger returnCode = NSAlertSecondButtonReturn;
-        NSMethodSignature *methodSignature = [self methodSignatureForSelector:didEndSelector];
-        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
-        [invocation setTarget:self];
-        [invocation setSelector:didEndSelector];
-        [invocation setArgument:&returnCode atIndex:3];
-        [invocation invoke];
+        handler(NSAlertSecondButtonReturn);
     }
 }
 
 {
     if ([self.window HB_endEditing])
     {
-        [self runDestinationAlerts:self.job
-                    didEndSelector:@selector(overwriteAddToQueueAlertDone:returnCode:contextInfo:)];
-    }
-}
-
-/**
- * Called from the alert posted by addToQueue
- * that asks the user if they want to overwrite an exiting movie file.
- */
-- (void)overwriteAddToQueueAlertDone:(NSAlert *)alert
-                          returnCode:(NSInteger)returnCode
-                         contextInfo:(void *)contextInfo
-{
-    if (returnCode == NSAlertSecondButtonReturn)
-    {
-        [self doAddToQueue];
+        [self runDestinationAlerts:self.job completionHandler:^(NSModalResponse returnCode) {
+            if (returnCode == NSAlertSecondButtonReturn)
+            {
+                [self doAddToQueue];
+            }
+        }];
     }
 }
 
     {
         if ([self.window HB_endEditing])
         {
-            [self runDestinationAlerts:self.job
-                        didEndSelector:@selector(overWriteAlertDone:returnCode:contextInfo:)];
+            [self runDestinationAlerts:self.job completionHandler:^(NSModalResponse returnCode) {
+                if (returnCode == NSAlertSecondButtonReturn)
+                {
+                    [self doRip];
+                }
+            }];
         }
     }
 }
 
-/**
- * overWriteAlertDone: called from the alert posted by Rip: that asks the user if they
- * want to overwrite an exiting movie file.
- */
-- (void)overWriteAlertDone:(NSAlert *)alert
-                returnCode:(NSInteger)returnCode
-               contextInfo:(void *)contextInfo
-{
-    if (returnCode == NSAlertSecondButtonReturn)
-    {
-        [self doRip];
-    }
-}
-
 - (IBAction)pause:(id)sender
 {
     [fQueueController togglePauseResume:sender];
                                                                              presetName:self.job.presetName
                                                                                delegate:self];
 
-    [NSApp beginSheet:self.titlesSelectionController.window
-       modalForWindow:self.window
-        modalDelegate:nil
-       didEndSelector:NULL
-          contextInfo:NULL];
+    [self.window beginSheet:self.titlesSelectionController.window completionHandler:nil];
 }
 
 - (void)didSelectTitles:(NSArray<HBTitle *> *)titles
 {
-    [self.titlesSelectionController.window orderOut:nil];
-    [NSApp endSheet:self.titlesSelectionController.window];
+    [self.window endSheet:self.titlesSelectionController.window];
 
     [self doAddTitlesToQueue:titles];
 }
         NSAlert *alert = [[NSAlert alloc] init];
         [alert setMessageText:NSLocalizedString(@"A file already exists at the selected destination.", @"")];
         [alert setInformativeText:NSLocalizedString(@"The destination is the same as the source, you can not overwrite your source file!", @"")];
-        [alert beginSheetModalForWindow:self.window modalDelegate:self didEndSelector:@selector(overwriteAddTitlesToQueueAlertDone:returnCode:contextInfo:) contextInfo:NULL];
+        [alert beginSheetModalForWindow:self.window completionHandler:nil];
     }
     else if (fileExists)
     {
         [alert addButtonWithTitle:NSLocalizedString(@"Overwrite", nil)];
         [alert setAlertStyle:NSCriticalAlertStyle];
 
-        [alert beginSheetModalForWindow:self.window modalDelegate:self didEndSelector:@selector(overwriteAddTitlesToQueueAlertDone:returnCode:contextInfo:) contextInfo:(void *)CFBridgingRetain(jobs)];
+        [alert beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse returnCode) {
+            if (returnCode == NSAlertSecondButtonReturn)
+            {
+                [self->fQueueController addJobsFromArray:jobs];
+            }
+        }];
     }
     else
     {
     }
 }
 
-- (void)overwriteAddTitlesToQueueAlertDone:(NSAlert *)alert
-                                returnCode:(NSInteger)returnCode
-                               contextInfo:(void *)contextInfo
-{
-    if (returnCode == NSAlertSecondButtonReturn)
-    {
-        NSArray *jobs = CFBridgingRelease(contextInfo);
-        [fQueueController addJobsFromArray:jobs];
-    }
-}
-
 - (IBAction)addAllTitlesToQueue:(id)sender
 {
     [self doAddTitlesToQueue:self.core.titles];
                                                                                   customHeight:self.job.picture.height
                                                                                defaultToCustom:defaultToCustom];
 
-    [NSApp beginSheet:addPresetController.window modalForWindow:self.window modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:(void *)CFBridgingRetain(addPresetController)];
-}
-
-- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
-{
-    __unused HBAddPresetController *addPresetController = (HBAddPresetController *)CFBridgingRelease(contextInfo);
-
-    if (returnCode == NSModalResponseContinue)
-    {
-        fPresetsView.selectedPreset = addPresetController.preset;
-        [self applyPreset:fPresetsView.selectedPreset];
-        [[NSNotificationCenter defaultCenter] postNotificationName:HBPresetsChangedNotification object:nil];
-    }
+    [self.window beginSheet:addPresetController.window completionHandler:^(NSModalResponse returnCode) {
+        if (returnCode == NSModalResponseOK)
+        {
+            self->fPresetsView.selectedPreset = addPresetController.preset;
+            [self applyPreset:self->fPresetsView.selectedPreset];
+            [[NSNotificationCenter defaultCenter] postNotificationName:HBPresetsChangedNotification object:nil];
+        }
+    }];
 }
 
 - (HBPreset *)createPresetFromCurrentSettings
     [self.window HB_endEditing];
     fPresetsView.selectedPreset = _currentPreset;
 
-    HBRenamePresetController *renamePresetController = [[HBRenamePresetController alloc] initWithPreset:self.currentPreset
+    __block HBRenamePresetController *renamePresetController = [[HBRenamePresetController alloc] initWithPreset:self.currentPreset
                                                                                           presetManager:presetManager];
-
-    [NSApp beginSheet:renamePresetController.window modalForWindow:self.window modalDelegate:self didEndSelector:@selector(renamePresetSheetDidEnd:returnCode:contextInfo:) contextInfo:(void *)CFBridgingRetain(renamePresetController)];
-}
-
-- (void)renamePresetSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
-{
-    __unused HBRenamePresetController *renamePresetController = (HBRenamePresetController *)CFBridgingRelease(contextInfo);
-
-    if (returnCode == NSModalResponseContinue)
-    {
-        [self applyPreset:fPresetsView.selectedPreset];
-        [[NSNotificationCenter defaultCenter] postNotificationName:HBPresetsChangedNotification object:nil];
-    }
+    [self.window beginSheet:renamePresetController.window completionHandler:^(NSModalResponse returnCode) {
+        if (returnCode == NSModalResponseOK)
+        {
+            [self applyPreset:self->fPresetsView.selectedPreset];
+            [[NSNotificationCenter defaultCenter] postNotificationName:HBPresetsChangedNotification object:nil];
+        }
+        renamePresetController = nil;
+    }];
 }
 
 #pragma mark -
index 160975adac19e009e72c5fe01f39eea72a060420..6c259e25a00836273d9480abb68fc0961910f9ae 100644 (file)
@@ -274,7 +274,7 @@ typedef void (^HBCoreCleanupHandler)(void);
 
     [self preventAutoSleep];
 
-    hb_scan(_hb_handle, url.path.fileSystemRepresentation,
+    hb_scan(_hb_handle, url.fileSystemRepresentation,
             (int)index, (int)previewsNum,
             1, min_title_duration_ticks);
 
@@ -422,7 +422,7 @@ typedef void (^HBCoreCleanupHandler)(void);
 
     // Add the job to libhb
     hb_job_t *hb_job = job.hb_job;
-    hb_job_set_file(hb_job, job.completeOutputURL.path.fileSystemRepresentation);
+    hb_job_set_file(hb_job, job.completeOutputURL.fileSystemRepresentation);
     hb_add(_hb_handle, hb_job);
 
     // Free the job
@@ -526,7 +526,6 @@ typedef void (^HBCoreCleanupHandler)(void);
     if (self.updateTimer)
     {
         dispatch_source_cancel(self.updateTimer);
-        dispatch_release(self.updateTimer);
         self.updateTimer = NULL;
     }
 }
index 77139d6ec1c738543e9c7cc40de89b5cfd555898..83b960b97940cc048476c4cd92744f8b860a24a7 100644 (file)
@@ -6,7 +6,7 @@
 
 #import "HBFiltersViewController.h"
 
-@import HandBrakeKit.HBFilters;
+@import HandBrakeKit;
 
 @interface HBFiltersViewController ()
 
diff --git a/macosx/HBHUDButtonCell.h b/macosx/HBHUDButtonCell.h
deleted file mode 100644 (file)
index 3f0c6e5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*  HBHUDButtonCell.h $
-
- This file is part of the HandBrake source code.
- Homepage: <http://handbrake.fr/>.
- It may be used under the terms of the GNU General Public License. */
-
-#import <Cocoa/Cocoa.h>
-
-/**
- *  A subclass of NSButtonCell that draws the cell title
- *  in white.
- */
-@interface HBHUDButtonCell : NSButtonCell
-
-@end
diff --git a/macosx/HBHUDButtonCell.m b/macosx/HBHUDButtonCell.m
deleted file mode 100644 (file)
index a5e4119..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*  HBHUDButtonCell.m $
-
- This file is part of the HandBrake source code.
- Homepage: <http://handbrake.fr/>.
- It may be used under the terms of the GNU General Public License. */
-
-#import "HBHUDButtonCell.h"
-
-@implementation HBHUDButtonCell
-
-- (NSRect)drawTitle:(NSAttributedString *)title withFrame:(NSRect)frame inView:(NSView *)controlView
-{
-    NSAttributedString *attrLabel = title;
-
-    if (!NSClassFromString(@"NSVisualEffectView"))
-    {
-        attrLabel = [[NSAttributedString alloc] initWithString:[title string]
-                                                                    attributes:@{ NSFontAttributeName:[NSFont systemFontOfSize:[NSFont systemFontSizeForControlSize:self.controlSize]],
-                                                                                  NSForegroundColorAttributeName: [NSColor whiteColor]}];
-    }
-
-    return [super drawTitle:attrLabel withFrame:frame inView:controlView];
-}
-
-@end
index 0ea5f31120cf5f5b5971aa785f9c5cf9b82baccf..b453ae3743c6121b8fc5d25f16271e63eaa3c44c 100644 (file)
@@ -9,5 +9,5 @@
 /**
  *  The HBHUDView class implements simple views that can draw the background in the HUD style.
  */
-@interface HBHUDView : NSView
+@interface HBHUDView : NSVisualEffectView
 @end
index 1d6079d96f248b8feae85034ce5df8de75e04be8..a03eb427aadede35fa51b450286d53caff724102 100644 (file)
@@ -6,10 +6,7 @@
 
 #import "HBHUDView.h"
 
-@interface HBHUDVisualEffectsView : NSVisualEffectView
-@end
-
-@implementation HBHUDVisualEffectsView
+@implementation HBHUDView
 
 - (instancetype)initWithFrame:(NSRect)frame
 {
 }
 
 @end
-
-@implementation HBHUDView
-
-- (instancetype)initWithFrame:(NSRect)frame
-{
-    if (NSClassFromString(@"NSVisualEffectView"))
-    {
-        // If NSVisualEffectView class is loaded
-        // release ourself and return a NSVisualEffectView instance instead.
-        self = (HBHUDView *)[[HBHUDVisualEffectsView alloc] initWithFrame:frame];
-    }
-    else
-    {
-        self = [super initWithFrame:frame];
-    }
-
-    return self;
-}
-
-- (BOOL)acceptsFirstResponder
-{
-    return YES;
-}
-
-- (void)drawRect:(NSRect)dirtyRect
-{
-    NSGraphicsContext  *theContext = [NSGraphicsContext currentContext];
-    [theContext saveGraphicsState];
-
-    NSRect rect = NSMakeRect(0.0, 0.0, self.frame.size.width, self.frame.size.height);
-
-    // Draw a standard HUD with black transparent background and white border.
-    [[NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.6] setFill];
-    [[NSBezierPath bezierPathWithRoundedRect:NSInsetRect(rect, 1, 1) xRadius:14.0 yRadius:14.0] fill];
-
-    [[NSColor whiteColor] setStroke];
-    [NSBezierPath setDefaultLineWidth:2.0];
-    [[NSBezierPath bezierPathWithRoundedRect:NSInsetRect(rect, 1, 1) xRadius:14.0 yRadius:14.0] stroke];
-
-    [theContext restoreGraphicsState];
-}
-
-@end
\ No newline at end of file
index 9895a3adcca5f199a554da6faf98ca4d7a6c8aa2..ecef901e08b93dfc50459598843421784addd7fd 100644 (file)
@@ -39,7 +39,7 @@
     hb_title_t *title = self.title.hb_title;
     hb_job_t *job = hb_job_init(title);
 
-    hb_job_set_file(job, self.completeOutputURL.path.fileSystemRepresentation);
+    hb_job_set_file(job, self.completeOutputURL.fileSystemRepresentation);
 
     // Title Angle for dvdnav
     job->angle = self.angle;
                     sub_config.offset = subTrack.offset;
 
                     // we need to strncpy file name and codeset
-                    strncpy(sub_config.src_filename, subTrack.fileURL.path.fileSystemRepresentation, 255);
+                    strncpy(sub_config.src_filename, subTrack.fileURL.fileSystemRepresentation, 255);
                     sub_config.src_filename[255] = 0;
                     strncpy(sub_config.src_codeset, subTrack.charCode.UTF8String, 39);
                     sub_config.src_codeset[39] = 0;
index 1644a7fcfbcb719a8e07e44ef5839c645414d8ee..09193a8475e66211b2b3e89e6c645a28c77833c7 100644 (file)
@@ -426,7 +426,7 @@ NSString *HBChaptersChangedNotification  = @"HBChaptersChangedNotification";
         decodeObjectOrFail(_uuid, NSString);
 
 #ifdef __SANDBOX_ENABLED__
-        _fileURLBookmark = [HBCodingUtilities decodeObjectOfClass:[NSData class] forKey:@"_fileURLBookmark" decoder:decoder];
+        _fileURLBookmark = [decoder decodeObjectOfClass:[NSData class] forKey:@"_fileURLBookmark"];
 
         if (_fileURLBookmark)
         {
@@ -438,7 +438,7 @@ NSString *HBChaptersChangedNotification  = @"HBChaptersChangedNotification";
             decodeObjectOrFail(_fileURL, NSURL);
         }
 
-        _outputURLFolderBookmark = [HBCodingUtilities decodeObjectOfClass:[NSData class] forKey:@"_outputURLFolderBookmark" decoder:decoder];
+        _outputURLFolderBookmark = [decoder decodeObjectOfClass:[NSData class] forKey:@"_outputURLFolderBookmark"];
 
         if (_outputURLFolderBookmark)
         {
index fffe9478b67e0844b1cc447af069f33434503962..cbd4e9977ace5b7b9a830649aa44af34f0f7b312 100644 (file)
@@ -10,6 +10,7 @@
 @implementation HBOutputFileWriter
 {
     FILE *f;
+    NSDateFormatter *_formatter;
 }
 
 - (nullable instancetype)initWithFileURL:(NSURL *)url;
@@ -31,7 +32,7 @@
 
         _url = [url copy];
 
-        f = fopen(url.path.fileSystemRepresentation, "w");
+        f = fopen(url.fileSystemRepresentation, "w");
         if (!f)
         {
             return nil;
             return nil;
         }
 
+        _formatter = [[NSDateFormatter alloc] init];
+        _formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
+        _formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZZZZZ";
+        _formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
+
         [self writeHeaderForReason:@"Session"];
     }
 
@@ -58,7 +64,7 @@
 {
     [self write:[NSString stringWithFormat:@"HandBrake Activity Log for %@: %@\n%@\n",
                  reason,
-                 [[NSDate date] descriptionWithCalendarFormat:nil timeZone:nil locale:nil],
+                 [_formatter stringFromDate:[NSDate date]],
                  [HBUtilities handBrakeVersion]]];
 }
 
index 0014f687af94044ee93d5aba855b31977e8ba594..fc0eb195a82572a3d27545425d57245b660c422c 100644 (file)
@@ -6,8 +6,7 @@
 
 #import "HBPictureController.h"
 
-@import HandBrakeKit.HBFilters;
-@import HandBrakeKit.HBPicture;
+@import HandBrakeKit;
 
 static void *HBPictureControllerContext = &HBPictureControllerContext;
 
index d7a686a7bd1506a957526c88c3213f8e4803063f..52beb8013ef74d79a9fd4bdcd02395eb3ed44594 100644 (file)
@@ -6,7 +6,7 @@
 
 #import "HBPictureViewController.h"
 
-@import HandBrakeKit.HBPicture;
+@import HandBrakeKit;
 
 static void *HBPictureViewControllerContext = &HBPictureViewControllerContext;
 
index 3524f79e3137f8b47528d42eaea5d993f56e5ea4..98ab96fa50e1e6ad6c78e1ffeb4c5abcaaf1b1fd 100644 (file)
 {
     [super loadView];
 
-    if (NSClassFromString(@"NSVisualEffectView") == NO)
-    {
-        self.currentTimeLabel.textColor = [NSColor whiteColor];
-        self.remaingTimeLabel.textColor = [NSColor whiteColor];
-    }
-
     if ([[NSFont class] respondsToSelector:@selector(monospacedDigitSystemFontOfSize:weight:)]) {
         _monospacedAttr = @{NSFontAttributeName: [NSFont monospacedDigitSystemFontOfSize:[NSFont smallSystemFontSize] weight:NSFontWeightRegular]};
     }
index 18bb86257504473aca2255b88e2c863c41036682..2141b0f548e256b27ed97cf68574bd5321200846 100644 (file)
     [panel setDirectoryURL:[NSURL fileURLWithPath:sendToAppDirectory]];
 
     [panel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result) {
-        if (result == NSOKButton)
+        if (result == NSModalResponseOK)
         {
             NSURL *sendToAppURL = [panel URL];
             NSURL *sendToAppDirectoryURL = [sendToAppURL URLByDeletingLastPathComponent];
 
             // We set the name of the app to send to in the display field
             NSString *sendToAppName = [[sendToAppURL lastPathComponent] stringByDeletingPathExtension];
-            [fSendEncodeToAppField setStringValue:sendToAppName];
+            [self->fSendEncodeToAppField setStringValue:sendToAppName];
 
-            [[NSUserDefaults standardUserDefaults] setObject:[fSendEncodeToAppField stringValue] forKey:@"HBSendToApp"];
+            [[NSUserDefaults standardUserDefaults] setObject:self->fSendEncodeToAppField.stringValue forKey:@"HBSendToApp"];
         }
     }];
 }
index 95688424fcfc7c04e332767cbb9fcabd16c578de..0c1a8abe73fc06706d0073561db9236c1a4a4ac2 100644 (file)
@@ -224,21 +224,7 @@ static void *HBPresetsViewControllerContext = &HBPresetsViewControllerContext;
     _showHeader = showHeader;
 
     self.headerLabel.hidden = !showHeader;
-    if (NSAppKitVersionNumber < NSAppKitVersionNumber10_10)
-    {
-        if (showHeader)
-        {
-            [self.view addConstraint:self.headerBottomConstraint];
-        }
-        else
-        {
-            [self.view removeConstraint:self.headerBottomConstraint];
-        }
-    }
-    else
-    {
-        self.headerBottomConstraint.active = showHeader;
-    }
+    self.headerBottomConstraint.active = showHeader;
 }
 
 - (IBAction)clicked:(id)sender
@@ -270,17 +256,17 @@ static void *HBPresetsViewControllerContext = &HBPresetsViewControllerContext;
 {
     if ([self.treeController canRemove])
     {
-        /* Alert user before deleting preset */
-        NSAlert *alert = [NSAlert alertWithMessageText:NSLocalizedString(@"Are you sure you want to permanently delete the selected preset?", nil)
-                                         defaultButton:NSLocalizedString(@"Delete Preset", nil)
-                                       alternateButton:NSLocalizedString(@"Cancel", nil)
-                                           otherButton:nil
-                             informativeTextWithFormat:NSLocalizedString(@"You can't undo this action.", nil)];
-        [alert setAlertStyle:NSCriticalAlertStyle];
+        // Alert user before deleting preset
+        NSAlert *alert = [NSAlert init];
+        alert.messageText = NSLocalizedString(@"Are you sure you want to permanently delete the selected preset?", nil);
+        alert.informativeText = NSLocalizedString(@"You can't undo this action.", nil);
+        [alert addButtonWithTitle:NSLocalizedString(@"Delete Preset", nil)];
+        [alert addButtonWithTitle:NSLocalizedString(@"Cancel", nil)];
+        alert.alertStyle = NSCriticalAlertStyle;
 
         NSInteger status = [alert runModal];
 
-        if (status == NSAlertDefaultReturn)
+        if (status == NSAlertFirstButtonReturn)
         {
             [self.presets deletePresetAtIndexPath:[self.treeController selectionIndexPath]];
             [self setSelection:self.presets.defaultPreset];
index d85cdc4d9397cb7954ff2fecb868764b24f87e97..fb0105f2308ad5d6db56aa2bfa026a4a49e90a2f 100644 (file)
@@ -12,7 +12,6 @@
 #import "HBPreviewView.h"
 
 #import "HBPlayer.h"
-#import "HBQTKitPlayer.h"
 #import "HBAVPlayer.h"
 
 #import "HBPictureHUDController.h"
 
 - (void)setUpPlaybackOfURL:(NSURL *)fileURL playerClass:(Class)class;
 {
-#if __HB_QTKIT_PLAYER_AVAILABLE
-    NSArray<Class> *availablePlayerClasses = @[[HBAVPlayer class], [HBQTKitPlayer class]];
-#else
     NSArray<Class> *availablePlayerClasses = @[[HBAVPlayer class]];
-#endif
 
     self.player = [[class alloc] initWithURL:fileURL];
 
diff --git a/macosx/HBQTKitPlayer.h b/macosx/HBQTKitPlayer.h
deleted file mode 100644 (file)
index d874736..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*  HBQTKitPlayer.h $
-
- This file is part of the HandBrake source code.
- Homepage: <http://handbrake.fr/>.
- It may be used under the terms of the GNU General Public License. */
-
-#import <Foundation/Foundation.h>
-#import <QuartzCore/QuartzCore.h>
-
-#import "HBPlayer.h"
-
-#if __MAC_OS_X_VERSION_MAX_ALLOWED < 101200
-    #define __HB_QTKIT_PLAYER_AVAILABLE 1
-#endif
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface HBQTKitPlayer : NSObject <HBPlayer>
-
-@property (nonatomic, readonly) CALayer *layer;
-
-@property (nonatomic, readonly) NSTimeInterval duration;
-@property (nonatomic) NSTimeInterval currentTime;
-
-@property (nonatomic) float rate;
-@property (nonatomic) float volume;
-
-@property (nonatomic, readonly, getter=isPlayable) BOOL playable;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/macosx/HBQTKitPlayer.m b/macosx/HBQTKitPlayer.m
deleted file mode 100644 (file)
index 6c46442..0000000
+++ /dev/null
@@ -1,402 +0,0 @@
-/*  HBQTKitPlayer.m $
-
- This file is part of the HandBrake source code.
- Homepage: <http://handbrake.fr/>.
- It may be used under the terms of the GNU General Public License. */
-
-#import "HBQTKitPlayer.h"
-
-#if __HB_QTKIT_PLAYER_AVAILABLE
-
-#import <QTKit/QTKit.h>
-
-@import HandBrakeKit;
-
-@interface QTTrack (HBAdditions)
-- (id)isoLanguageCodeAsString;
-@end
-
-typedef void (^HBPeriodicObverser)(NSTimeInterval time);
-typedef void (^HBRateObverser)(void);
-typedef void (^HBPlayableObverser)(void);
-
-@interface HBQTKitPlayerPeriodicObserver : NSObject
-
-@property (nonatomic, copy) HBPeriodicObverser block;
-
-- (void)postNotification:(NSTimeInterval)time;
-
-@end
-
-@implementation HBQTKitPlayerPeriodicObserver
-
-- (void)postNotification:(NSTimeInterval)time
-{
-    self.block(time);
-}
-
-@end
-
-@interface HBQTKitPlayerRateObserver : NSObject
-
-@property (nonatomic, copy) HBRateObverser block;
-
-- (void)postNotification;
-
-@end
-
-@implementation HBQTKitPlayerRateObserver
-
-- (void)postNotification;
-{
-    self.block();
-}
-
-@end
-
-@interface HBQTKitPlayer ()
-
-@property (nonatomic, strong) QTMovie *movie;
-@property (nonatomic, strong) NSTimer *timer;
-
-@property (nonatomic, readwrite, getter=isPlayable) BOOL playable;
-@property (nonatomic, readwrite, getter=isLoaded) BOOL loaded;
-
-@property (nonatomic, strong) NSMutableSet<HBQTKitPlayerPeriodicObserver *> *periodicObservers;
-@property (nonatomic, strong) NSMutableSet<HBQTKitPlayerRateObserver *> *rateObservers;
-
-@property (nonatomic, strong) NSMutableSet<HBPlayableObverser> *playableObservers;
-
-@end
-
-@implementation HBQTKitPlayer
-
-- (instancetype)initWithURL:(NSURL *)url
-{
-    self = [super init];
-
-    if (self)
-    {
-        NSError *outError;
-        NSDictionary *attributes = @{ QTMovieURLAttribute: url,
-                                      QTMovieAskUnresolvedDataRefsAttribute: @NO,
-                                      QTMovieOpenForPlaybackAttribute: @YES,
-                                      QTMovieIsSteppableAttribute: @YES,
-                                      QTMovieOpenAsyncRequiredAttribute: @NO,
-                                      QTMovieOpenAsyncOKAttribute: @NO,
-                                      QTMovieApertureModeAttribute: QTMovieApertureModeClean };
-
-        _movie = [[QTMovie alloc] initWithAttributes:attributes error:&outError];
-        
-        if (_movie)
-        {
-            _movie.delegate = self;
-
-            [[NSNotificationCenter defaultCenter] addObserver:self
-                                                     selector:@selector(_movieRateDidChange:)
-                                                         name:QTMovieRateDidChangeNotification
-                                                       object:_movie];
-
-            _layer = [QTMovieLayer layerWithMovie:_movie];
-        }
-
-        _periodicObservers = [NSMutableSet set];
-        _rateObservers = [NSMutableSet set];
-        _playableObservers = [NSMutableSet set];
-
-        // Can't open things async
-        // because of 23414 QTKit bugs.
-        if (_movie && _layer)
-        {
-            self.playable = YES;
-            [self _enableSubtitles];
-        }
-        else
-        {
-            self.playable = NO;
-        }
-
-        self.loaded = YES;
-    }
-
-    return self;
-}
-
-- (void)dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
-    [self _stopMovieTimer];
-}
-
-- (void)setLoaded:(BOOL)loaded
-{
-    _loaded = loaded;
-
-    for (HBPlayableObverser block in self.playableObservers)
-    {
-        block();
-    }
-    [self.playableObservers removeAllObjects];
-}
-
-- (void)_movieRateDidChange:(NSNotification *)notification
-{
-    for (HBQTKitPlayerRateObserver *observer in self.rateObservers)
-    {
-        [observer postNotification];
-    }
-}
-
-- (void)_enableSubtitles
-{
-    // Get and enable subtitles
-    NSArray<QTTrack *> *subtitlesArray = [self.movie tracksOfMediaType:QTMediaTypeSubtitle];
-    if (subtitlesArray.count)
-    {
-        // enable the first tx3g subtitle track
-        [subtitlesArray.firstObject setEnabled:YES];
-    }
-    else
-    {
-        // Perian subtitles
-        subtitlesArray = [self.movie tracksOfMediaType:QTMediaTypeVideo];
-        if (subtitlesArray.count >= 2)
-        {
-            // track 0 should be video, other video tracks should
-            // be subtitles; force-enable the first subs track
-            [subtitlesArray[1] setEnabled:YES];
-        }
-    }
-}
-
-- (void)_startMovieTimer
-{
-    if (!self.timer)
-    {
-        self.timer = [NSTimer scheduledTimerWithTimeInterval:0.09 target:self
-                                                         selector:@selector(_timerFired:)
-                                                         userInfo:nil repeats:YES];
-    }
-}
-
-- (void)_stopMovieTimer
-{
-    [self.timer invalidate];
-    self.timer = nil;
-}
-
-- (void)_timerFired:(NSTimer *)timer
-{
-    for (HBQTKitPlayerPeriodicObserver *observer in self.periodicObservers)
-    {
-        [observer postNotification:self.currentTime];
-    }
-}
-
-#pragma mark Public properties
-
-- (NSArray<HBPlayerTrack *> *)tracksWithMediaType:(NSString *)mediaType
-{
-    NSMutableArray *result = [NSMutableArray array];
-    NSArray<QTTrack *> *tracks = [self.movie tracksOfMediaType:mediaType];
-    for (QTTrack *track in tracks)
-    {
-        NSNumber *trackID = [track attributeForKey:QTTrackIDAttribute];
-        NSString *name = NSLocalizedString(@"Unknown", nil);
-
-        if ([track respondsToSelector:@selector(isoLanguageCodeAsString)])
-        {
-            NSString *language = [track isoLanguageCodeAsString];
-            name = [HBUtilities languageCodeForIso6392Code:language];
-        }
-        BOOL enabled = [[track attributeForKey:QTTrackEnabledAttribute] boolValue];
-
-        HBPlayerTrack *playerTrack = [[HBPlayerTrack alloc] initWithTrackName:name object:trackID enabled:enabled];
-
-        [result addObject:playerTrack];
-    }
-    return result;
-}
-
-@synthesize audioTracks = _audioTracks;
-
-- (NSArray<HBPlayerTrack *> *)audioTracks
-{
-    if (_audioTracks == nil)
-    {
-        _audioTracks = [self tracksWithMediaType:QTMediaTypeSound];
-    }
-    return _audioTracks;
-}
-
-@synthesize subtitlesTracks = _subtitlesTracks;
-
-- (NSArray<HBPlayerTrack *> *)subtitlesTracks
-{
-    if (_subtitlesTracks == nil)
-    {
-        _subtitlesTracks = [self tracksWithMediaType:QTMediaTypeSubtitle];
-    }
-    return _subtitlesTracks;
-}
-
-- (void)_enableTrack:(HBPlayerTrack *)playerTrack mediaType:(NSString *)mediaType
-{
-    NSArray<QTTrack *> *tracks = [self.movie tracksOfMediaType:mediaType];
-    for (QTTrack *track in tracks)
-    {
-        NSNumber *trackID = [track attributeForKey:QTTrackIDAttribute];
-
-        if ([trackID isEqualTo:playerTrack.representedObject])
-        {
-            [track setEnabled:YES];
-        }
-        else
-        {
-            [track setEnabled:NO];
-        }
-    }
-}
-
-- (void)enableAudioTrack:(HBPlayerTrack *)playerTrack
-{
-    for (HBPlayerTrack *track in self.audioTracks)
-    {
-        track.enabled = NO;
-    }
-    playerTrack.enabled = YES;
-    [self _enableTrack:playerTrack mediaType:QTMediaTypeSound];
-}
-
-- (void)enableSubtitlesTrack:(HBPlayerTrack *)playerTrack
-{
-    for (HBPlayerTrack *track in self.subtitlesTracks)
-    {
-        track.enabled = NO;
-    }
-    playerTrack.enabled = YES;
-    [self _enableTrack:playerTrack mediaType:QTMediaTypeSubtitle];
-}
-
-- (NSTimeInterval)duration
-{
-    QTTime duration = [self.movie duration];
-    return (double)duration.timeValue / (double)duration.timeScale;;
-}
-
-- (NSTimeInterval)currentTime
-{
-    QTTime time = [self.movie currentTime];
-    return (double)time.timeValue / (double)time.timeScale;;
-}
-
-- (void)setCurrentTime:(NSTimeInterval)value
-{
-    long timeScale = [[self.movie attributeForKey:QTMovieTimeScaleAttribute] longValue];
-    [self.movie setCurrentTime:QTMakeTime((long long)value * timeScale, timeScale)];
-    [self _timerFired:nil];
-}
-
-- (void)setRate:(float)rate
-{
-    self.movie.rate = rate;
-}
-
-- (float)rate
-{
-    return self.movie.rate;
-}
-
-- (float)volume
-{
-    return self.movie.volume;
-}
-
-- (void)setVolume:(float)volume
-{
-    self.movie.volume = volume;
-}
-
-#pragma mark public methods
-
-- (void)loadPlayableValueAsynchronouslyWithCompletionHandler:(nullable void (^)(void))handler;
-{
-    if (self.isLoaded)
-    {
-        handler();
-    }
-    else
-    {
-        [self.playableObservers addObject:handler];
-    }
-}
-
-- (id)addPeriodicTimeObserverUsingBlock:(void (^)(NSTimeInterval time))block
-{
-    HBQTKitPlayerPeriodicObserver *observer = [[HBQTKitPlayerPeriodicObserver alloc] init];
-    observer.block = block;
-    [self.periodicObservers addObject:observer];
-
-    [self _startMovieTimer];
-
-    return observer;
-}
-
-- (void)removeTimeObserver:(id)observer
-{
-    [self.periodicObservers removeObject:observer];
-}
-
-- (id)addRateObserverUsingBlock:(void (^)(void))block
-{
-    HBQTKitPlayerRateObserver *observer = [[HBQTKitPlayerRateObserver alloc] init];
-    observer.block = block;
-    [self.rateObservers addObject:observer];
-
-    return observer;
-}
-
-- (void)removeRateObserver:(id)observer
-{
-    [self.rateObservers removeObject:observer];
-}
-
-- (void)play
-{
-    [self.movie play];
-    [self _startMovieTimer];
-}
-
-- (void)pause
-{
-    [self.movie stop];
-    [self _stopMovieTimer];
-}
-
-- (void)gotoBeginning
-{
-    [self.movie gotoBeginning];
-    [self _timerFired:nil];
-}
-
-- (void)gotoEnd
-{
-    [self.movie gotoEnd];
-    [self _timerFired:nil];
-}
-
-- (void)stepForward
-{
-    [self.movie stepForward];
-    [self _timerFired:nil];
-}
-
-- (void)stepBackward
-{
-    [self.movie stepBackward];
-    [self _timerFired:nil];
-}
-
-@end
-
-#endif
index 3584f7737a466f9826db51d9cca6f95eaebbbb76..597b68a1d0fe40565e79a4da90c0f6f058ae4878 100644 (file)
@@ -5,7 +5,6 @@
    It may be used under the terms of the GNU General Public License. */
 
 #import <Cocoa/Cocoa.h>
-#import <Growl/Growl.h>
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -15,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
 @class HBCore;
 @class HBJob;
 
-@interface HBQueueController : NSWindowController <NSToolbarDelegate, NSWindowDelegate, GrowlApplicationBridgeDelegate>
+@interface HBQueueController : NSWindowController <NSToolbarDelegate, NSWindowDelegate>
 
 - (instancetype)initWithURL:(NSURL *)queueURL;
 
index d2506ef018edd342c9bc46686c50c976f9a2b8fa..b67c850631fa4a494399f36082dfb18584421094 100644 (file)
@@ -28,7 +28,7 @@
 // DockTile update frequency in total percent increment
 #define dockTileUpdateFrequency     0.1f
 
-@interface HBQueueController () <NSOutlineViewDataSource, HBQueueOutlineViewDelegate>
+@interface HBQueueController () <NSOutlineViewDataSource, HBQueueOutlineViewDelegate, NSUserNotificationCenterDelegate>
 
 /// Whether the window is visible or occluded,
 /// useful to avoid updating the UI needlessly
 
         // Progress
         _progressInfo = @"";
-        if (NSAppKitVersionNumber < NSAppKitVersionNumber10_10)
-        {
-            _visible = YES;
-        }
 
         // Load the queue from disk.
         _jobs = [[HBDistributedArray alloc] initWithURL:queueURL class:[HBJob class]];
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadQueue) name:HBDistributedArrayChanged object:_jobs];
+
+        [NSUserNotificationCenter defaultUserNotificationCenter].delegate = self;
     }
 
     return self;
 
 #pragma mark - Encode Done Actions
 
-#define SERVICE_NAME @"Encode Done"
-
-/**
- *  Register a test notification and make
- *  it enabled by default
- */
-- (NSDictionary *)registrationDictionaryForGrowl
-{
-    return @{GROWL_NOTIFICATIONS_ALL: @[SERVICE_NAME],
-             GROWL_NOTIFICATIONS_DEFAULT: @[SERVICE_NAME]};
-}
-
-- (void)showNotificationWithTitle:(NSString *)title description:(NSString *)description url:(NSURL *)fileURL
-{
-    [GrowlApplicationBridge notifyWithTitle:title
-                                description:description
-                           notificationName:SERVICE_NAME
-                                   iconData:nil
-                                   priority:0
-                                   isSticky:YES
-                               clickContext:fileURL.path];
-}
-
-- (void)growlNotificationWasClicked:(id)clickContext
+- (void)userNotificationCenter:(NSUserNotificationCenter *)center didActivateNotification:(NSUserNotification *)notification
 {
     // Show the file in Finder when a done notification was clicked.
-    if ([clickContext isKindOfClass:[NSString class]] && [clickContext length])
+    NSString *path = notification.userInfo[@"Path"];
+    if ([path isKindOfClass:[NSString class]] && path.length)
     {
-        NSURL *fileURL = [NSURL fileURLWithPath:clickContext];
+        NSURL *fileURL = [NSURL fileURLWithPath:path];
         [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:@[fileURL]];
     }
 }
 
+- (void)showNotificationWithTitle:(NSString *)title description:(NSString *)description url:(NSURL *)fileURL
+{
+    NSUserNotification *notification = [[NSUserNotification alloc] init];
+    notification.title = title;
+    notification.informativeText = description;
+    notification.soundName = NSUserNotificationDefaultSoundName;
+    notification.hasActionButton = YES;
+    notification.actionButtonTitle = NSLocalizedString(@"Show", @"Notification -> Show in Finder");
+    notification.userInfo = @{ @"Path": fileURL.path };
+    [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification];
+}
+
 /**
  *  Sends the URL to the external app
  *  selected in the preferences.
                 [alert addButtonWithTitle:NSLocalizedString(@"Stop Encoding and Delete", nil)];
                 [alert setAlertStyle:NSCriticalAlertStyle];
 
-                [alert beginSheetModalForWindow:targetWindow
-                                  modalDelegate:self
-                                 didEndSelector:@selector(didDimissCancelCurrentJob:returnCode:contextInfo:)
-                                    contextInfo:NULL];
+                [alert beginSheetModalForWindow:targetWindow completionHandler:^(NSModalResponse returnCode) {
+                    if (returnCode == NSAlertSecondButtonReturn)
+                    {
+                        [self.jobs beginTransaction];
+
+                        NSInteger index = [self.jobs indexOfObject:self.currentJob];
+                        [self cancelCurrentJobAndContinue];
+
+                        [self removeQueueItemAtIndex:index];
+                        [self.jobs commit];
+                    }
+                }];
             }
         }
 
     [self.jobs commit];
 }
 
-- (void)didDimissCancelCurrentJob:(NSAlert *)alert
-                       returnCode:(NSInteger)returnCode
-                      contextInfo:(void *)contextInfo
-{
-    if (returnCode == NSAlertSecondButtonReturn)
-    {
-        [self.jobs beginTransaction];
-
-        NSInteger index = [self.jobs indexOfObject:self.currentJob];
-        [self cancelCurrentJobAndContinue];
-
-        [self removeQueueItemAtIndex:index];
-        [self.jobs commit];
-    }
-}
-
 /**
  * Show the finished encode in the finder
  */
     [alert addButtonWithTitle:NSLocalizedString(@"Finish Current and Stop", nil)];
     [alert setAlertStyle:NSCriticalAlertStyle];
 
-    [alert beginSheetModalForWindow:window
-                      modalDelegate:self
-                     didEndSelector:@selector(didDimissCancel:returnCode:contextInfo:)
-                        contextInfo:nil];
-}
-
-- (void)didDimissCancel:(NSAlert *)alert
-             returnCode:(NSInteger)returnCode
-            contextInfo:(void *)contextInfo
-{
-    if (returnCode == NSAlertSecondButtonReturn)
-    {
-        [self cancelCurrentJobAndStop];
-    }
-    else if (returnCode == NSAlertThirdButtonReturn)
-    {
-        [self cancelCurrentJobAndContinue];
-    }
-    else if (returnCode == NSAlertThirdButtonReturn + 1)
-    {
-        [self finishCurrentAndStop];
-    }
+    [alert beginSheetModalForWindow:window completionHandler:^(NSModalResponse returnCode) {
+        if (returnCode == NSAlertSecondButtonReturn)
+        {
+            [self cancelCurrentJobAndStop];
+        }
+        else if (returnCode == NSAlertThirdButtonReturn)
+        {
+            [self cancelCurrentJobAndContinue];
+        }
+        else if (returnCode == NSAlertThirdButtonReturn + 1)
+        {
+            [self finishCurrentAndStop];
+        }
+    }];
 }
 
 /**
             [alert addButtonWithTitle:NSLocalizedString(@"Stop Encoding and Edit", nil)];
             [alert setAlertStyle:NSCriticalAlertStyle];
 
-            [alert beginSheetModalForWindow:docWindow
-                              modalDelegate:self
-                             didEndSelector:@selector(didDimissEditCurrentJob:returnCode:contextInfo:)
-                                contextInfo:(__bridge void *)(job)];
+            [alert beginSheetModalForWindow:docWindow completionHandler:^(NSModalResponse returnCode) {
+                if (returnCode == NSAlertSecondButtonReturn)
+                {
+                    [self editQueueItem:job];
+                }
+            }];
         }
         else if (job.state != HBJobStateWorking)
         {
     [self.jobs commit];
 }
 
-- (void)didDimissEditCurrentJob:(NSAlert *)alert
-                       returnCode:(NSInteger)returnCode
-                      contextInfo:(void *)contextInfo
-{
-    if (returnCode == NSAlertSecondButtonReturn)
-    {
-        HBJob *job = (__bridge HBJob *)contextInfo;
-        [self editQueueItem:job];
-    }
-}
-
 - (IBAction)clearAll:(id)sender
 {
     [self.jobs beginTransaction];
index 2b788da328b7431f31b94e459a10b6c03ff1c427..baeee738edcecb0db2442fb0a18a1eae1677d1c5 100644 (file)
 {
     [super windowDidLoad];
 
-    if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_9)
-    {
-        self.name.placeholderString = self.preset.name;
-    }
+    self.name.placeholderString = self.preset.name;
     self.name.stringValue = self.preset.name;
 
     [[NSNotificationCenter defaultCenter] addObserver:self
@@ -63,8 +60,7 @@
 
 - (IBAction)dismiss:(id)sender
 {
-    [self.window orderOut:nil];
-    [NSApp endSheet:self.window returnCode:NSModalResponseCancel];
+    [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseCancel];
 }
 
 - (IBAction)rename:(id)sender
@@ -79,9 +75,7 @@
     else
     {
         [self.preset setName:self.name.stringValue];
-
-        [self.window orderOut:nil];
-        [NSApp endSheet:self.window returnCode:NSModalResponseContinue];
+        [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseOK];
     }
 }
 
index 4576c660183278ee4a0126114c20b536dd588305..fd44ef59dfadb868e62c0c994cf7e5720d13395e 100644 (file)
@@ -7,8 +7,7 @@
 #import "HBSubtitlesController.h"
 #import "HBSubtitlesDefaultsController.h"
 
-@import HandBrakeKit.HBSubtitles;
-@import HandBrakeKit.HBSubtitlesDefaults;
+@import HandBrakeKit;
 
 @interface HBSubtitlesController ()
 
     HBSubtitlesDefaults *defaults = [self.subtitles.defaults copy];
     self.defaultsController = [[HBSubtitlesDefaultsController alloc] initWithSettings:defaults];
 
-    [NSApp beginSheet:self.defaultsController.window
-       modalForWindow:self.view.window
-        modalDelegate:self
-       didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
-          contextInfo:(void *)CFBridgingRetain(defaults)];
-}
-
-- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
-{
-    HBSubtitlesDefaults *defaults = (HBSubtitlesDefaults *)CFBridgingRelease(contextInfo);
-
-    if (returnCode == NSModalResponseOK)
-    {
-        self.subtitles.defaults = defaults;
-    }
-    self.defaultsController = nil;
+    [self.view.window beginSheet:self.defaultsController.window completionHandler:^(NSModalResponse returnCode) {
+        if (returnCode == NSModalResponseOK)
+        {
+            self.subtitles.defaults = defaults;
+        }
+        self.defaultsController = nil;
+    }];
 }
 
 #pragma mark - Srt import
index 1acac3c692f6bfbd0f4ac6ba27399da2f733f7f1..47f650dfa8954466f15f26ea8a4dad58fbd61e2d 100644 (file)
@@ -7,7 +7,7 @@
 #import "HBSubtitlesDefaultsController.h"
 #import "HBLanguagesSelection.h"
 
-@import HandBrakeKit.HBSubtitlesDefaults;
+@import HandBrakeKit;
 
 static void *HBSubtitlesDefaultsContext = &HBSubtitlesDefaultsContext;
 
@@ -68,14 +68,12 @@ static void *HBSubtitlesDefaultsContext = &HBSubtitlesDefaultsContext;
 - (IBAction)ok:(id)sender
 {
     self.settings.trackSelectionLanguages = [self.languagesList.selectedLanguages mutableCopy];
-    [self.window orderOut:nil];
-    [NSApp endSheet:self.window returnCode:NSModalResponseOK];
+    [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseOK];
 }
 
 - (IBAction)cancel:(id)sender
 {
-    [self.window orderOut:nil];
-    [NSApp endSheet:self.window returnCode:NSModalResponseCancel];
+    [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseCancel];
 }
 
 - (IBAction)openUserGuide:(id)sender
index b0f3e088adf5a62db5c9698e0b87e8951c842abe..05d44354ff9e0dd1ec9efaeb9afa3118bac73a15 100644 (file)
@@ -6,7 +6,7 @@
 
 #import "HBTitleSelectionController.h"
 
-@import HandBrakeKit.HBTitle;
+@import HandBrakeKit;
 
 @interface HBTitleSelection : NSObject
 @property (nonatomic, readonly) HBTitle *title;
index beb0584b551fb98e52d62b163f2657e793f9f629..5ce7648a7de5e2d9267b89cf8ef8f94928e9d5b9 100644 (file)
 @interface HBQualityTransformer : NSValueTransformer
 - (instancetype)initWithReversedDirection:(BOOL)reverse min:(double)min max:(double)max NS_DESIGNATED_INITIALIZER;
 @end
+
+@interface HBVideo (EncoderAdditions)
+
+- (BOOL)isUnparsedSupported:(int)encoder;
+- (BOOL)isPresetSystemSupported:(int)encoder;
+- (BOOL)isSimpleOptionsPanelSupported:(int)encoder;
+- (BOOL)isOldAdvancedPanelSupported:(int)encoder;
+- (void)qualityLimitsForEncoder:(int)encoder low:(float *)low high:(float *)high granularity:(float *)granularity direction:(int *)direction;
+
+@end
index 1a07bb8101a53a68355031cd2f8bf4b93baffac4..0c0410b3a3aabda9452b9b14b56ff8ff2ad4502a 100644 (file)
 }
 
 @end
+
+@implementation HBVideo (EncoderAdditions)
+
+- (BOOL)isUnparsedSupported:(int)encoder
+{
+    return encoder & HB_VCODEC_X264_MASK;
+}
+- (BOOL)isPresetSystemSupported:(int)encoder
+{
+    return hb_video_encoder_get_presets(encoder) != NULL;
+}
+
+- (BOOL)isSimpleOptionsPanelSupported:(int)encoder
+{
+    return encoder & HB_VCODEC_FFMPEG_MASK;
+}
+
+- (BOOL)isOldAdvancedPanelSupported:(int)encoder
+{
+    return encoder & HB_VCODEC_X264_MASK;
+}
+
+- (void)qualityLimitsForEncoder:(int)encoder low:(float *)low high:(float *)high granularity:(float *)granularity direction:(int *)direction
+{
+    hb_video_quality_get_limits(encoder, low, high, granularity, direction);
+}
+
+@end
index 355f24ad9939e0d6d047843074f1c999d2faae40..a08d87bcca267091a6238d60565e6b603752cd15 100644 (file)
@@ -9,8 +9,6 @@
 
 @import HandBrakeKit;
 
-#include "hb.h"
-
 static void *HBVideoControllerContext = &HBVideoControllerContext;
 
 @interface HBVideoController () {
@@ -130,21 +128,15 @@ static void *HBVideoControllerContext = &HBVideoControllerContext;
         }
         else if ([keyPath isEqualToString:@"video.quality"])
         {
-            if ([fVidQualitySlider respondsToSelector:@selector(setAccessibilityValueDescription:)])
-            {
-                fVidQualitySlider.accessibilityValueDescription = [NSString stringWithFormat:@"%@ %.2f", self.video.constantQualityLabel, self.video.quality];;
-            }
+            fVidQualitySlider.accessibilityValueDescription = [NSString stringWithFormat:@"%@ %.2f", self.video.constantQualityLabel, self.video.quality];;
         }
         else if ([keyPath isEqualToString:@"video.preset"])
         {
-            if ([fPresetsSlider respondsToSelector:@selector(setAccessibilityValueDescription:)])
-            {
-                fPresetsSlider.accessibilityValueDescription = self.video.preset;
-            }
+            fPresetsSlider.accessibilityValueDescription = self.video.preset;
         }
         else if ([keyPath isEqualToString:@"video.unparseOptions"])
         {
-            if (self.video.encoder & HB_VCODEC_X264_MASK)
+            if ([self.video isUnparsedSupported:self.video.encoder])
             {
                 fDisplayX264PresetsUnparseTextField.stringValue = [NSString stringWithFormat:@"x264 Unparse: %@", self.video.unparseOptions];
             }
@@ -195,8 +187,8 @@ static void *HBVideoControllerContext = &HBVideoControllerContext;
 {
     int direction;
     float minValue, maxValue, granularity;
-    hb_video_quality_get_limits(self.video.encoder,
-                                &minValue, &maxValue, &granularity, &direction);
+    [self.video qualityLimitsForEncoder:self.video.encoder low:&minValue high:&maxValue granularity:&granularity direction:&direction];
+
     if (granularity < 1.0f)
     {
          // Encoders that allow fractional CQ values often have a low granularity
@@ -225,19 +217,19 @@ static void *HBVideoControllerContext = &HBVideoControllerContext;
 {
     self.advancedController.hidden = YES;
 
-    if (hb_video_encoder_get_presets(self.video.encoder) != NULL)
+    if ([self.video isPresetSystemSupported:self.video.encoder])
     {
         [self toggleAdvancedOptionsCheckBoxForEncoder:self.video.encoder];
 
         fPresetsBox.contentView = fPresetView;
         [self setupPresetsSlider];
 
-        if (self.video.encoder & HB_VCODEC_X264_MASK)
+        if ([self.video isOldAdvancedPanelSupported:self.video.encoder])
         {
             self.advancedController.hidden = NO;
         }
     }
-    else if (self.video.encoder & HB_VCODEC_FFMPEG_MASK)
+    else if ([self.video isSimpleOptionsPanelSupported:self.video.encoder])
     {
         fPresetsBox.contentView = fSimplePresetView;
     }
@@ -268,7 +260,7 @@ static void *HBVideoControllerContext = &HBVideoControllerContext;
  */
 - (void)toggleAdvancedOptionsCheckBoxForEncoder:(int)encoder
 {
-    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HBShowAdvancedTab"] && (encoder & HB_VCODEC_X264_MASK))
+    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HBShowAdvancedTab"] && [self.video isOldAdvancedPanelSupported:self.video.encoder])
     {
         fX264UseAdvancedOptionsCheck.hidden = NO;
         fDividerLine.hidden = YES;
index b4cbea8ad2a9ab67b3c350e2f2eac85cc8b9e31f..19283ff9f3299ea18f17ef8bc714daa7d46a49cf 100644 (file)
@@ -40,8 +40,6 @@
                273F20B514ADBE670021BE6D /* HBPreferencesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F20A014ADBE670021BE6D /* HBPreferencesController.m */; };
                273F20B714ADBE670021BE6D /* HBPreviewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F20A414ADBE670021BE6D /* HBPreviewController.m */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; };
                273F20BA14ADBE670021BE6D /* HBPictureController.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F20AA14ADBE670021BE6D /* HBPictureController.m */; };
-               273F20C814ADC4FF0021BE6D /* QTKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F20C714ADC4FF0021BE6D /* QTKit.framework */; };
-               273F20CB14ADC89A0021BE6D /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 273F20BF14ADC1250021BE6D /* Growl.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
                273F20CC14ADC8A10021BE6D /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 273F20C014ADC1250021BE6D /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
                273F218A14ADDDA10021BE6D /* AdvancedView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 273F217A14ADDDA10021BE6D /* AdvancedView.xib */; };
                273F218B14ADDDA10021BE6D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 273F217C14ADDDA10021BE6D /* InfoPlist.strings */; };
@@ -51,7 +49,6 @@
                273F218F14ADDDA10021BE6D /* PictureSettings.xib in Resources */ = {isa = PBXBuildFile; fileRef = 273F218414ADDDA10021BE6D /* PictureSettings.xib */; };
                273F219014ADDDA10021BE6D /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = 273F218614ADDDA10021BE6D /* Preferences.xib */; };
                273F219114ADDDA10021BE6D /* Queue.xib in Resources */ = {isa = PBXBuildFile; fileRef = 273F218814ADDDA10021BE6D /* Queue.xib */; };
-               273F21C114ADE7A20021BE6D /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F20BF14ADC1250021BE6D /* Growl.framework */; };
                273F21C214ADE7BC0021BE6D /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F20C014ADC1250021BE6D /* Sparkle.framework */; };
                27D6C72614B1019100B785E4 /* libhandbrake.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72414B1019100B785E4 /* libhandbrake.a */; };
                27D6C74414B102DA00B785E4 /* libass.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72814B102DA00B785E4 /* libass.a */; };
@@ -93,7 +90,6 @@
                A916C9971C8449CA00C7B560 /* HBAudioDefaultsController.m in Sources */ = {isa = PBXBuildFile; fileRef = A932E26E198833920047D13E /* HBAudioDefaultsController.m */; };
                A916C9981C8449DB00C7B560 /* HBTitleSelectionController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C183941A716B8F00C897C2 /* HBTitleSelectionController.m */; };
                A916C9991C8449E200C7B560 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 273F20BD14ADC09F0021BE6D /* main.mm */; };
-               A916C99A1C8449FB00C7B560 /* HBHUDView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9C9F88819A733FE00DC8923 /* HBHUDView.m */; };
                A916C99B1C844A0800C7B560 /* HBQueueOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = A9EA43671A2210C400785E95 /* HBQueueOutlineView.m */; };
                A919430D1FB5E2FE001E9BB0 /* HBSummaryViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A919430B1FB5E2FE001E9BB0 /* HBSummaryViewController.m */; };
                A91943111FB5E39E001E9BB0 /* HBSummaryViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A919430F1FB5E39E001E9BB0 /* HBSummaryViewController.xib */; };
                A91CE2A41C7DA7320068F46F /* HBPicture+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9537BF51A48AB6300141102 /* HBPicture+UIAdditions.m */; };
                A91CE2A61C7DA7320068F46F /* HBFilters+UIAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9537BF81A48AC9000141102 /* HBFilters+UIAdditions.m */; };
                A91CE2A81C7DA7320068F46F /* HBDVDDetector.m in Sources */ = {isa = PBXBuildFile; fileRef = 273F209814ADBE670021BE6D /* HBDVDDetector.m */; };
-               A91CE2AA1C7DA7320068F46F /* HBCodingUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A9160A341AE7A165009A7818 /* HBCodingUtilities.m */; };
                A91CE2AD1C7DA7320068F46F /* HBStateFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = A975C08D1AE8C5270061870D /* HBStateFormatter.m */; };
                A91CE2B01C7DA9FB0068F46F /* HBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = A9AA44791970664A00D7DEFC /* HBUtilities.m */; };
                A91CE2B11C7DAA530068F46F /* libhandbrake.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C72414B1019100B785E4 /* libhandbrake.a */; };
                A92268781A6E555500A8D5C5 /* HBAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A92268771A6E555500A8D5C5 /* HBAppDelegate.m */; };
                A922687B1A6E569B00A8D5C5 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = A92268791A6E569B00A8D5C5 /* MainWindow.xib */; };
                A9294CC91DC4BBF7004D3415 /* HBJob+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A9294CC71DC4BBF7004D3415 /* HBJob+Private.h */; };
+               A92B148220CA9F7700146FD8 /* HBHUDView.m in Sources */ = {isa = PBXBuildFile; fileRef = A92B148120CA9F7600146FD8 /* HBHUDView.m */; };
                A92EC6EA1FE40FD90013511E /* HBPreviewViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A92EC6E81FE40FD90013511E /* HBPreviewViewController.xib */; };
                A932E26C1988334B0047D13E /* AudioDefaults.xib in Resources */ = {isa = PBXBuildFile; fileRef = A932E26A1988334B0047D13E /* AudioDefaults.xib */; };
-               A9350F501CCA7F490089F970 /* HBQTKitPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = A9350F4E1CCA7C3B0089F970 /* HBQTKitPlayer.m */; };
                A937EECB1C6C7C0300EEAE6D /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = A937EECA1C6C7C0300EEAE6D /* dsa_pub.pem */; };
                A939DD8B1FC8826A00135F2A /* HBPresetsMenuBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = A939DD8A1FC8826A00135F2A /* HBPresetsMenuBuilder.m */; };
                A93B49221DA3AA6900DD70A3 /* HBToolbarBadgedItem.m in Sources */ = {isa = PBXBuildFile; fileRef = A93B49211DA3AA6900DD70A3 /* HBToolbarBadgedItem.m */; };
                A9ABD1A71E2A0F7500EC8B65 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9ABD1A51E2A0F0700EC8B65 /* CoreText.framework */; };
                A9ABD1A91E2A0F8200EC8B65 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9ABD1A81E2A0F8200EC8B65 /* CoreGraphics.framework */; };
                A9ABD1AA1E2A0F8F00EC8B65 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9ABD1A81E2A0F8200EC8B65 /* CoreGraphics.framework */; };
-               A9BB0F2719A0ECE40079F1C1 /* HBHUDButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A9BB0F2619A0ECE40079F1C1 /* HBHUDButtonCell.m */; };
                A9BC24C91A69293E007DC41A /* HBAttributedStringAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A9BC24C81A69293E007DC41A /* HBAttributedStringAdditions.m */; };
                A9C0DB85197E7B0000DF55B3 /* SubtitlesDefaults.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9C0DB83197E7B0000DF55B3 /* SubtitlesDefaults.xib */; };
                A9C1839D1A716BCC00C897C2 /* HBTitleSelection.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9C1839B1A716BCC00C897C2 /* HBTitleSelection.xib */; };
                        dstPath = "";
                        dstSubfolderSpec = 10;
                        files = (
-                               273F20CB14ADC89A0021BE6D /* Growl.framework in CopyFiles */,
                                273F20CC14ADC8A10021BE6D /* Sparkle.framework in CopyFiles */,
                                A9736F181C7DA5FE008F1D18 /* HandBrakeKit.framework in CopyFiles */,
                        );
                273F20A914ADBE670021BE6D /* HBPictureController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBPictureController.h; sourceTree = "<group>"; };
                273F20AA14ADBE670021BE6D /* HBPictureController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBPictureController.m; sourceTree = "<group>"; };
                273F20BD14ADC09F0021BE6D /* main.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; };
-               273F20BF14ADC1250021BE6D /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Growl.framework; sourceTree = "<group>"; };
                273F20C014ADC1250021BE6D /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = "<group>"; };
-               273F20C714ADC4FF0021BE6D /* QTKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QTKit.framework; path = System/Library/Frameworks/QTKit.framework; sourceTree = SDKROOT; };
                273F217B14ADDDA10021BE6D /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = AdvancedView.xib; sourceTree = "<group>"; };
                273F217D14ADDDA10021BE6D /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = InfoPlist.strings; sourceTree = "<group>"; };
                273F217F14ADDDA10021BE6D /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = MainMenu.xib; sourceTree = "<group>"; };
                A914BCB11BC441C700157917 /* HBPreviewView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBPreviewView.h; sourceTree = "<group>"; };
                A914BCB21BC441C700157917 /* HBPreviewView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBPreviewView.m; sourceTree = "<group>"; };
                A9160A331AE7A165009A7818 /* HBCodingUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBCodingUtilities.h; sourceTree = "<group>"; };
-               A9160A341AE7A165009A7818 /* HBCodingUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBCodingUtilities.m; sourceTree = "<group>"; };
                A91726E5197291BC00D1AFEF /* HBChapterTitlesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBChapterTitlesController.h; sourceTree = "<group>"; };
                A91726E6197291BC00D1AFEF /* HBChapterTitlesController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBChapterTitlesController.m; sourceTree = "<group>"; };
                A918066F1A4807B000FC9BED /* HBRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBRange.h; sourceTree = "<group>"; };
                A92268771A6E555500A8D5C5 /* HBAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAppDelegate.m; sourceTree = "<group>"; };
                A922687A1A6E569B00A8D5C5 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = MainWindow.xib; sourceTree = "<group>"; };
                A9294CC71DC4BBF7004D3415 /* HBJob+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "HBJob+Private.h"; sourceTree = "<group>"; };
+               A92B148020CA9F7600146FD8 /* HBHUDView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBHUDView.h; sourceTree = "<group>"; };
+               A92B148120CA9F7600146FD8 /* HBHUDView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBHUDView.m; sourceTree = "<group>"; };
                A92EC6E91FE40FD90013511E /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/HBPreviewViewController.xib; sourceTree = "<group>"; };
                A932E26B1988334B0047D13E /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = AudioDefaults.xib; sourceTree = "<group>"; };
                A932E26D198833920047D13E /* HBAudioDefaultsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAudioDefaultsController.h; sourceTree = "<group>"; };
                A932E26E198833920047D13E /* HBAudioDefaultsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAudioDefaultsController.m; sourceTree = "<group>"; };
                A932E271198834130047D13E /* HBAudioDefaults.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAudioDefaults.h; sourceTree = "<group>"; };
                A932E272198834130047D13E /* HBAudioDefaults.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAudioDefaults.m; sourceTree = "<group>"; };
-               A9350F4D1CCA7C3B0089F970 /* HBQTKitPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBQTKitPlayer.h; sourceTree = "<group>"; };
-               A9350F4E1CCA7C3B0089F970 /* HBQTKitPlayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBQTKitPlayer.m; sourceTree = "<group>"; };
                A937EECA1C6C7C0300EEAE6D /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = "<group>"; };
                A939DD891FC8826A00135F2A /* HBPresetsMenuBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HBPresetsMenuBuilder.h; sourceTree = "<group>"; };
                A939DD8A1FC8826A00135F2A /* HBPresetsMenuBuilder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HBPresetsMenuBuilder.m; sourceTree = "<group>"; };
                A9ABD1A51E2A0F0700EC8B65 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
                A9ABD1A81E2A0F8200EC8B65 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
                A9B34D74197696FE00871B7D /* DiskArbitration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiskArbitration.framework; path = System/Library/Frameworks/DiskArbitration.framework; sourceTree = SDKROOT; };
-               A9BB0F2519A0ECE40079F1C1 /* HBHUDButtonCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBHUDButtonCell.h; sourceTree = "<group>"; };
-               A9BB0F2619A0ECE40079F1C1 /* HBHUDButtonCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBHUDButtonCell.m; sourceTree = "<group>"; };
                A9BC24C71A69293E007DC41A /* HBAttributedStringAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAttributedStringAdditions.h; sourceTree = "<group>"; };
                A9BC24C81A69293E007DC41A /* HBAttributedStringAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAttributedStringAdditions.m; sourceTree = "<group>"; };
                A9C0DB84197E7B0000DF55B3 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = SubtitlesDefaults.xib; sourceTree = "<group>"; };
                A9C183931A716B8F00C897C2 /* HBTitleSelectionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBTitleSelectionController.h; sourceTree = "<group>"; };
                A9C183941A716B8F00C897C2 /* HBTitleSelectionController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBTitleSelectionController.m; sourceTree = "<group>"; };
                A9C1839C1A716BCC00C897C2 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = HBTitleSelection.xib; sourceTree = "<group>"; };
-               A9C9F88719A733FE00DC8923 /* HBHUDView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBHUDView.h; sourceTree = "<group>"; };
-               A9C9F88819A733FE00DC8923 /* HBHUDView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBHUDView.m; sourceTree = "<group>"; };
                A9CAC26E1CCB6B0F00A39E72 /* HBPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBPlayer.h; sourceTree = "<group>"; };
                A9CE0A911F57EC3400724577 /* HBImageUtilities.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HBImageUtilities.m; sourceTree = "<group>"; };
                A9CE0A931F57EC4600724577 /* HBImageUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HBImageUtilities.h; sourceTree = "<group>"; };
                        buildActionMask = 2147483647;
                        files = (
                                273F203C14ADBC210021BE6D /* Cocoa.framework in Frameworks */,
-                               273F21C114ADE7A20021BE6D /* Growl.framework in Frameworks */,
-                               273F20C814ADC4FF0021BE6D /* QTKit.framework in Frameworks */,
                                A9E1467B16BC2ABD00C307BC /* QuartzCore.framework in Frameworks */,
                                273F21C214ADE7BC0021BE6D /* Sparkle.framework in Frameworks */,
                                A9736F171C7DA5FE008F1D18 /* HandBrakeKit.framework in Frameworks */,
                                273F203B14ADBC210021BE6D /* Cocoa.framework */,
                                273F203214ADB9F00021BE6D /* CoreServices.framework */,
                                273F202214ADB8650021BE6D /* IOKit.framework */,
-                               273F20C714ADC4FF0021BE6D /* QTKit.framework */,
                                A9E1467A16BC2ABD00C307BC /* QuartzCore.framework */,
                                273F203D14ADBC210021BE6D /* Other Frameworks */,
                                273F202714ADB8BE0021BE6D /* libbz2.dylib */,
                273F20CE14ADC9210021BE6D /* Bundled */ = {
                        isa = PBXGroup;
                        children = (
-                               273F20BF14ADC1250021BE6D /* Growl.framework */,
                                273F20C014ADC1250021BE6D /* Sparkle.framework */,
                        );
                        name = Bundled;
                                A9CE0A931F57EC4600724577 /* HBImageUtilities.h */,
                                A9CE0A911F57EC3400724577 /* HBImageUtilities.m */,
                                A9160A331AE7A165009A7818 /* HBCodingUtilities.h */,
-                               A9160A341AE7A165009A7818 /* HBCodingUtilities.m */,
                                A997D8EB1A4ABB0900E19B6F /* HBPresetCoding.h */,
                                A975C08C1AE8C5270061870D /* HBStateFormatter.h */,
                                A975C08D1AE8C5270061870D /* HBStateFormatter.m */,
                                A9CAC26E1CCB6B0F00A39E72 /* HBPlayer.h */,
                                A9A0CBE51CCEA1D10045B3DF /* HBPlayerTrack.h */,
                                A9A0CBE61CCEA1D10045B3DF /* HBPlayerTrack.m */,
-                               A9350F4D1CCA7C3B0089F970 /* HBQTKitPlayer.h */,
-                               A9350F4E1CCA7C3B0089F970 /* HBQTKitPlayer.m */,
                                A98036CB1CCA91DD007661AA /* HBAVPlayer.h */,
                                A98036CC1CCA91DD007661AA /* HBAVPlayer.m */,
                        );
                        isa = PBXGroup;
                        children = (
                                A941ACB91CD75B4E0029D06A /* HBHUD.h */,
-                               A9BB0F2519A0ECE40079F1C1 /* HBHUDButtonCell.h */,
-                               A9BB0F2619A0ECE40079F1C1 /* HBHUDButtonCell.m */,
-                               A9C9F88719A733FE00DC8923 /* HBHUDView.h */,
-                               A9C9F88819A733FE00DC8923 /* HBHUDView.m */,
+                               A92B148020CA9F7600146FD8 /* HBHUDView.h */,
+                               A92B148120CA9F7600146FD8 /* HBHUDView.m */,
                                A96664B21CCE48F700DA4A57 /* HBPictureHUDController.h */,
                                A96664B31CCE48F700DA4A57 /* HBPictureHUDController.m */,
                                A96664B41CCE48F700DA4A57 /* HBPictureHUDController.xib */,
                        buildActionMask = 2147483647;
                        files = (
                                A916C99B1C844A0800C7B560 /* HBQueueOutlineView.m in Sources */,
-                               A916C99A1C8449FB00C7B560 /* HBHUDView.m in Sources */,
-                               A9350F501CCA7F490089F970 /* HBQTKitPlayer.m in Sources */,
                                A916C9991C8449E200C7B560 /* main.mm in Sources */,
                                A916C9981C8449DB00C7B560 /* HBTitleSelectionController.m in Sources */,
                                A903C5601CCE78060026B0ED /* NSWindow+HBAdditions.m in Sources */,
                                A96664BA1CCE493D00DA4A57 /* HBEncodingProgressHUDController.m in Sources */,
                                A9A7E27C1FE2A0B5006BE79F /* HBPreviewViewController.m in Sources */,
                                A919430D1FB5E2FE001E9BB0 /* HBSummaryViewController.m in Sources */,
-                               A9BB0F2719A0ECE40079F1C1 /* HBHUDButtonCell.m in Sources */,
                                A9706CB71AC1437800BAEAA8 /* HBExceptionAlertController.m in Sources */,
                                A93B49221DA3AA6900DD70A3 /* HBToolbarBadgedItem.m in Sources */,
                                A91AD3401FB5D2FC00AEA822 /* HBAddCategoryController.m in Sources */,
                                A91AFD0C1A948827009BECED /* HBOutputFileWriter.m in Sources */,
                                A95121E61B5F7BE700FD773D /* NSArray+HBAdditions.m in Sources */,
                                A96664B51CCE48F700DA4A57 /* HBPictureHUDController.m in Sources */,
+                               A92B148220CA9F7700146FD8 /* HBHUDView.m in Sources */,
                                A914BCB31BC441C700157917 /* HBPreviewView.m in Sources */,
                                273F20B714ADBE670021BE6D /* HBPreviewController.m in Sources */,
                                A9D1E41718262364002F6424 /* HBPreviewGenerator.m in Sources */,
                                A91119A61C7DD64A001C463C /* HBDistributedArray.m in Sources */,
                                A91CE2A61C7DA7320068F46F /* HBFilters+UIAdditions.m in Sources */,
                                A91CE2A81C7DA7320068F46F /* HBDVDDetector.m in Sources */,
-                               A91CE2AA1C7DA7320068F46F /* HBCodingUtilities.m in Sources */,
                                A91CE2AD1C7DA7320068F46F /* HBStateFormatter.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                                CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
                                CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
                                CLANG_WARN_STRICT_PROTOTYPES = NO;
-                               CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
                                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                                CLANG_WARN_UNREACHABLE_CODE = YES;
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
                                GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_LABEL = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
+                               MACOSX_DEPLOYMENT_TARGET = 10.10;
                                OTHER_LDFLAGS = (
                                        "-filelist",
                                        "$(EXTERNAL_BUILD)/macosx/osl.filelist.txt",
                                CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
                                CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
                                CLANG_WARN_STRICT_PROTOTYPES = NO;
-                               CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
                                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                                CLANG_WARN_UNREACHABLE_CODE = YES;
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
                                GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_LABEL = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
+                               MACOSX_DEPLOYMENT_TARGET = 10.10;
                                OTHER_LDFLAGS = (
                                        "-filelist",
                                        "$(EXTERNAL_BUILD)/macosx/osl.filelist.txt",
                                        "\"$(EXTERNAL_BUILD)/libhb\"",
                                        "\"$(EXTERNAL_BUILD)/contrib/lib\"",
                                );
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                WRAPPER_EXTENSION = app;
                        };
                                        "\"$(EXTERNAL_BUILD)/libhb\"",
                                        "\"$(EXTERNAL_BUILD)/contrib/lib\"",
                                );
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                WRAPPER_EXTENSION = app;
                        };
                                        "\"$(EXTERNAL_BUILD)/libhb\"",
                                        "\"$(EXTERNAL_BUILD)/contrib/lib\"",
                                );
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
                                MTL_ENABLE_DEBUG_INFO = YES;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKit;
                                        "\"$(EXTERNAL_BUILD)/libhb\"",
                                        "\"$(EXTERNAL_BUILD)/contrib/lib\"",
                                );
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
                                MTL_ENABLE_DEBUG_INFO = NO;
                                PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKit;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                );
                                INFOPLIST_FILE = HandBrakeKitTests/Info.plist;
                                LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
-                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MTL_ENABLE_DEBUG_INFO = YES;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKitTests;
                                );
                                INFOPLIST_FILE = HandBrakeKitTests/Info.plist;
                                LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
-                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MTL_ENABLE_DEBUG_INFO = NO;
                                PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKitTests;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
                                CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
                                CLANG_WARN_STRICT_PROTOTYPES = NO;
-                               CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
                                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                                CLANG_WARN_UNREACHABLE_CODE = YES;
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
                                GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_LABEL = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
+                               MACOSX_DEPLOYMENT_TARGET = 10.10;
                                OTHER_LDFLAGS = (
                                        "-filelist",
                                        "$(EXTERNAL_BUILD)/macosx/osl.filelist.txt",
                                        "\"$(EXTERNAL_BUILD)/libhb\"",
                                        "\"$(EXTERNAL_BUILD)/contrib/lib\"",
                                );
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
                                MTL_ENABLE_DEBUG_INFO = YES;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKit;
                                );
                                INFOPLIST_FILE = HandBrakeKitTests/Info.plist;
                                LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
-                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MTL_ENABLE_DEBUG_INFO = YES;
                                ONLY_ACTIVE_ARCH = YES;
                                PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKitTests;
                                        "\"$(EXTERNAL_BUILD)/libhb\"",
                                        "\"$(EXTERNAL_BUILD)/contrib/lib\"",
                                );
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                WRAPPER_EXTENSION = app;
                        };
                                CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
                                CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
                                CLANG_WARN_STRICT_PROTOTYPES = YES;
-                               CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
                                CLANG_WARN_SUSPICIOUS_MOVE = YES;
                                CLANG_WARN_UNREACHABLE_CODE = YES;
                                CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
                                GCC_WARN_UNUSED_FUNCTION = YES;
                                GCC_WARN_UNUSED_LABEL = YES;
                                GCC_WARN_UNUSED_VARIABLE = YES;
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
+                               MACOSX_DEPLOYMENT_TARGET = 10.10;
                                OTHER_LDFLAGS = (
                                        "-filelist",
                                        "$(EXTERNAL_BUILD)/macosx/osl.filelist.txt",
                                        "\"$(EXTERNAL_BUILD)/libhb\"",
                                        "\"$(EXTERNAL_BUILD)/contrib/lib\"",
                                );
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
                                MTL_ENABLE_DEBUG_INFO = NO;
                                PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKit;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                );
                                INFOPLIST_FILE = HandBrakeKitTests/Info.plist;
                                LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
-                               MACOSX_DEPLOYMENT_TARGET = 10.11;
                                MTL_ENABLE_DEBUG_INFO = NO;
                                PRODUCT_BUNDLE_IDENTIFIER = fr.handbrake.HandBrakeKitTests;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                        "\"$(EXTERNAL_BUILD)/libhb\"",
                                        "\"$(EXTERNAL_BUILD)/contrib/lib\"",
                                );
-                               MACOSX_DEPLOYMENT_TARGET = 10.7;
                                PRODUCT_NAME = "$(TARGET_NAME)";
                                WRAPPER_EXTENSION = app;
                        };
index 8b511b40bf6c377be7dbecb81bd35af60a49e5ae..96c7a98de05b6938e697875bdc96f14e73916b8e 100644 (file)
@@ -70,5 +70,7 @@ GPLv2 license.</string>
        <string>dsa_pub.pem</string>
        <key>SUAllowsAutomaticUpdates</key>
        <false/>
+       <key>NSUserNotificationAlertStyle</key>
+       <string>alert</string>
 </dict>
 </plist>
index 1e5ad2e475d6df371cdf1bdfb3ba985fc26dd843..0cfa90432b4fc85e3a7560156ce252df17d8c710 100644 (file)
@@ -43,6 +43,7 @@
 #include <IOKit/IOKitLib.h>
 #include <IOKit/storage/IOMedia.h>
 #include <IOKit/storage/IODVDMedia.h>
+#include <sys/mount.h>
 #endif
 
 #define LAPSHARP_DEFAULT_PRESET     "medium"
@@ -4888,46 +4889,23 @@ static void print_string_list(FILE *out, const char* const *list, const char *pr
  ****************************************************************************/
 static char* bsd_name_for_path(char *path)
 {
-    OSStatus err;
-    FSRef ref;
-    err = FSPathMakeRef( (const UInt8 *) input, &ref, NULL );
-    if( err != noErr )
-    {
-        return NULL;
-    }
+    const char *prefix = "/dev/";
+    struct statfs s;
 
-    // Get the volume reference number.
-    FSCatalogInfo catalogInfo;
-    err = FSGetCatalogInfo( &ref, kFSCatInfoVolume, &catalogInfo, NULL, NULL,
-                            NULL);
-    if( err != noErr )
+    if (statfs(path, &s) == -1)
     {
         return NULL;
     }
-    FSVolumeRefNum volRefNum = catalogInfo.volume;
 
-    // Now let's get the device name
-    GetVolParmsInfoBuffer volumeParms;
-    err = FSGetVolumeParms( volRefNum, &volumeParms, sizeof( volumeParms ) );
-    if( err != noErr )
-    {
-        return NULL;
-    }
+    size_t lenpre = strlen(prefix),
+           lenstr = strlen(s.f_mntfromname);
 
-    // A version 4 GetVolParmsInfoBuffer contains the BSD node name in the vMDeviceID field.
-    // It is actually a char * value. This is mentioned in the header CoreServices/CarbonCore/Files.h.
-    if( volumeParms.vMVersion < 4 )
+    if (lenstr > lenpre && strncmp(prefix, s.f_mntfromname, lenpre) == 0)
     {
-        return NULL;
-    }
-
-    // vMDeviceID might be zero as is reported with experimental ZFS (zfs-119) support in Leopard.
-    if( !volumeParms.vMDeviceID )
-    {
-        return NULL;
+        return strdup(s.f_mntfromname + lenpre);
     }
 
-    return strdup( volumeParms.vMDeviceID );
+    return strdup(s.f_mntfromname);
 }
 
 /****************************************************************************