diff options
Diffstat (limited to 'sbreload.m')
-rw-r--r-- | sbreload.m | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -71,6 +71,12 @@ -(void)sendActions:(NSSet*)actions withResult:(id)result; @end +@interface PBSSystemService ++(id)sharedInstance; +-(void)relaunch; +-(void)relaunchBackboardd; +@end + typedef enum { None = 0, RestartRenderServer = (1 << 0), // also relaunch backboardd @@ -260,6 +266,21 @@ int main(int argc, const char *argv[]) { _assert(argc == 1, "usage: sbreload"); if (kCFCoreFoundationVersionNumber >= 1443.00) { + dlopen("/System/Library/PrivateFrameworks/PineBoardServices.framework/PineBoardServices", RTLD_LAZY); + Class $PBSSystemService = objc_getClass("PBSSystemService"); + if ($PBSSystemService) { + pid_t pb_pid = launch_get_job_pid("com.apple.PineBoard"); + if ($PBSSystemService) { + [[$PBSSystemService sharedInstance] relaunchBackboardd]; + for (int i=0; i<100; i++) { + if (kill(pb_pid, 0)) { + return 0; + } + usleep(1000); + } + } + return -1; + } dlopen("/System/Library/PrivateFrameworks/FrontBoardServices.framework/FrontBoardServices", RTLD_LAZY); dlopen("/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices", RTLD_LAZY); Class $SBSRelaunchAction = objc_getClass("SBSRelaunchAction"); |