From 5995b428721dd89bbe9061d39e0c2d5ebd3d92d7 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Thu, 25 Dec 2014 17:37:18 +0100 Subject: [PATCH 1/5] fixed: popover positioning --- AppKit/_CPPopoverWindow.j | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index ce2a7898b..19bfa82ac 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -581,10 +581,12 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, - (void)_orderFront { - if (![self isVisible]) - [self _addFrameObserver]; + var wasVisible = [self isVisible]; [super _orderFront]; + + if (!wasVisible) + [self _addFrameObserver]; } - (void)_parentDidOrderInChild From 00ebc265d87f2d2cd778c31709d325ebdf174db3 Mon Sep 17 00:00:00 2001 From: daboe01 Date: Fri, 2 Jan 2015 19:35:09 +0100 Subject: [PATCH 2/5] make _targetRect an ivar --- AppKit/_CPPopoverWindow.j | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 19bfa82ac..d915b7bd5 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -64,6 +64,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, BOOL _isObservingFrame; BOOL _shouldPerformAnimation; CPInteger _implementedDelegateMethods; + CGRect _targetRect; CPWindow _targetWindow; JSObject _orderOutTransitionFunction; JSObject _transitionCompleteFunction; @@ -206,7 +207,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if (![_targetView window]) return; - var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + var point = [self computeOriginFromRect:_targetRect ofView:_targetView preferredEdge:[_windowView preferredEdge]]; [self setFrameOrigin:point]; } } @@ -369,6 +370,13 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _targetView = positioningView; } + if (positioningView !== _targetView) + { + [[_targetView window] removeChildWindow:self]; + [self _removeFrameObserver]; + _targetView = positioningView; + } + [self makeKeyAndOrderFront:nil]; /* @@ -382,6 +390,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [[_targetView window] addChildWindow:self ordered:CPWindowAbove]; _targetWindow = targetWindow; + _targetRect = aRect; if (!wasVisible) [self _trapNextMouseDown]; From 2f9f3db19845a8dc55cb1fc3c7831e26283d791c Mon Sep 17 00:00:00 2001 From: daboe01 Date: Sat, 3 Jan 2015 10:21:28 +0100 Subject: [PATCH 3/5] remove accidental code duplication --- AppKit/_CPPopoverWindow.j | 7 ------- 1 file changed, 7 deletions(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index d915b7bd5..f7cc50d68 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -370,13 +370,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _targetView = positioningView; } - if (positioningView !== _targetView) - { - [[_targetView window] removeChildWindow:self]; - [self _removeFrameObserver]; - _targetView = positioningView; - } - [self makeKeyAndOrderFront:nil]; /* From 0f5dd991675ebc7ce4656d70a17c1d018df97a2a Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 6 Jan 2015 15:20:02 -0800 Subject: [PATCH 4/5] Fixed: the method setContentSize: of the CPPopover did not take care about the rect given when displaying the popover --- AppKit/_CPPopoverWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index f7cc50d68..36fab0b48 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -419,7 +419,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if ([self isVisible]) { - var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + var point = [self computeOriginFromRect:_targetRect ofView:_targetView preferredEdge:[_windowView preferredEdge]]; [self setFrameOrigin:point]; } } From e49a9f1f064d407678b5b20f9f47df38c7b2a9f2 Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Tue, 6 Jan 2015 15:28:14 -0800 Subject: [PATCH 5/5] Fixed: targetRect was assigned too late when displaying a popoverWindow. This var can be used before ordering the popoverWindow --- AppKit/_CPPopoverWindow.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 36fab0b48..27d160e17 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -370,6 +370,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, _targetView = positioningView; } + _targetRect = aRect; [self makeKeyAndOrderFront:nil]; /* @@ -383,7 +384,6 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, [[_targetView window] addChildWindow:self ordered:CPWindowAbove]; _targetWindow = targetWindow; - _targetRect = aRect; if (!wasVisible) [self _trapNextMouseDown];