From cd077c8562b1ef0f1ad1c36c3c780af33296b6d5 Mon Sep 17 00:00:00 2001 From: Neil Hodgson Date: Thu, 25 Jun 2015 17:07:08 +1000 Subject: Bug [#1740]. Improve autocompletion positioning to avoid being off-screen. Not perfect when the Scintilla view is overlapping the screen edge or dock as the position moved to is based on the view's area. --- cocoa/PlatCocoa.mm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/cocoa/PlatCocoa.mm b/cocoa/PlatCocoa.mm index 8a0f942f4..1d62385cc 100644 --- a/cocoa/PlatCocoa.mm +++ b/cocoa/PlatCocoa.mm @@ -1329,16 +1329,28 @@ PRectangle Window::GetMonitorRect(Point) if (wid) { id idWin = reinterpret_cast(wid); + if ([idWin isKindOfClass: [NSView class]]) + { + NSView* view = reinterpret_cast(idWin); + idWin = [view window]; + } if ([idWin isKindOfClass: [NSWindow class]]) { + PRectangle rcPosition = GetPosition(); + NSWindow* win = reinterpret_cast(idWin); NSScreen* screen = [win screen]; - NSRect rect = [screen frame]; + NSRect rect = [screen visibleFrame]; CGFloat screenHeight = rect.origin.y + rect.size.height; // Invert screen positions to match Scintilla - return PRectangle( + PRectangle rcWork( static_cast(NSMinX(rect)), static_cast(screenHeight - NSMaxY(rect)), static_cast(NSMaxX(rect)), static_cast(screenHeight - NSMinY(rect))); + PRectangle rcMonitor(rcWork.left - rcPosition.left, + rcWork.top - rcPosition.top, + rcWork.right - rcPosition.left, + rcWork.bottom - rcPosition.top); + return rcMonitor; } } return PRectangle(); -- cgit v1.2.3