1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-25 10:47:00 +00:00

Constrain non-child frames to screen area in OS X

* src/nsterm.m (constrainFrameRect:toScreen:): Constrain non-child
frames in OS X, if they would otherwise go offscreen.

Fixes: debbugs:25818
This commit is contained in:
Charles A. Roelli 2017-04-27 20:44:09 +02:00 committed by Alan Third
parent b50dda3fa2
commit 6e0cac4896

View File

@ -8040,7 +8040,40 @@ - (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
NSTRACE_RETURN_RECT (frameRect); NSTRACE_RETURN_RECT (frameRect);
return frameRect; return frameRect;
} }
#endif else
#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 */
// Check that the proposed frameRect is visible in at least one
// screen. If it is not, ask the system to reposition it (only
// for non-child windows).
if (!FRAME_PARENT_FRAME (((EmacsView *)[self delegate])->emacsframe))
{
NSArray *screens = [NSScreen screens];
NSUInteger nr_screens = [screens count];
int i;
BOOL frame_on_screen = NO;
for (i = 0; i < nr_screens; ++i)
{
NSScreen *s = [screens objectAtIndex: i];
NSRect scrRect = [s frame];
if (NSIntersectsRect(frameRect, scrRect))
{
frame_on_screen = YES;
break;
}
}
if (!frame_on_screen)
{
NSTRACE_MSG ("Frame outside screens; constraining");
frameRect = [super constrainFrameRect:frameRect toScreen:screen];
NSTRACE_RETURN_RECT (frameRect);
return frameRect;
}
}
#endif #endif
return constrain_frame_rect(frameRect, return constrain_frame_rect(frameRect,