Browse Source

Only allow the FLEXWindow to become key when it has a modal presented.

See https://github.com/Flipboard/FLEX/issues/64 for a more detailed explanation of the motivation for this change.
Ryan Olson 11 years ago
parent
commit
f7c482ceed

+ 6 - 0
Classes/ExplorerToolbar/FLEXManager.m

@@ -111,6 +111,12 @@
     return [self.explorerViewController shouldReceiveTouchAtWindowPoint:pointInWindow];
 }
 
+- (BOOL)canBecomeKeyWindow
+{
+    // Only when the explorer is showing a modal, because we want to affect the status bar and receive key input there.
+    return self.explorerViewController.presentedViewController != nil;
+}
+
 
 #pragma mark - FLEXExplorerViewControllerDelegate
 

+ 1 - 0
Classes/ExplorerToolbar/FLEXWindow.h

@@ -19,5 +19,6 @@
 @protocol FLEXWindowEventDelegate <NSObject>
 
 - (BOOL)shouldHandleTouchAtPoint:(CGPoint)pointInWindow;
+- (BOOL)canBecomeKeyWindow;
 
 @end

+ 14 - 2
Classes/ExplorerToolbar/FLEXWindow.m

@@ -39,6 +39,11 @@
     return [self isKeyWindow];
 }
 
+- (BOOL)canBecomeKeyWindow
+{
+    return [self.eventDelegate canBecomeKeyWindow];
+}
+
 + (void)initialize
 {
     // This adds a method (superclass override) at runtime which gives us the status bar behavior we want.
@@ -48,8 +53,15 @@
     NSString *canAffectSelectorString = [@[@"_can", @"Affect", @"Status", @"Bar", @"Appearance"] componentsJoinedByString:@""];
     SEL canAffectSelector = NSSelectorFromString(canAffectSelectorString);
     Method shouldAffectMethod = class_getInstanceMethod(self, @selector(shouldAffectStatusBarAppearance));
-    IMP implementation = method_getImplementation(shouldAffectMethod);
-    class_addMethod(self, canAffectSelector, implementation, method_getTypeEncoding(shouldAffectMethod));
+    IMP canAffectImplementation = method_getImplementation(shouldAffectMethod);
+    class_addMethod(self, canAffectSelector, canAffectImplementation, method_getTypeEncoding(shouldAffectMethod));
+
+    // One more...
+    NSString *canBecomeKeySelectorString = [NSString stringWithFormat:@"_%@", NSStringFromSelector(@selector(canBecomeKeyWindow))];
+    SEL canBecomeKeySelector = NSSelectorFromString(canBecomeKeySelectorString);
+    Method canBecomeKeyMethod = class_getInstanceMethod(self, @selector(canBecomeKeyWindow));
+    IMP canBecomeKeyImplementation = method_getImplementation(canBecomeKeyMethod);
+    class_addMethod(self, canBecomeKeySelector, canBecomeKeyImplementation, method_getTypeEncoding(canBecomeKeyMethod));
 }
 
 @end