diff options
author | Bibiko <bibiko@eva.mpg.de> | 2011-01-19 20:19:29 +0000 |
---|---|---|
committer | Bibiko <bibiko@eva.mpg.de> | 2011-01-19 20:19:29 +0000 |
commit | 06c03ea6543b7d38d1b17d5ac8f8416814708eb5 (patch) | |
tree | 2fbaecf4637f0ef1f62115686d1bd46150875246 /Source | |
parent | c27e06e95d403f6100b4386487a83a466cf696bc (diff) | |
download | sequelpro-06c03ea6543b7d38d1b17d5ac8f8416814708eb5.tar.gz sequelpro-06c03ea6543b7d38d1b17d5ac8f8416814708eb5.tar.bz2 sequelpro-06c03ea6543b7d38d1b17d5ac8f8416814708eb5.zip |
• improved caret positioning for ordering out any kind of tooltip windows esp. for first word after soft-wrapping
• fixed tooltip positioning for SPTextView - do not take the mouse location instead take the caret position
Diffstat (limited to 'Source')
-rw-r--r-- | Source/SPTextView.m | 19 | ||||
-rw-r--r-- | Source/SPTooltip.m | 4 |
2 files changed, 9 insertions, 14 deletions
diff --git a/Source/SPTextView.m b/Source/SPTextView.m index 32c692b5..bfc90581 100644 --- a/Source/SPTextView.m +++ b/Source/SPTextView.m @@ -817,6 +817,7 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) } if (completionIsOpen) [completionPopup close], completionPopup = nil; + completionIsOpen = YES; completionPopup = [[SPNarrowDownCompletion alloc] initWithItems:[self suggestionsForSQLCompletionWith:currentWord dictMode:isDictMode browseMode:dbBrowseMode withTableName:tableName withDbName:dbName] alreadyTyped:filter @@ -842,19 +843,13 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) completionParseRangeLocation = parseRange.location; //Get the NSPoint of the first character of the current word - NSRange glyphRange = [[self layoutManager] glyphRangeForCharacterRange:NSMakeRange(completionRange.location,0) actualCharacterRange:NULL]; + NSRange glyphRange = [[self layoutManager] glyphRangeForCharacterRange:NSMakeRange(completionRange.location,1) actualCharacterRange:NULL]; NSRect boundingRect = [[self layoutManager] boundingRectForGlyphRange:glyphRange inTextContainer:[self textContainer]]; - boundingRect = [self convertRect: boundingRect toView: NULL]; - NSPoint pos = [[self window] convertBaseToScreen: NSMakePoint(boundingRect.origin.x + boundingRect.size.width,boundingRect.origin.y + boundingRect.size.height)]; - - // TODO: check if needed - // if(filter) - // pos.x -= [filter sizeWithAttributes:[NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName]].width; - - // Adjust list location to be under the current word or insertion point + boundingRect = [self convertRect:boundingRect toView:nil]; + NSPoint pos = [[self window] convertBaseToScreen:NSMakePoint(boundingRect.origin.x + boundingRect.size.width,boundingRect.origin.y + boundingRect.size.height)]; pos.y -= [[self font] pointSize]*1.25; - [completionPopup setCaretPos:pos]; + [completionPopup orderFront:self]; [completionPopup insertAutocompletePlaceholder]; @@ -1408,7 +1403,7 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) isQueryingDBStructure:NO]; //Get the NSPoint of the first character of the current word - NSRange glyphRange = [[self layoutManager] glyphRangeForCharacterRange:NSMakeRange(aRange.location,0) actualCharacterRange:NULL]; + NSRange glyphRange = [[self layoutManager] glyphRangeForCharacterRange:NSMakeRange(aRange.location,1) actualCharacterRange:NULL]; NSRect boundingRect = [[self layoutManager] boundingRectForGlyphRange:glyphRange inTextContainer:[self textContainer]]; boundingRect = [self convertRect: boundingRect toView: NULL]; NSPoint pos = [[self window] convertBaseToScreen: NSMakePoint(boundingRect.origin.x + boundingRect.size.width,boundingRect.origin.y + boundingRect.size.height)]; @@ -1564,7 +1559,7 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) isQueryingDBStructure:NO]; //Get the NSPoint of the first character of the current word - NSRange glyphRange = [[self layoutManager] glyphRangeForCharacterRange:NSMakeRange(r2.location,0) actualCharacterRange:NULL]; + NSRange glyphRange = [[self layoutManager] glyphRangeForCharacterRange:NSMakeRange(r2.location,1) actualCharacterRange:NULL]; NSRect boundingRect = [[self layoutManager] boundingRectForGlyphRange:glyphRange inTextContainer:[self textContainer]]; boundingRect = [self convertRect: boundingRect toView: NULL]; NSPoint pos = [[self window] convertBaseToScreen: NSMakePoint(boundingRect.origin.x + boundingRect.size.width,boundingRect.origin.y + boundingRect.size.height)]; diff --git a/Source/SPTooltip.m b/Source/SPTooltip.m index 09929fc2..b0344d52 100644 --- a/Source/SPTooltip.m +++ b/Source/SPTooltip.m @@ -257,8 +257,8 @@ static CGFloat slow_in_out (CGFloat t) id fr = [[NSApp keyWindow] firstResponder]; //If first responder is a textview return the caret position - if([fr respondsToSelector:@selector(getRangeForCurrentWord)] && [fr alignment] == NSLeftTextAlignment) { - NSRange range = NSMakeRange([fr selectedRange].location,0); + if(([fr isMemberOfClass:[NSTextView class]] && [fr alignment] == NSLeftTextAlignment) || [[[fr class] description] isEqualToString:@"SPTextView"]) { + NSRange range = NSMakeRange([fr selectedRange].location,1); NSRange glyphRange = [[fr layoutManager] glyphRangeForCharacterRange:range actualCharacterRange:NULL]; NSRect boundingRect = [[fr layoutManager] boundingRectForGlyphRange:glyphRange inTextContainer:[fr textContainer]]; boundingRect = [fr convertRect: boundingRect toView:NULL]; |