|
|
|
@ -408,10 +408,61 @@ bool SetStartOnSystemStartup(bool fAutoStart)
@@ -408,10 +408,61 @@ bool SetStartOnSystemStartup(bool fAutoStart)
|
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
|
|
|
|
|
// TODO: OSX startup stuff; see:
|
|
|
|
|
// https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Articles/CustomLogin.html
|
|
|
|
|
|
|
|
|
|
#elif defined(Q_OS_MAC) |
|
|
|
|
// based on: https://github.com/Mozketo/LaunchAtLoginController/blob/master/LaunchAtLoginController.m
|
|
|
|
|
|
|
|
|
|
#include <CoreFoundation/CoreFoundation.h> |
|
|
|
|
#include <CoreServices/CoreServices.h> |
|
|
|
|
|
|
|
|
|
LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl); |
|
|
|
|
LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl) |
|
|
|
|
{ |
|
|
|
|
// loop through the list of startup items and try to find the bitcoin app
|
|
|
|
|
CFArrayRef listSnapshot = LSSharedFileListCopySnapshot(list, NULL); |
|
|
|
|
for(int i = 0; i < CFArrayGetCount(listSnapshot); i++) { |
|
|
|
|
LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(listSnapshot, i); |
|
|
|
|
UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes; |
|
|
|
|
CFURLRef currentItemURL = NULL; |
|
|
|
|
LSSharedFileListItemResolve(item, resolutionFlags, ¤tItemURL, NULL); |
|
|
|
|
if(currentItemURL && CFEqual(currentItemURL, findUrl)) { |
|
|
|
|
// found
|
|
|
|
|
CFRelease(currentItemURL); |
|
|
|
|
return item; |
|
|
|
|
} |
|
|
|
|
if(currentItemURL) { |
|
|
|
|
CFRelease(currentItemURL); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool GetStartOnSystemStartup() |
|
|
|
|
{ |
|
|
|
|
CFURLRef bitcoinAppUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle()); |
|
|
|
|
LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); |
|
|
|
|
LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitcoinAppUrl); |
|
|
|
|
return !!foundItem; // return boolified object
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool SetStartOnSystemStartup(bool fAutoStart) |
|
|
|
|
{ |
|
|
|
|
CFURLRef bitcoinAppUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle()); |
|
|
|
|
LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); |
|
|
|
|
LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitcoinAppUrl); |
|
|
|
|
|
|
|
|
|
if(fAutoStart && !foundItem) { |
|
|
|
|
// add bitcoin app to startup item list
|
|
|
|
|
LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemBeforeFirst, NULL, NULL, bitcoinAppUrl, NULL, NULL); |
|
|
|
|
} |
|
|
|
|
else if(!fAutoStart && foundItem) { |
|
|
|
|
// remove item
|
|
|
|
|
LSSharedFileListItemRemove(loginItems, foundItem); |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
|
|
|
|
|
bool GetStartOnSystemStartup() { return false; } |
|
|
|
|
bool SetStartOnSystemStartup(bool fAutoStart) { return false; } |
|
|
|
|