|
|
|
@ -780,47 +780,64 @@ bool SetStartOnSystemStartup(bool fAutoStart)
@@ -780,47 +780,64 @@ bool SetStartOnSystemStartup(bool fAutoStart)
|
|
|
|
|
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, nullptr); |
|
|
|
|
if (listSnapshot == nullptr) { |
|
|
|
|
return nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// loop through the list of startup items and try to find the bitcoin app
|
|
|
|
|
for(int i = 0; i < CFArrayGetCount(listSnapshot); i++) { |
|
|
|
|
LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(listSnapshot, i); |
|
|
|
|
UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes; |
|
|
|
|
CFURLRef currentItemURL = nullptr; |
|
|
|
|
|
|
|
|
|
#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED >= 10100 |
|
|
|
|
if(&LSSharedFileListItemCopyResolvedURL) |
|
|
|
|
currentItemURL = LSSharedFileListItemCopyResolvedURL(item, resolutionFlags, nullptr); |
|
|
|
|
if(&LSSharedFileListItemCopyResolvedURL) |
|
|
|
|
currentItemURL = LSSharedFileListItemCopyResolvedURL(item, resolutionFlags, nullptr); |
|
|
|
|
#if defined(MAC_OS_X_VERSION_MIN_REQUIRED) && MAC_OS_X_VERSION_MIN_REQUIRED < 10100 |
|
|
|
|
else |
|
|
|
|
LSSharedFileListItemResolve(item, resolutionFlags, ¤tItemURL, nullptr); |
|
|
|
|
else |
|
|
|
|
LSSharedFileListItemResolve(item, resolutionFlags, ¤tItemURL, nullptr); |
|
|
|
|
#endif |
|
|
|
|
#else |
|
|
|
|
LSSharedFileListItemResolve(item, resolutionFlags, ¤tItemURL, nullptr); |
|
|
|
|
LSSharedFileListItemResolve(item, resolutionFlags, ¤tItemURL, nullptr); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if(currentItemURL && CFEqual(currentItemURL, findUrl)) { |
|
|
|
|
// found
|
|
|
|
|
CFRelease(currentItemURL); |
|
|
|
|
return item; |
|
|
|
|
} |
|
|
|
|
if(currentItemURL) { |
|
|
|
|
if (CFEqual(currentItemURL, findUrl)) { |
|
|
|
|
// found
|
|
|
|
|
CFRelease(listSnapshot); |
|
|
|
|
CFRelease(currentItemURL); |
|
|
|
|
return item; |
|
|
|
|
} |
|
|
|
|
CFRelease(currentItemURL); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CFRelease(listSnapshot); |
|
|
|
|
return nullptr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool GetStartOnSystemStartup() |
|
|
|
|
{ |
|
|
|
|
CFURLRef bitcoinAppUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle()); |
|
|
|
|
if (bitcoinAppUrl == nullptr) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
LSSharedFileListRef loginItems = LSSharedFileListCreate(nullptr, kLSSharedFileListSessionLoginItems, nullptr); |
|
|
|
|
LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitcoinAppUrl); |
|
|
|
|
|
|
|
|
|
CFRelease(bitcoinAppUrl); |
|
|
|
|
return !!foundItem; // return boolified object
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool SetStartOnSystemStartup(bool fAutoStart) |
|
|
|
|
{ |
|
|
|
|
CFURLRef bitcoinAppUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle()); |
|
|
|
|
if (bitcoinAppUrl == nullptr) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
LSSharedFileListRef loginItems = LSSharedFileListCreate(nullptr, kLSSharedFileListSessionLoginItems, nullptr); |
|
|
|
|
LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitcoinAppUrl); |
|
|
|
|
|
|
|
|
@ -832,6 +849,8 @@ bool SetStartOnSystemStartup(bool fAutoStart)
@@ -832,6 +849,8 @@ bool SetStartOnSystemStartup(bool fAutoStart)
|
|
|
|
|
// remove item
|
|
|
|
|
LSSharedFileListItemRemove(loginItems, foundItem); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CFRelease(bitcoinAppUrl); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
#pragma GCC diagnostic pop |
|
|
|
|