mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-24 10:38:38 +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:
parent
b50dda3fa2
commit
6e0cac4896
35
src/nsterm.m
35
src/nsterm.m
@ -8040,7 +8040,40 @@ - (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
|
||||
NSTRACE_RETURN_RECT (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
|
||||
|
||||
return constrain_frame_rect(frameRect,
|
||||
|
Loading…
Reference in New Issue
Block a user