summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--macosx/English.lproj/PictureSettings.xib20
l---------macosx/Growl.framework/Growl1
l---------macosx/Growl.framework/Headers1
l---------macosx/Growl.framework/Resources1
-rwxr-xr-xmacosx/Growl.framework/Versions/A/Growlbin584800 -> 0 bytes
-rw-r--r--macosx/Growl.framework/Versions/A/Headers/Growl.h5
-rw-r--r--macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h567
-rw-r--r--macosx/Growl.framework/Versions/A/Headers/GrowlDefines.h386
-rw-r--r--macosx/Growl.framework/Versions/A/Resources/Info.plist40
l---------macosx/Growl.framework/Versions/Current1
-rw-r--r--macosx/HBAVPlayer.m2
-rw-r--r--macosx/HBAddCategoryController.m6
-rw-r--r--macosx/HBAddPresetController.m64
-rw-r--r--macosx/HBAppDelegate.m3
-rw-r--r--macosx/HBApplication.m2
-rw-r--r--macosx/HBAudioController.m26
-rw-r--r--macosx/HBAudioDefaultsController.m8
-rw-r--r--macosx/HBCodingUtilities.h37
-rw-r--r--macosx/HBCodingUtilities.m58
-rw-r--r--macosx/HBController.h1
-rw-r--r--macosx/HBController.m218
-rw-r--r--macosx/HBCore.m5
-rw-r--r--macosx/HBFiltersViewController.m2
-rw-r--r--macosx/HBHUDButtonCell.h15
-rw-r--r--macosx/HBHUDButtonCell.m25
-rw-r--r--macosx/HBHUDView.h2
-rw-r--r--macosx/HBHUDView.m48
-rw-r--r--macosx/HBJob+HBJobConversion.m4
-rw-r--r--macosx/HBJob.m4
-rw-r--r--macosx/HBOutputFileWriter.m10
-rw-r--r--macosx/HBPictureController.m3
-rw-r--r--macosx/HBPictureViewController.m2
-rw-r--r--macosx/HBPlayerHUDController.m6
-rw-r--r--macosx/HBPreferencesController.m6
-rw-r--r--macosx/HBPresetsViewController.m32
-rw-r--r--macosx/HBPreviewController.m5
-rw-r--r--macosx/HBQTKitPlayer.h32
-rw-r--r--macosx/HBQTKitPlayer.m402
-rw-r--r--macosx/HBQueueController.h3
-rw-r--r--macosx/HBQueueController.m139
-rw-r--r--macosx/HBRenamePresetController.m12
-rw-r--r--macosx/HBSubtitlesController.m26
-rw-r--r--macosx/HBSubtitlesDefaultsController.m8
-rw-r--r--macosx/HBTitleSelectionController.m2
-rw-r--r--macosx/HBVideo+UIAdditions.h10
-rw-r--r--macosx/HBVideo+UIAdditions.m28
-rw-r--r--macosx/HBVideoController.m26
-rw-r--r--macosx/HandBrake.xcodeproj/project.pbxproj62
-rw-r--r--macosx/Info.plist.m42
-rw-r--r--test/test.c40
50 files changed, 289 insertions, 2119 deletions
diff --git a/macosx/English.lproj/PictureSettings.xib b/macosx/English.lproj/PictureSettings.xib
index 6cc1caf51..dccbacc02 100644
--- a/macosx/English.lproj/PictureSettings.xib
+++ b/macosx/English.lproj/PictureSettings.xib
@@ -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>
@@ -287,7 +287,7 @@
<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>
@@ -344,13 +344,13 @@
<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">
@@ -360,13 +360,13 @@
<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">
@@ -375,17 +375,17 @@
<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>
@@ -450,13 +450,13 @@
<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">
@@ -488,13 +488,13 @@
<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
index 85956e2d2..000000000
--- a/macosx/Growl.framework/Growl
+++ /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
index a177d2a6b..000000000
--- a/macosx/Growl.framework/Headers
+++ /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
index 953ee36f3..000000000
--- a/macosx/Growl.framework/Resources
+++ /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
index 395dd2b69..000000000
--- a/macosx/Growl.framework/Versions/A/Growl
+++ /dev/null
Binary files 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
index 7b1a3247d..000000000
--- a/macosx/Growl.framework/Versions/A/Headers/Growl.h
+++ /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
index 0bf3583e5..000000000
--- a/macosx/Growl.framework/Versions/A/Headers/GrowlApplicationBridge.h
+++ /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
index 0a196f1e3..000000000
--- a/macosx/Growl.framework/Versions/A/Headers/GrowlDefines.h
+++ /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
index 6a90f41b9..000000000
--- a/macosx/Growl.framework/Versions/A/Resources/Info.plist
+++ /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
index 8c7e5a667..000000000
--- a/macosx/Growl.framework/Versions/Current
+++ /dev/null
@@ -1 +0,0 @@
-A \ No newline at end of file
diff --git a/macosx/HBAVPlayer.m b/macosx/HBAVPlayer.m
index d0b064a61..833c0643a 100644
--- a/macosx/HBAVPlayer.m
+++ b/macosx/HBAVPlayer.m
@@ -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];
});
}];
diff --git a/macosx/HBAddCategoryController.m b/macosx/HBAddCategoryController.m
index 41de50330..dd85ea4d7 100644
--- a/macosx/HBAddCategoryController.m
+++ b/macosx/HBAddCategoryController.m
@@ -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];
}
diff --git a/macosx/HBAddPresetController.m b/macosx/HBAddPresetController.m
index 7fc0af0a5..d100a330e 100644
--- a/macosx/HBAddPresetController.m
+++ b/macosx/HBAddPresetController.m
@@ -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
diff --git a/macosx/HBAppDelegate.m b/macosx/HBAppDelegate.m
index ad93c1cc7..b8072ca78 100644
--- a/macosx/HBAppDelegate.m
+++ b/macosx/HBAppDelegate.m
@@ -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;
}
diff --git a/macosx/HBApplication.m b/macosx/HBApplication.m
index 1223621b4..dcd934030 100644
--- a/macosx/HBApplication.m
+++ b/macosx/HBApplication.m
@@ -7,7 +7,7 @@
#import "HBApplication.h"
#import "HBExceptionAlertController.h"
-@import HandBrakeKit.HBUtilities;
+@import HandBrakeKit;
@implementation HBApplication
diff --git a/macosx/HBAudioController.m b/macosx/HBAudioController.m
index 9432e943e..66a8d2a8a 100644
--- a/macosx/HBAudioController.m
+++ b/macosx/HBAudioController.m
@@ -7,8 +7,7 @@
#import "HBAudioController.h"
#import "HBAudioDefaultsController.h"
-@import HandBrakeKit.HBAudio;
-@import HandBrakeKit.HBAudioDefaults;
+@import HandBrakeKit;
@interface HBAudioController ()
@@ -46,22 +45,13 @@
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
diff --git a/macosx/HBAudioDefaultsController.m b/macosx/HBAudioDefaultsController.m
index 023030ecf..88788e63b 100644
--- a/macosx/HBAudioDefaultsController.m
+++ b/macosx/HBAudioDefaultsController.m
@@ -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
diff --git a/macosx/HBCodingUtilities.h b/macosx/HBCodingUtilities.h
index c880e08aa..8635720ea 100644
--- a/macosx/HBCodingUtilities.h
+++ b/macosx/HBCodingUtilities.h
@@ -17,40 +17,13 @@
#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
index 80e245a7b..000000000
--- a/macosx/HBCodingUtilities.m
+++ /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
diff --git a/macosx/HBController.h b/macosx/HBController.h
index f650a5bf0..c3a1eba68 100644
--- a/macosx/HBController.h
+++ b/macosx/HBController.h
@@ -41,7 +41,6 @@
- (IBAction)showRenamePresetPanel:(id)sender;
- (IBAction)selectDefaultPreset:(id)sender;
-- (IBAction)renamePreset:(id)sender;
- (IBAction)deletePreset:(id)sender;
- (IBAction)reloadPreset:(id)sender;
diff --git a/macosx/HBController.m b/macosx/HBController.m
index 15ea6bd07..12eb06d7b 100644
--- a/macosx/HBController.m
+++ b/macosx/HBController.m
@@ -164,10 +164,6 @@
// 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__
@@ -214,49 +210,21 @@
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];
@@ -557,8 +525,7 @@
{
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
@@ -646,23 +613,23 @@
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;
@@ -670,7 +637,7 @@
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
@@ -1102,27 +1069,25 @@
/**
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])
{
@@ -1133,7 +1098,7 @@
[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])
{
@@ -1144,17 +1109,11 @@
[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);
}
}
@@ -1173,22 +1132,12 @@
{
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];
+ }
+ }];
}
}
@@ -1224,26 +1173,16 @@
{
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];
@@ -1260,17 +1199,12 @@
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];
}
@@ -1326,7 +1260,7 @@
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)
{
@@ -1338,7 +1272,12 @@
[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
{
@@ -1346,17 +1285,6 @@
}
}
-- (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];
@@ -1493,19 +1421,14 @@
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
@@ -1526,21 +1449,16 @@
[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 -
diff --git a/macosx/HBCore.m b/macosx/HBCore.m
index 160975ada..6c259e25a 100644
--- a/macosx/HBCore.m
+++ b/macosx/HBCore.m
@@ -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;
}
}
diff --git a/macosx/HBFiltersViewController.m b/macosx/HBFiltersViewController.m
index 77139d6ec..83b960b97 100644
--- a/macosx/HBFiltersViewController.m
+++ b/macosx/HBFiltersViewController.m
@@ -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
index 3f0c6e564..000000000
--- a/macosx/HBHUDButtonCell.h
+++ /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
index a5e4119ec..000000000
--- a/macosx/HBHUDButtonCell.m
+++ /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
diff --git a/macosx/HBHUDView.h b/macosx/HBHUDView.h
index 0ea5f3112..b453ae374 100644
--- a/macosx/HBHUDView.h
+++ b/macosx/HBHUDView.h
@@ -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
diff --git a/macosx/HBHUDView.m b/macosx/HBHUDView.m
index 1d6079d96..a03eb427a 100644
--- a/macosx/HBHUDView.m
+++ b/macosx/HBHUDView.m
@@ -6,10 +6,7 @@
#import "HBHUDView.h"
-@interface HBHUDVisualEffectsView : NSVisualEffectView
-@end
-
-@implementation HBHUDVisualEffectsView
+@implementation HBHUDView
- (instancetype)initWithFrame:(NSRect)frame
{
@@ -35,46 +32,3 @@
}
@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
diff --git a/macosx/HBJob+HBJobConversion.m b/macosx/HBJob+HBJobConversion.m
index 9895a3adc..ecef901e0 100644
--- a/macosx/HBJob+HBJobConversion.m
+++ b/macosx/HBJob+HBJobConversion.m
@@ -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;
@@ -271,7 +271,7 @@
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;
diff --git a/macosx/HBJob.m b/macosx/HBJob.m
index 1644a7fcf..09193a847 100644
--- a/macosx/HBJob.m
+++ b/macosx/HBJob.m
@@ -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)
{
diff --git a/macosx/HBOutputFileWriter.m b/macosx/HBOutputFileWriter.m
index fffe9478b..cbd4e9977 100644
--- a/macosx/HBOutputFileWriter.m
+++ b/macosx/HBOutputFileWriter.m
@@ -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;
@@ -43,6 +44,11 @@
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]]];
}
diff --git a/macosx/HBPictureController.m b/macosx/HBPictureController.m
index 0014f687a..fc0eb195a 100644
--- a/macosx/HBPictureController.m
+++ b/macosx/HBPictureController.m
@@ -6,8 +6,7 @@
#import "HBPictureController.h"
-@import HandBrakeKit.HBFilters;
-@import HandBrakeKit.HBPicture;
+@import HandBrakeKit;
static void *HBPictureControllerContext = &HBPictureControllerContext;
diff --git a/macosx/HBPictureViewController.m b/macosx/HBPictureViewController.m
index d7a686a7b..52beb8013 100644
--- a/macosx/HBPictureViewController.m
+++ b/macosx/HBPictureViewController.m
@@ -6,7 +6,7 @@
#import "HBPictureViewController.h"
-@import HandBrakeKit.HBPicture;
+@import HandBrakeKit;
static void *HBPictureViewControllerContext = &HBPictureViewControllerContext;
diff --git a/macosx/HBPlayerHUDController.m b/macosx/HBPlayerHUDController.m
index 3524f79e3..98ab96fa5 100644
--- a/macosx/HBPlayerHUDController.m
+++ b/macosx/HBPlayerHUDController.m
@@ -36,12 +36,6 @@
{
[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]};
}
diff --git a/macosx/HBPreferencesController.m b/macosx/HBPreferencesController.m
index 18bb86257..2141b0f54 100644
--- a/macosx/HBPreferencesController.m
+++ b/macosx/HBPreferencesController.m
@@ -191,7 +191,7 @@
[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];
@@ -199,9 +199,9 @@
// 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"];
}
}];
}
diff --git a/macosx/HBPresetsViewController.m b/macosx/HBPresetsViewController.m
index 95688424f..0c1a8abe7 100644
--- a/macosx/HBPresetsViewController.m
+++ b/macosx/HBPresetsViewController.m
@@ -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];
diff --git a/macosx/HBPreviewController.m b/macosx/HBPreviewController.m
index d85cdc4d9..fb0105f23 100644
--- a/macosx/HBPreviewController.m
+++ b/macosx/HBPreviewController.m
@@ -12,7 +12,6 @@
#import "HBPreviewView.h"
#import "HBPlayer.h"
-#import "HBQTKitPlayer.h"
#import "HBAVPlayer.h"
#import "HBPictureHUDController.h"
@@ -548,11 +547,7 @@
- (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
index d87473683..000000000
--- a/macosx/HBQTKitPlayer.h
+++ /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
index 6c464426b..000000000
--- a/macosx/HBQTKitPlayer.m
+++ /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
diff --git a/macosx/HBQueueController.h b/macosx/HBQueueController.h
index 3584f7737..597b68a1d 100644
--- a/macosx/HBQueueController.h
+++ b/macosx/HBQueueController.h
@@ -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;
diff --git a/macosx/HBQueueController.m b/macosx/HBQueueController.m
index d2506ef01..b67c85063 100644
--- a/macosx/HBQueueController.m
+++ b/macosx/HBQueueController.m
@@ -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
@@ -82,14 +82,12 @@
// 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;
@@ -882,39 +880,29 @@
#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.
@@ -1098,10 +1086,18 @@
[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];
+ }
+ }];
}
}
@@ -1111,22 +1107,6 @@
[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
*/
@@ -1230,28 +1210,20 @@
[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];
+ }
+ }];
}
/**
@@ -1389,10 +1361,12 @@
[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)
{
@@ -1403,17 +1377,6 @@
[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];
diff --git a/macosx/HBRenamePresetController.m b/macosx/HBRenamePresetController.m
index 2b788da32..baeee738e 100644
--- a/macosx/HBRenamePresetController.m
+++ b/macosx/HBRenamePresetController.m
@@ -41,10 +41,7 @@
{
[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];
}
}
diff --git a/macosx/HBSubtitlesController.m b/macosx/HBSubtitlesController.m
index 4576c6601..fd44ef59d 100644
--- a/macosx/HBSubtitlesController.m
+++ b/macosx/HBSubtitlesController.m
@@ -7,8 +7,7 @@
#import "HBSubtitlesController.h"
#import "HBSubtitlesDefaultsController.h"
-@import HandBrakeKit.HBSubtitles;
-@import HandBrakeKit.HBSubtitlesDefaults;
+@import HandBrakeKit;
@interface HBSubtitlesController ()
@@ -62,22 +61,13 @@
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
diff --git a/macosx/HBSubtitlesDefaultsController.m b/macosx/HBSubtitlesDefaultsController.m
index 1acac3c69..47f650dfa 100644
--- a/macosx/HBSubtitlesDefaultsController.m
+++ b/macosx/HBSubtitlesDefaultsController.m
@@ -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
diff --git a/macosx/HBTitleSelectionController.m b/macosx/HBTitleSelectionController.m
index b0f3e088a..05d44354f 100644
--- a/macosx/HBTitleSelectionController.m
+++ b/macosx/HBTitleSelectionController.m
@@ -6,7 +6,7 @@
#import "HBTitleSelectionController.h"
-@import HandBrakeKit.HBTitle;
+@import HandBrakeKit;
@interface HBTitleSelection : NSObject
@property (nonatomic, readonly) HBTitle *title;
diff --git a/macosx/HBVideo+UIAdditions.h b/macosx/HBVideo+UIAdditions.h
index beb0584b5..5ce7648a7 100644
--- a/macosx/HBVideo+UIAdditions.h
+++ b/macosx/HBVideo+UIAdditions.h
@@ -50,3 +50,13 @@
@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
diff --git a/macosx/HBVideo+UIAdditions.m b/macosx/HBVideo+UIAdditions.m
index 1a07bb810..0c0410b3a 100644
--- a/macosx/HBVideo+UIAdditions.m
+++ b/macosx/HBVideo+UIAdditions.m
@@ -413,3 +413,31 @@
}
@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
diff --git a/macosx/HBVideoController.m b/macosx/HBVideoController.m
index 355f24ad9..a08d87bcc 100644
--- a/macosx/HBVideoController.m
+++ b/macosx/HBVideoController.m
@@ -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;
diff --git a/macosx/HandBrake.xcodeproj/project.pbxproj b/macosx/HandBrake.xcodeproj/project.pbxproj
index b4cbea8ad..19283ff9f 100644
--- a/macosx/HandBrake.xcodeproj/project.pbxproj
+++ b/macosx/HandBrake.xcodeproj/project.pbxproj
@@ -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 */; };
@@ -123,7 +119,6 @@
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 */; };
@@ -193,9 +188,9 @@
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 */; };
@@ -234,7 +229,6 @@
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 */; };
@@ -316,7 +310,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 273F20CB14ADC89A0021BE6D /* Growl.framework in CopyFiles */,
273F20CC14ADC8A10021BE6D /* Sparkle.framework in CopyFiles */,
A9736F181C7DA5FE008F1D18 /* HandBrakeKit.framework in CopyFiles */,
);
@@ -379,9 +372,7 @@
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>"; };
@@ -435,7 +426,6 @@
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>"; };
@@ -465,14 +455,14 @@
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>"; };
@@ -560,16 +550,12 @@
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>"; };
@@ -674,8 +660,6 @@
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 */,
@@ -837,7 +821,6 @@
273F203B14ADBC210021BE6D /* Cocoa.framework */,
273F203214ADB9F00021BE6D /* CoreServices.framework */,
273F202214ADB8650021BE6D /* IOKit.framework */,
- 273F20C714ADC4FF0021BE6D /* QTKit.framework */,
A9E1467A16BC2ABD00C307BC /* QuartzCore.framework */,
273F203D14ADBC210021BE6D /* Other Frameworks */,
273F202714ADB8BE0021BE6D /* libbz2.dylib */,
@@ -886,7 +869,6 @@
273F20CE14ADC9210021BE6D /* Bundled */ = {
isa = PBXGroup;
children = (
- 273F20BF14ADC1250021BE6D /* Growl.framework */,
273F20C014ADC1250021BE6D /* Sparkle.framework */,
);
name = Bundled;
@@ -1019,7 +1001,6 @@
A9CE0A931F57EC4600724577 /* HBImageUtilities.h */,
A9CE0A911F57EC3400724577 /* HBImageUtilities.m */,
A9160A331AE7A165009A7818 /* HBCodingUtilities.h */,
- A9160A341AE7A165009A7818 /* HBCodingUtilities.m */,
A997D8EB1A4ABB0900E19B6F /* HBPresetCoding.h */,
A975C08C1AE8C5270061870D /* HBStateFormatter.h */,
A975C08D1AE8C5270061870D /* HBStateFormatter.m */,
@@ -1075,8 +1056,6 @@
A9CAC26E1CCB6B0F00A39E72 /* HBPlayer.h */,
A9A0CBE51CCEA1D10045B3DF /* HBPlayerTrack.h */,
A9A0CBE61CCEA1D10045B3DF /* HBPlayerTrack.m */,
- A9350F4D1CCA7C3B0089F970 /* HBQTKitPlayer.h */,
- A9350F4E1CCA7C3B0089F970 /* HBQTKitPlayer.m */,
A98036CB1CCA91DD007661AA /* HBAVPlayer.h */,
A98036CC1CCA91DD007661AA /* HBAVPlayer.m */,
);
@@ -1292,10 +1271,8 @@
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 */,
@@ -1587,8 +1564,6 @@
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 */,
@@ -1616,7 +1591,6 @@
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 */,
@@ -1632,6 +1606,7 @@
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 */,
@@ -1678,7 +1653,6 @@
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;
@@ -1949,7 +1923,6 @@
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;
@@ -1981,7 +1954,7 @@
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",
@@ -2014,7 +1987,6 @@
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;
@@ -2042,7 +2014,7 @@
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",
@@ -2130,7 +2102,6 @@
"\"$(EXTERNAL_BUILD)/libhb\"",
"\"$(EXTERNAL_BUILD)/contrib/lib\"",
);
- MACOSX_DEPLOYMENT_TARGET = 10.7;
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
@@ -2160,7 +2131,6 @@
"\"$(EXTERNAL_BUILD)/libhb\"",
"\"$(EXTERNAL_BUILD)/contrib/lib\"",
);
- MACOSX_DEPLOYMENT_TARGET = 10.7;
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
@@ -2237,7 +2207,6 @@
"\"$(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;
@@ -2296,7 +2265,6 @@
"\"$(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)";
@@ -2349,7 +2317,6 @@
);
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;
@@ -2395,7 +2362,6 @@
);
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)";
@@ -2425,7 +2391,6 @@
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;
@@ -2459,7 +2424,7 @@
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",
@@ -2559,7 +2524,6 @@
"\"$(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;
@@ -2613,7 +2577,6 @@
);
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;
@@ -2649,7 +2612,6 @@
"\"$(EXTERNAL_BUILD)/libhb\"",
"\"$(EXTERNAL_BUILD)/contrib/lib\"",
);
- MACOSX_DEPLOYMENT_TARGET = 10.7;
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
@@ -2676,7 +2638,6 @@
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;
@@ -2706,7 +2667,7 @@
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",
@@ -2800,7 +2761,6 @@
"\"$(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)";
@@ -2847,7 +2807,6 @@
);
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)";
@@ -2882,7 +2841,6 @@
"\"$(EXTERNAL_BUILD)/libhb\"",
"\"$(EXTERNAL_BUILD)/contrib/lib\"",
);
- MACOSX_DEPLOYMENT_TARGET = 10.7;
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
diff --git a/macosx/Info.plist.m4 b/macosx/Info.plist.m4
index 8b511b40b..96c7a98de 100644
--- a/macosx/Info.plist.m4
+++ b/macosx/Info.plist.m4
@@ -70,5 +70,7 @@ GPLv2 license.</string>
<string>dsa_pub.pem</string>
<key>SUAllowsAutomaticUpdates</key>
<false/>
+ <key>NSUserNotificationAlertStyle</key>
+ <string>alert</string>
</dict>
</plist>
diff --git a/test/test.c b/test/test.c
index 1e5ad2e47..0cfa90432 100644
--- a/test/test.c
+++ b/test/test.c
@@ -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);
}
/****************************************************************************