@ -781,47 +781,64 @@ bool SetStartOnSystemStartup(bool fAutoStart)
@@ -781,47 +781,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 , & currentItemURL , nullptr ) ;
else
LSSharedFileListItemResolve ( item , resolutionFlags , & currentItemURL , nullptr ) ;
# endif
# else
LSSharedFileListItemResolve ( item , resolutionFlags , & currentItemURL , nullptr ) ;
LSSharedFileListItemResolve ( item , resolutionFlags , & currentItemURL , 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 ) ;
@ -833,6 +850,8 @@ bool SetStartOnSystemStartup(bool fAutoStart)
@@ -833,6 +850,8 @@ bool SetStartOnSystemStartup(bool fAutoStart)
// remove item
LSSharedFileListItemRemove ( loginItems , foundItem ) ;
}
CFRelease ( bitcoinAppUrl ) ;
return true ;
}
# pragma GCC diagnostic pop