diff options
-rw-r--r-- | Frameworks/PSMTabBar/PSMTabBarControl.h | 7 | ||||
-rw-r--r-- | Frameworks/PSMTabBar/PSMTabBarControl.m | 24 |
2 files changed, 25 insertions, 6 deletions
diff --git a/Frameworks/PSMTabBar/PSMTabBarControl.h b/Frameworks/PSMTabBar/PSMTabBarControl.h index d2cbc534..9aebddad 100644 --- a/Frameworks/PSMTabBar/PSMTabBarControl.h +++ b/Frameworks/PSMTabBar/PSMTabBarControl.h @@ -111,7 +111,12 @@ enum { BOOL _awakenedFromNib; NSInteger _tabBarWidth; NSTimer *_showHideAnimationTimer; - + + // Tracking last window state for update draws + BOOL _lastWindowIsMainCheck; + BOOL _lastAttachedWindowIsMainCheck; + BOOL _lastAppIsActiveCheck; + // drag and drop NSEvent *_lastMouseDownEvent; // keep this for dragging reference BOOL _didDrag; diff --git a/Frameworks/PSMTabBar/PSMTabBarControl.m b/Frameworks/PSMTabBar/PSMTabBarControl.m index ffac0255..2cc9334a 100644 --- a/Frameworks/PSMTabBar/PSMTabBarControl.m +++ b/Frameworks/PSMTabBar/PSMTabBarControl.m @@ -118,6 +118,10 @@ _cells = [[NSMutableArray alloc] initWithCapacity:10]; _controller = [[PSMTabBarController alloc] initWithTabBarControl:self]; _animationTimer = nil; + _lastWindowIsMainCheck = NO; + _lastAttachedWindowIsMainCheck = NO; + _lastAppIsActiveCheck = NO; + _lastMouseDownEvent = nil; // default config _currentStep = kPSMIsNotBeingResized; @@ -1805,13 +1809,23 @@ if ([[self delegate] respondsToSelector:@selector(tabView:tabBarDidHide:)]) { [[self delegate] tabView:[self tabView] tabBarDidHide:self]; } - } - // The above tasks only needs to be run once, so set a flag to ensure that - _awakenedFromNib = YES; + // The above tasks only needs to be run once, so set a flag to ensure that + _awakenedFromNib = YES; + } - // Allow the tab bar to redraw itself in result to window ordering/sheet/etc changes - [self setNeedsDisplay:YES]; + // Determine whether a draw update in response to window state change might be required + BOOL isMainWindow = [[self window] isMainWindow]; + BOOL attachedWindowIsMainWindow = [[[self window] attachedSheet] isMainWindow]; + BOOL isActiveApplication = [NSApp isActive]; + if (_lastWindowIsMainCheck != isMainWindow || _lastAttachedWindowIsMainCheck != attachedWindowIsMainWindow || _lastAppIsActiveCheck != isActiveApplication) { + _lastWindowIsMainCheck = isMainWindow; + _lastAttachedWindowIsMainCheck = attachedWindowIsMainWindow; + _lastAppIsActiveCheck = isActiveApplication; + + // Allow the tab bar to redraw itself in result to window ordering/sheet/etc changes + [self setNeedsDisplay:YES]; + } } #pragma mark - |