SCR: Mac: replace all deprecated Mac APIs as of OS 10.8

This commit is contained in:
Charlie Fenton 2017-02-27 06:31:03 -08:00
parent 91784e996c
commit ab38f2ffa1
4 changed files with 24 additions and 52 deletions

View File

@ -86,7 +86,6 @@ protected:
int GetBrandID(void);
char* PersistentFGets(char *buf, size_t buflen, FILE *f);
pid_t FindProcessPID(char* name, pid_t thePID);
OSErr GetpathToBOINCManagerApp(char* path, int maxLen);
bool SetError( bool bErrorMode, unsigned int hrError );
void setSSMessageText(const char *msg);
void updateSSMessageText(char *msg);

View File

@ -38,6 +38,8 @@
NSString *mChangePeriodString;
}
@property (strong) NSArray *NIBTopLevel;
- (IBAction)closeSheetSave:(id) sender;
- (IBAction)closeSheetCancel:(id) sender;

View File

@ -27,6 +27,7 @@
#include <IOKit/hidsystem/IOHIDLib.h>
#include <IOKit/hidsystem/IOHIDParameter.h>
#include <IOKit/hidsystem/event_status_driver.h>
#include "mac_util.h"
#ifndef NSInteger
#if __LP64__ || NS_BUILD_32_LIKE_64
@ -40,8 +41,6 @@ typedef int NSInteger;
typedef float CGFloat;
#endif
static int compareOSVersionTo(int toMajor, int toMinor);
void print_to_log_file(const char *format, ...);
void strip_cr(char *buf);
@ -507,8 +506,24 @@ int signof(float x) {
int period;
// if we haven't loaded our configure sheet, load the nib named MyScreenSaver.nib
if (!mConfigureSheet)
[ NSBundle loadNibNamed:@"BOINCSaver" owner:self ];
if (!mConfigureSheet) {
if (! [NSBundle respondsToSelector: @selector(loadNibNamed: owner: topLevelObjects:)]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-method-access"
// [NSBundle loadNibNamed: owner: topLevelObjects:] is not available before OS 10.8
[ NSBundle loadNibNamed:@"BOINCSaver" owner:self topLevelObjects:&_NIBTopLevel ];
#pragma clang diagnostic pop
}
#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1080
else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
// [NSBundle loadNibNamed: owner:] is deprecated in OS 10.8
[ NSBundle loadNibNamed:@"BOINCSaver" owner:self ];
#pragma clang diagnostic pop
}
#endif
}
// set the UI state
[ mGoToBlankCheckbox setState:gGoToBlank ];
@ -604,27 +619,3 @@ Bad:
}
@end
static int compareOSVersionTo(int toMajor, int toMinor) {
SInt32 major, minor;
OSStatus err = noErr;
err = Gestalt(gestaltSystemVersionMajor, &major);
if (err != noErr) {
fprintf(stderr, "Gestalt(gestaltSystemVersionMajor) returned error %ld\n", (long)err);
fflush(stderr);
return -1; // gestaltSystemVersionMajor selector was not available before OS 10.4
}
if (major < toMajor) return -1;
if (major > toMajor) return 1;
err = Gestalt(gestaltSystemVersionMinor, &minor);
if (err != noErr) {
fprintf(stderr, "Gestalt(gestaltSystemVersionMinor) returned error %ld\n", (long)err);
fflush(stderr);
return -1; // gestaltSystemVersionMajor selector was not available before OS 10.4
}
if (minor < toMinor) return -1;
if (minor > toMinor) return 1;
return 0;
}

View File

@ -51,6 +51,7 @@ extern "C" {
#include "screensaver.h"
#include "diagnostics.h"
#include "str_replace.h"
#include "mac_util.h"
//#include <drivers/event_status_driver.h>
@ -388,7 +389,7 @@ OSStatus CScreensaver::initBOINCApp() {
// If not at default path, search for it by creator code and bundle identifier
if (!boinc_file_exists(boincPath)) {
err = GetpathToBOINCManagerApp(boincPath, sizeof(boincPath));
err = GetPathToAppFromID('BNC!', CFSTR("edu.berkeley.boinc"), boincPath, sizeof(boincPath));
if (err) {
saverState = SaverState_CantLaunchCoreClient;
return err;
@ -810,7 +811,7 @@ int CScreensaver::GetBrandID()
if (f == NULL) {
// If we couldn't find our Branding file in the BOINC Data Directory,
// look in our application bundle
err = GetpathToBOINCManagerApp(buf, sizeof(buf));
err = GetPathToAppFromID('BNC!', CFSTR("edu.berkeley.boinc"), buf, sizeof(buf));
if (err == noErr) {
strcat(buf, "/Contents/Resources/Branding");
f = fopen(buf, "r");
@ -880,27 +881,6 @@ pid_t CScreensaver::FindProcessPID(char* name, pid_t thePID)
}
OSErr CScreensaver::GetpathToBOINCManagerApp(char* path, int maxLen)
{
CFStringRef bundleID = CFSTR("edu.berkeley.boinc");
OSType creator = 'BNC!';
CFURLRef appURL = NULL;
OSStatus status = noErr;
status = LSFindApplicationForInfo(creator, bundleID, NULL, NULL, &appURL);
if (status == noErr) {
CFStringRef CFPath = CFURLCopyFileSystemPath(appURL, kCFURLPOSIXPathStyle);
CFStringGetCString(CFPath, path, maxLen, kCFStringEncodingUTF8);
CFRelease(CFPath);
}
if (appURL) {
CFRelease(appURL);
}
return status;
}
// Send a Quit AppleEvent to the process which called this module
// (i.e., tell the ScreenSaver engine to quit)
OSErr CScreensaver::KillScreenSaver() {