From 3529b460b80d605c17a2f9388bffda3e3cabb05e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=CC=81bor=20Librecz?= Date: Sun, 28 May 2017 11:38:07 +0200 Subject: [PATCH] Fix loading --- BatteryExtra/loader.m | 9 ++------- Reloader/main.m | 39 +++++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 25 deletions(-) diff --git a/BatteryExtra/loader.m b/BatteryExtra/loader.m index 93e04ba..e8e077a 100644 --- a/BatteryExtra/loader.m +++ b/BatteryExtra/loader.m @@ -71,13 +71,8 @@ + (void)load { else NSLog(@"%@: Could not swizzle SystemUIServer!", bundleName); - if (didSwizzle && !didSwizzleMenuItem) { - if ([BatterySUISStartupObject reloadMenuExtra] == 0) { - NSLog(@"%@: MenuExtra was reloaded successfully!", bundleName); - [BatterySUISStartupObject - swizzleMenuExtra:[menuExtraMainBundle principalClass]]; - } - } + if (didSwizzle && [BatterySUISStartupObject reloadMenuExtra] == 0) + NSLog(@"%@: SystemUIServer was reloaded successfully!", bundleName); } - (id)loadMenuExtra:(id)arg1 withData:(id)arg2 atPosition:(long long)arg3 { diff --git a/Reloader/main.m b/Reloader/main.m index b6699b1..187010c 100644 --- a/Reloader/main.m +++ b/Reloader/main.m @@ -18,36 +18,39 @@ int CoreMenuExtraAddMenuExtra(CFURLRef path, int position, int arg2, int arg3, int main(int argc, const char *argv[]) { @autoreleasepool { - NSBundle *bundle = [NSBundle - bundleWithPath:@"/System/Library/CoreServices/SystemUIServer.app"]; - NSArray *extras = - [NSArray arrayWithContentsOfFile:[bundle pathForResource:@"Extras.plist" - ofType:nil]]; - - NSString *ID = @""; - for (NSDictionary *extra in extras) { - if ([extra[@"path"] - isEqualToString:[NSString stringWithUTF8String:argv[1]]]) { - ID = extra[@"id"]; - } - } - - NSURL *menu = - [NSURL fileURLWithPath:[NSString stringWithUTF8String:argv[1]]]; - void *menuExtra = NULL; if ((CoreMenuExtraGetMenuExtra( (__bridge CFStringRef)[NSString stringWithUTF8String:argv[2]], &menuExtra) == 0) && menuExtra) { + CoreMenuExtraRemoveMenuExtra(menuExtra, 0); + // Can't reload menuExtra nicely (rdar://32445578) + system("killall -KILL SystemUIServer"); + + NSBundle *bundle = [NSBundle + bundleWithPath:@"/System/Library/CoreServices/SystemUIServer.app"]; + NSArray *extras = [NSArray + arrayWithContentsOfFile:[bundle pathForResource:@"Extras.plist" + ofType:nil]]; + + NSString *ID = @""; + for (NSDictionary *extra in extras) { + if ([extra[@"path"] + isEqualToString:[NSString stringWithUTF8String:argv[1]]]) { + ID = extra[@"id"]; + } + } + + NSURL *menu = + [NSURL fileURLWithPath:[NSString stringWithUTF8String:argv[1]]]; + CoreMenuExtraAddMenuExtra((__bridge CFURLRef)menu, [ID intValue], 0, 0, 0, 0); return 0; } - } return 1;