From: <ho...@us...> - 2007-02-13 10:36:43
|
Revision: 9690 http://svn.sourceforge.net/bibdesk/?rev=9690&view=rev Author: hofman Date: 2007-02-13 02:36:40 -0800 (Tue, 13 Feb 2007) Log Message: ----------- Don't slide in side window when the mouse is not inside. This can happen due to delayed event handling. Modified Paths: -------------- skim/SKSideWindow.m skim/SKSplitView.h skim/SKSplitView.m Modified: skim/SKSideWindow.m =================================================================== --- skim/SKSideWindow.m 2007-02-12 23:43:55 UTC (rev 9689) +++ skim/SKSideWindow.m 2007-02-13 10:36:40 UTC (rev 9690) @@ -70,22 +70,26 @@ } - (void)slideOut { - state = NSDrawerClosingState; - NSRect screenFrame = [[self screen] frame]; - NSRect frame = [self frame]; - frame.origin.x = edge == NSMaxXEdge ? NSMaxX(screenFrame) - WINDOW_OFFSET : NSMinX(screenFrame) - NSWidth(frame) + WINDOW_OFFSET; - [self setFrame:frame display:YES animate:YES]; - [[self parentWindow] makeKeyAndOrderFront:self]; - state = NSDrawerClosedState; + if (state == NSDrawerOpenState || state == NSDrawerOpeningState) { + state = NSDrawerClosingState; + NSRect screenFrame = [[self screen] frame]; + NSRect frame = [self frame]; + frame.origin.x = edge == NSMaxXEdge ? NSMaxX(screenFrame) - WINDOW_OFFSET : NSMinX(screenFrame) - NSWidth(frame) + WINDOW_OFFSET; + [self setFrame:frame display:YES animate:YES]; + [[self parentWindow] makeKeyAndOrderFront:self]; + state = NSDrawerClosedState; + } } - (void)slideIn { - state = NSDrawerOpeningState; - NSRect screenFrame = [[self screen] frame]; - NSRect frame = [self frame]; - frame.origin.x = edge == NSMaxXEdge ? NSMaxX(screenFrame) - NSWidth(frame) + CONTENT_INSET : NSMinX(screenFrame) - CONTENT_INSET; - [self setFrame:frame display:YES animate:YES]; - state = NSDrawerOpenState; + if (state == NSDrawerClosedState || state == NSDrawerClosingState) { + state = NSDrawerOpeningState; + NSRect screenFrame = [[self screen] frame]; + NSRect frame = [self frame]; + frame.origin.x = edge == NSMaxXEdge ? NSMaxX(screenFrame) - NSWidth(frame) + CONTENT_INSET : NSMinX(screenFrame) - CONTENT_INSET; + [self setFrame:frame display:YES animate:YES]; + state = NSDrawerOpenState; + } } - (NSView *)mainView { @@ -215,11 +219,13 @@ } - (void)mouseEntered:(NSEvent *)theEvent { - [(SKSideWindow *)[self window] slideIn]; + if (NSPointInRect([NSEvent mouseLocation], [[self window] frame])) + [(SKSideWindow *)[self window] slideIn]; } - (void)mouseExited:(NSEvent *)theEvent { - [(SKSideWindow *)[self window] slideOut]; + //if (NSPointInRect([NSEvent mouseLocation], [[self window] frame]) == NO) + [(SKSideWindow *)[self window] slideOut]; } @end Modified: skim/SKSplitView.h =================================================================== --- skim/SKSplitView.h 2007-02-12 23:43:55 UTC (rev 9689) +++ skim/SKSplitView.h 2007-02-13 10:36:40 UTC (rev 9690) @@ -16,5 +16,5 @@ @end @interface NSObject (SKSplitViewExtendedDelegate) -- (void)splitViewDoubleClick:(SKSplitView *)sender; +- (void)splitView:(SKSplitView *)sender doubleClickedDividerAt:(int)offset; @end Modified: skim/SKSplitView.m =================================================================== --- skim/SKSplitView.m 2007-02-12 23:43:55 UTC (rev 9689) +++ skim/SKSplitView.m 2007-02-13 10:36:40 UTC (rev 9690) @@ -28,22 +28,31 @@ } - (void)mouseDown:(NSEvent *)theEvent { - if ([theEvent clickCount] > 1) { + if ([theEvent clickCount] > 1 && [[self delegate] respondsToSelector:@selector(splitView:doubleClickedDividerAt:)]) { NSPoint mouseLoc = [self convertPoint:[theEvent locationInWindow] fromView:nil]; - NSEnumerator *viewEnum = [[self subviews] objectEnumerator]; - NSView *view = nil; - - while (view = [viewEnum nextObject]) { - if (NSPointInRect(mouseLoc, [view frame])) - break; + NSArray *subviews = [self subviews]; + int i, count = [subviews count]; + id view; + NSRect divRect; + + for (i = 0; i < (count-1); i++) { + view = [subviews objectAtIndex:i]; + divRect = [view frame]; + if ([self isVertical] == NO) { + divRect.origin.y = NSMaxY (divRect); + divRect.size.height = [self dividerThickness]; + } else { + divRect.origin.x = NSMaxX (divRect); + divRect.size.width = [self dividerThickness]; + } + + if (NSPointInRect(mouseLoc, divRect)) { + [[self delegate] splitView:self doubleClickedDividerAt:i]; + return; + } } - if (view == nil && [[self delegate] respondsToSelector:@selector(splitViewDoubleClick:)]) - [[self delegate] splitViewDoubleClick:self]; - else - [super mouseDown:theEvent]; - } else { - [super mouseDown:theEvent]; } + [super mouseDown:theEvent]; } - (void)drawRect:(NSRect)rect { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |