diff --git a/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m b/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m index 3526f0c7..42e6fa5f 100644 --- a/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m +++ b/PlayTools/Controls/PTFakeTouch/NSObject+Swizzle.m @@ -47,19 +47,28 @@ - (void) swizzleInstanceMethod:(SEL)origSelector withMethod:(SEL)newSelector + (void) load { - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - // TODO: UINSview + // TODO: UINSview - if ([[PlaySettings shared] adaptiveDisplay]) { - [objc_getClass("FBSSceneSettings") swizzleInstanceMethod:@selector(frame) withMethod:@selector(hook_frame)]; - [objc_getClass("FBSSceneSettings") swizzleInstanceMethod:@selector(bounds) withMethod:@selector(hook_bounds)]; - [objc_getClass("FBSDisplayMode") swizzleInstanceMethod:@selector(size) withMethod:@selector(hook_size)]; - } + if ([[PlaySettings shared] adaptiveDisplay]) { + [objc_getClass("FBSSceneSettings") swizzleInstanceMethod:@selector(frame) withMethod:@selector(hook_frame)]; + [objc_getClass("FBSSceneSettings") swizzleInstanceMethod:@selector(bounds) withMethod:@selector(hook_bounds)]; + [objc_getClass("FBSDisplayMode") swizzleInstanceMethod:@selector(size) withMethod:@selector(hook_size)]; + } + + [objc_getClass("_UIMenuBuilder") swizzleInstanceMethod:sel_getUid("initWithRootMenu:") withMethod:@selector(initWithRootMenuHook:)]; + + [objc_getClass("IOSViewController") swizzleInstanceMethod:@selector(prefersPointerLocked) withMethod:@selector(hook_prefersPointerLocked)]; +} - [objc_getClass("IOSViewController") swizzleInstanceMethod:@selector(prefersPointerLocked) withMethod:@selector(hook_prefersPointerLocked)]; - [self swizzleInstanceMethod:@selector(init) withMethod:@selector(hook_init)]; - }); +bool menuWasCreated = false; +- (id) initWithRootMenuHook:(id)rootMenu { + self = [self initWithRootMenuHook:rootMenu]; + if (!menuWasCreated) { + [PlayCover initMenuWithMenu: self]; + menuWasCreated = TRUE; + } + + return self; } - (BOOL) hook_prefersPointerLocked { @@ -78,12 +87,4 @@ - (CGSize) hook_size { return [PlayScreen sizeAspectRatio:[self hook_size]]; } -- (id) hook_init { - if ([[self class] isEqual: NSClassFromString(@"_UIMenuBuilder")]) { - [PlayCover initMenuWithMenu: self]; - } - - return self; -} - @end