From 9c028251d50717e5673bd60a28c709641d4181ef Mon Sep 17 00:00:00 2001 From: Antonio Salazar Cardozo Date: Fri, 6 Dec 2013 23:40:08 -0500 Subject: [PATCH] Search for text view until we run out of window in selectViewAtPosition:relativeTo:. We start with an offset of 40 in the direction dictated by the provided position, and then increase in multiples of 40 until we are no longer over a view at all or we have found a ViTextView. --- app/ViWindowController.m | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/app/ViWindowController.m b/app/ViWindowController.m index 76a20936..8a718f59 100644 --- a/app/ViWindowController.m +++ b/app/ViWindowController.m @@ -1911,20 +1911,29 @@ - (BOOL)selectViewAtPosition:(ViViewOrderingMode)position relativeTo:(ViViewCont referencePoint.x = MIN(MAX(referencePoint.x, 10), scrollView.frame.size.width - 10); referencePoint.y = MIN(MAX(referencePoint.y, 10), scrollView.frame.size.height - 10); - if (position == ViViewUp) { - referencePoint.y = -40; - } else if (position == ViViewDown) { - referencePoint.y = currentViewSize.height + 40; - } else if (position == ViViewLeft) { - referencePoint.x = -80; - } else if (position == ViViewRight) { - referencePoint.x = currentViewSize.width + 80; - } - - NSPoint splitViewReferencePoint = [tabController.view.superview convertPoint:referencePoint - fromView:currentView]; - - hitView = [tabController.view hitTest:splitViewReferencePoint]; + NSInteger offsetStep = 40; + NSInteger offsetCount = 0; + + do { + offsetCount++; + NSInteger offset = offsetStep * offsetCount; + + if (position == ViViewUp) { + referencePoint.y = -1 * offset; + } else if (position == ViViewDown) { + referencePoint.y = currentViewSize.height + offset; + } else if (position == ViViewLeft) { + referencePoint.x = -1 * offset; + } else if (position == ViViewRight) { + referencePoint.x = currentViewSize.width + offset; + } + + NSPoint splitViewReferencePoint = + [tabController.view.superview convertPoint:referencePoint + fromView:scrollView]; + + hitView = [tabController.view hitTest:splitViewReferencePoint]; + } while (hitView && ! [hitView isKindOfClass:[ViTextView class]]); } ViViewController *otherViewController = nil;