From 4dadf0cb9520ce8b287f407779bc3a3b9eec70af Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 30 Apr 2014 15:38:13 -0700 Subject: [PATCH 1/2] Fixed: CPPopover doesn't change his frame when with setContentSize Previously when we changed the contentSize of an open popover, nothing happens. Now, we the frame change and it's animated if needed --- AppKit/CPPopover.j | 1 + AppKit/_CPPopoverWindow.j | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index c887fcf7c..6685ca92c 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -151,6 +151,7 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, - (void)setContentSize:(CGSize)aSize { [[_contentViewController view] setFrameSize:aSize]; + [_popoverWindow updateFrame]; } /*! diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 852136230..47ffea603 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -170,9 +170,7 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if (![_targetView window]) return; - var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; - - [self setFrameOrigin:point]; + [self updateFrame]; } } @@ -366,6 +364,20 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, return CPBrowserStyleProperty('transition') && CPBrowserStyleProperty('transitionend'); } +/*! + @ignore +*/ +- (void)updateFrame +{ + var rect = CGRectMakeCopy([self frameRectForContentRect:[[self contentView] frame]]), + point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + + rect.origin = point; + + [self setFrame:rect display:YES animate:_animates]; +} + + #pragma mark - #pragma mark Actions From 9d694a1589bc2a2ddb29c86e049bd8db01d368ce Mon Sep 17 00:00:00 2001 From: Alexandre Wilhelm Date: Wed, 30 Apr 2014 16:23:00 -0700 Subject: [PATCH 2/2] Fixed: setContentSize doesn't work when called several times Previously when calling setContentSize several times, the final frame of the view was wrong. I removed the animation as well. This doesn't work, and need a lot more of implementation. --- AppKit/CPPopover.j | 3 +-- AppKit/_CPPopoverWindow.j | 17 ++++++++++------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/AppKit/CPPopover.j b/AppKit/CPPopover.j index 6685ca92c..e382b1a58 100644 --- a/AppKit/CPPopover.j +++ b/AppKit/CPPopover.j @@ -150,8 +150,7 @@ var CPPopoverDelegate_popover_willShow_ = 1 << 0, */ - (void)setContentSize:(CGSize)aSize { - [[_contentViewController view] setFrameSize:aSize]; - [_popoverWindow updateFrame]; + [_popoverWindow updateFrameWithSize:aSize]; } /*! diff --git a/AppKit/_CPPopoverWindow.j b/AppKit/_CPPopoverWindow.j index 47ffea603..ddff584c5 100644 --- a/AppKit/_CPPopoverWindow.j +++ b/AppKit/_CPPopoverWindow.j @@ -170,7 +170,9 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, if (![_targetView window]) return; - [self updateFrame]; + var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + + [self setFrameOrigin:point]; } } @@ -367,17 +369,18 @@ var _CPPopoverWindow_shouldClose_ = 1 << 4, /*! @ignore */ -- (void)updateFrame +- (void)updateFrameWithSize:(CGSize)aSize { - var rect = CGRectMakeCopy([self frameRectForContentRect:[[self contentView] frame]]), - point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + var rect = CGRectMakeZero(); + rect.size = aSize; + rect.origin = [[self contentView] frameOrigin]; - rect.origin = point; + [self setFrame:[self frameRectForContentRect:rect]]; - [self setFrame:rect display:YES animate:_animates]; + var point = [self computeOriginFromRect:[_targetView bounds] ofView:_targetView preferredEdge:[_windowView preferredEdge]]; + [self setFrameOrigin:point]; } - #pragma mark - #pragma mark Actions