Allow use of run-time OS version checks on macOS (bug#27810)

* src/nsterm.h (NSWindowTabbingMode): Define in pre-Sierra macOS.
(MAC_OS_X_VERSION_10_6, MAC_OS_X_VERSION_10_7, MAC_OS_X_VERSION_10_8,
MAC_OS_X_VERSION_10_9, MAC_OS_X_VERSION_10_12, HAVE_NATIVE_FS): Remove
defines.
(NSWindowStyleMaskFullScreen,
NSWindowCollectionBehaviorFullScreenPrimary,
NSApplicationPresentationFullScreen,
NSApplicationPresentationAutoHideToolbar): Define in macOS 10.6.
* src/nsterm.m (colorForEmacsRed, colorUsingDefaultColorSpace,
check_native_fs, ns_read_socket, ns_select, runAlertPanel,
initFrameFromEmacs, windowDidMiniaturize, windowDidEnterFullScreen,
windowDidExitFullScreen, isFullscreen, updateCollectionBehavior,
toggleFullScreen, constrainFrameRect, scrollerWidth, syms_of_nsterm):
Allow use of run-time checks and replace version check macros.
* src/nsfns.m (ns_screen_name): Use run-time OS version checks.
* src/macfont.m (macfont_draw): Use run-time OS version checks.
* src/nsmenu.m (menuWillOpen): Use run-time OS version checks.

Co-authored-by: Charles A. Roelli <charles@aurox.ch>
This commit is contained in:
Alan Third 2017-07-06 23:10:49 +01:00
parent 3505b77ad7
commit 69f2b755f4
5 changed files with 212 additions and 139 deletions

View file

@ -2869,11 +2869,19 @@ So we use CTFontDescriptorCreateMatchingFontDescriptor (no
and synthetic bold looks thinner on such environments.
Apple says there are no plans to address this issue
(rdar://11644870) currently. So we add a workaround. */
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
CGContextSetLineWidth (context, synthetic_bold_factor * font_size
* [[FRAME_NS_VIEW(f) window] backingScaleFactor]);
#else
CGContextSetLineWidth (context, synthetic_bold_factor * font_size);
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
if ([[FRAME_NS_VIEW(f) window] respondsToSelector:
@selector(backingScaleFactor)])
#endif
CGContextSetLineWidth (context, synthetic_bold_factor * font_size
* [[FRAME_NS_VIEW(f) window] backingScaleFactor]);
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
else
#endif
#endif
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
CGContextSetLineWidth (context, synthetic_bold_factor * font_size);
#endif
CG_SET_STROKE_COLOR_WITH_FACE_FOREGROUND (context, face, f);
}

View file

@ -1592,7 +1592,7 @@ Frames are listed from topmost (first) to bottommost (last). */)
}
#ifdef NS_IMPL_COCOA
#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_9
#if MAC_OS_X_VERSION_MAX_ALLOWED > 1090
#define MODAL_OK_RESPONSE NSModalResponseOK
#endif
#endif
@ -2512,52 +2512,61 @@ and GNUstep implementations ("distributor-specific release
{
char *name = NULL;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9
mach_port_t masterPort;
io_iterator_t it;
io_object_t obj;
// CGDisplayIOServicePort is deprecated. Do it another (harder) way.
if (IOMasterPort (MACH_PORT_NULL, &masterPort) != kIOReturnSuccess
|| IOServiceGetMatchingServices (masterPort,
IOServiceMatching ("IONDRVDevice"),
&it) != kIOReturnSuccess)
return name;
/* Must loop until we find a name. Many devices can have the same unit
number (represents different GPU parts), but only one has a name. */
while (! name && (obj = IOIteratorNext (it)))
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1090
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
if (CGDisplayIOServicePort == NULL)
#endif
{
CFMutableDictionaryRef props;
const void *val;
mach_port_t masterPort;
io_iterator_t it;
io_object_t obj;
if (IORegistryEntryCreateCFProperties (obj,
&props,
kCFAllocatorDefault,
kNilOptions) == kIOReturnSuccess
&& props != nil
&& (val = CFDictionaryGetValue(props, @"IOFBDependentIndex")))
/* CGDisplayIOServicePort is deprecated. Do it another (harder) way.
Is this code OK for macOS < 10.9, and GNUstep? I suspect it is,
in which case is it worth keeping the other method in here? */
if (IOMasterPort (MACH_PORT_NULL, &masterPort) != kIOReturnSuccess
|| IOServiceGetMatchingServices (masterPort,
IOServiceMatching ("IONDRVDevice"),
&it) != kIOReturnSuccess)
return name;
/* Must loop until we find a name. Many devices can have the same unit
number (represents different GPU parts), but only one has a name. */
while (! name && (obj = IOIteratorNext (it)))
{
unsigned nr = [(NSNumber *)val unsignedIntegerValue];
if (nr == CGDisplayUnitNumber (did))
name = ns_get_name_from_ioreg (obj);
CFMutableDictionaryRef props;
const void *val;
if (IORegistryEntryCreateCFProperties (obj,
&props,
kCFAllocatorDefault,
kNilOptions) == kIOReturnSuccess
&& props != nil
&& (val = CFDictionaryGetValue(props, @"IOFBDependentIndex")))
{
unsigned nr = [(NSNumber *)val unsignedIntegerValue];
if (nr == CGDisplayUnitNumber (did))
name = ns_get_name_from_ioreg (obj);
}
CFRelease (props);
IOObjectRelease (obj);
}
CFRelease (props);
IOObjectRelease (obj);
IOObjectRelease (it);
}
IOObjectRelease (it);
#else
name = ns_get_name_from_ioreg (CGDisplayIOServicePort (did));
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
else
#endif
#endif /* #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1090 */
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
name = ns_get_name_from_ioreg (CGDisplayIOServicePort (did));
#endif
return name;
}
#endif
#endif /* NS_IMPL_COCOA */
static Lisp_Object
ns_make_monitor_attribute_list (struct MonitorInfo *monitors,

View file

@ -532,9 +532,14 @@ - (void)menuWillOpen:(NSMenu *)menu
{
++trackingMenu;
#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
// On 10.6 we get repeated calls, only the one for NSSystemDefined is "real".
if ([[NSApp currentEvent] type] != NSSystemDefined) return;
if (
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
NSAppKitVersionNumber < NSAppKitVersionNumber10_7 &&
#endif
[[NSApp currentEvent] type] != NSEventTypeSystemDefined)
return;
#endif
/* When dragging from one menu to another, we get willOpen followed by didClose,

View file

@ -25,30 +25,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "sysselect.h"
#ifdef HAVE_NS
#ifdef NS_IMPL_COCOA
#ifndef MAC_OS_X_VERSION_10_6
#define MAC_OS_X_VERSION_10_6 1060
#endif
#ifndef MAC_OS_X_VERSION_10_7
#define MAC_OS_X_VERSION_10_7 1070
#endif
#ifndef MAC_OS_X_VERSION_10_8
#define MAC_OS_X_VERSION_10_8 1080
#endif
#ifndef MAC_OS_X_VERSION_10_9
#define MAC_OS_X_VERSION_10_9 1090
#endif
#ifndef MAC_OS_X_VERSION_10_12
#define MAC_OS_X_VERSION_10_12 101200
#endif
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
#define HAVE_NATIVE_FS
#endif
#endif /* NS_IMPL_COCOA */
#ifdef __OBJC__
/* CGFloat on GNUstep may be 4 or 8 byte, but functions expect float* for some
@ -471,7 +447,7 @@ typedef id instancetype;
- (void) toggleFullScreen: (id) sender;
- (BOOL) fsIsNative;
- (BOOL) isFullscreen;
#ifdef HAVE_NATIVE_FS
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
- (void) updateCollectionBehavior;
#endif
@ -1277,9 +1253,17 @@ extern char gnustep_base_version[]; /* version tracking */
? (min) : (((x)>(max)) ? (max) : (x)))
#define SCREENMAXBOUND(x) (IN_BOUND (-SCREENMAX, x, SCREENMAX))
/* macOS 10.7 introduces some new constants. */
#if !defined (NS_IMPL_COCOA) || !defined (MAC_OS_X_VERSION_10_7)
#define NSFullScreenWindowMask (1 << 14)
#define NSWindowCollectionBehaviorFullScreenPrimary (1 << 7)
#define NSApplicationPresentationFullScreen (1 << 10)
#define NSApplicationPresentationAutoHideToolbar (1 << 11)
#define NSAppKitVersionNumber10_7 1138
#endif /* !defined (MAC_OS_X_VERSION_10_7) */
/* macOS 10.12 deprecates a bunch of constants. */
#if !defined (NS_IMPL_COCOA) || \
MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_12
#if !defined (NS_IMPL_COCOA) || !defined (MAC_OS_X_VERSION_10_12)
#define NSEventModifierFlagCommand NSCommandKeyMask
#define NSEventModifierFlagControl NSControlKeyMask
#define NSEventModifierFlagHelp NSHelpKeyMask
@ -1305,6 +1289,7 @@ extern char gnustep_base_version[]; /* version tracking */
#define NSEventTypeKeyUp NSKeyUp
#define NSEventTypeFlagsChanged NSFlagsChanged
#define NSEventMaskAny NSAnyEventMask
#define NSEventTypeSystemDefined NSSystemDefined
#define NSWindowStyleMaskBorderless NSBorderlessWindowMask
#define NSWindowStyleMaskClosable NSClosableWindowMask
#define NSWindowStyleMaskFullScreen NSFullScreenWindowMask
@ -1319,6 +1304,13 @@ extern char gnustep_base_version[]; /* version tracking */
#ifdef __OBJC__
typedef NSUInteger NSWindowStyleMask;
#endif
#endif
/* Window tabbing mode enums are new too. */
enum NSWindowTabbingMode
{
NSWindowTabbingModeAutomatic,
NSWindowTabbingModePreferred,
NSWindowTabbingModeDisallowed
};
#endif
#endif /* HAVE_NS */

View file

@ -136,14 +136,18 @@ @implementation NSColor (EmacsColor)
+ (NSColor *)colorForEmacsRed:(CGFloat)red green:(CGFloat)green
blue:(CGFloat)blue alpha:(CGFloat)alpha
{
#ifdef NS_IMPL_COCOA
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
if (ns_use_srgb_colorspace)
return [NSColor colorWithSRGBRed: red
green: green
blue: blue
alpha: alpha];
#if defined (NS_IMPL_COCOA) \
&& MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
if (ns_use_srgb_colorspace
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
&& [NSColor respondsToSelector:
@selector(colorWithSRGBRed:green:blue:alpha:)]
#endif
)
return [NSColor colorWithSRGBRed: red
green: green
blue: blue
alpha: alpha];
#endif
return [NSColor colorWithCalibratedRed: red
green: green
@ -153,11 +157,18 @@ + (NSColor *)colorForEmacsRed:(CGFloat)red green:(CGFloat)green
- (NSColor *)colorUsingDefaultColorSpace
{
#ifdef NS_IMPL_COCOA
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
if (ns_use_srgb_colorspace)
return [self colorUsingColorSpace: [NSColorSpace sRGBColorSpace]];
/* FIXMES: We're checking for colorWithSRGBRed here so this will
only work in the same place as in the method above. It should
really be a check whether we're on macOS 10.7 or above. */
#if defined (NS_IMPL_COCOA) \
&& MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
if (ns_use_srgb_colorspace
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
&& [NSColor respondsToSelector:
@selector(colorWithSRGBRed:green:blue:alpha:)]
#endif
)
return [self colorUsingColorSpace: [NSColorSpace sRGBColorSpace]];
#endif
return [self colorUsingColorSpaceName: NSCalibratedRGBColorSpace];
}
@ -4140,7 +4151,7 @@ in certain situations (rapid incoming events).
}
}
#ifdef HAVE_NATIVE_FS
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
static void
check_native_fs ()
{
@ -4242,7 +4253,7 @@ in certain situations (rapid incoming events).
NSTRACE_WHEN (NSTRACE_GROUP_EVENTS, "ns_read_socket");
#ifdef HAVE_NATIVE_FS
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
check_native_fs ();
#endif
@ -4324,7 +4335,7 @@ in certain situations (rapid incoming events).
NSTRACE_WHEN (NSTRACE_GROUP_EVENTS, "ns_select");
#ifdef HAVE_NATIVE_FS
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
check_native_fs ();
#endif
@ -5563,8 +5574,7 @@ - (void) terminate: (id)sender
NSString *defaultButton,
NSString *alternateButton)
{
#if !defined (NS_IMPL_COCOA) || \
MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_9
#ifdef NS_IMPL_GNUSTEP
return NSRunAlertPanel(title, msgFormat, defaultButton, alternateButton, nil)
== NSAlertDefaultReturn;
#else
@ -6325,14 +6335,27 @@ - (NSRect)firstRectForCharacterRange: (NSRange)theRange
+FRAME_LINE_HEIGHT (emacsframe));
pt = [self convertPoint: pt toView: nil];
#if !defined (NS_IMPL_COCOA) || \
MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
pt = [[self window] convertBaseToScreen: pt];
rect.origin = pt;
#else
rect.origin = pt;
rect = [[self window] convertRectToScreen: rect];
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
if ([[self window] respondsToSelector: @selector(convertRectToScreen:)])
{
#endif
rect.origin = pt;
rect = [(EmacsWindow *) [self window] convertRectToScreen: rect];
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
}
else
#endif
#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 */
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 \
|| defined (NS_IMPL_GNUSTEP)
{
pt = [[self window] convertBaseToScreen: pt];
rect.origin = pt;
}
#endif
return rect;
}
@ -6988,11 +7011,15 @@ - (instancetype) initFrameFromEmacs: (struct frame *)f
scrollbarsNeedingUpdate = 0;
fs_state = FULLSCREEN_NONE;
fs_before_fs = next_maximized = -1;
#ifdef HAVE_NATIVE_FS
fs_is_native = ns_use_native_fullscreen;
#else
fs_is_native = NO;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_7)
#endif
fs_is_native = ns_use_native_fullscreen;
#endif
maximized_width = maximized_height = -1;
nonfs_window = nil;
@ -7023,7 +7050,10 @@ - (instancetype) initFrameFromEmacs: (struct frame *)f
backing: NSBackingStoreBuffered
defer: YES];
#ifdef HAVE_NATIVE_FS
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_7)
#endif
[win setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary];
#endif
@ -7032,9 +7062,11 @@ - (instancetype) initFrameFromEmacs: (struct frame *)f
[win setAcceptsMouseMovedEvents: YES];
[win setDelegate: self];
#if !defined (NS_IMPL_COCOA) || \
MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_9
[win useOptimizedDrawing: YES];
#if !defined (NS_IMPL_COCOA) || MAC_OS_X_VERSION_MIN_REQUIRED <= 1090
#if MAC_OS_X_VERSION_MAX_ALLOWED > 1090
if ([win respondsToSelector: @selector(useOptimizedDrawing:)])
#endif
[win useOptimizedDrawing: YES];
#endif
[[win contentView] addSubview: self];
@ -7094,9 +7126,12 @@ - (instancetype) initFrameFromEmacs: (struct frame *)f
if ([col alphaComponent] != (EmacsCGFloat) 1.0)
[win setOpaque: NO];
#if !defined (NS_IMPL_COCOA) || \
MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_9
[self allocateGState];
#if !defined (NS_IMPL_COCOA) \
|| MAC_OS_X_VERSION_MIN_REQUIRED <= 1090
#if MAC_OS_X_VERSION_MAX_ALLOWED > 1090
if ([self respondsToSelector: @selector(allocateGState)])
#endif
[self allocateGState];
#endif
[NSApp registerServicesMenuSendTypes: ns_send_types
returnTypes: [NSArray array]];
@ -7104,9 +7139,12 @@ - (instancetype) initFrameFromEmacs: (struct frame *)f
/* macOS Sierra automatically enables tabbed windows. We can't
allow this to be enabled until it's available on a Free system.
Currently it only happens by accident and is buggy anyway. */
#if defined (NS_IMPL_COCOA) && \
MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
[win setTabbingMode: NSWindowTabbingModeDisallowed];
#if defined (NS_IMPL_COCOA) \
&& MAC_OS_X_VERSION_MAX_ALLOWED >= 101200
#if MAC_OS_X_VERSION_MIN_REQUIRED < 101200
if ([win respondsToSelector: @selector(setTabbingMode:)])
#endif
[win setTabbingMode: NSWindowTabbingModeDisallowed];
#endif
ns_window_num++;
@ -7323,7 +7361,7 @@ - (void)windowDidMiniaturize: sender
}
}
#ifdef HAVE_NATIVE_FS
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
- (NSApplicationPresentationOptions)window:(NSWindow *)window
willUseFullScreenPresentationOptions:
(NSApplicationPresentationOptions)proposedOptions
@ -7361,8 +7399,8 @@ - (void)windowDidEnterFullScreen /* provided for direct calls */
else
{
BOOL tbar_visible = FRAME_EXTERNAL_TOOL_BAR (emacsframe) ? YES : NO;
#ifdef NS_IMPL_COCOA
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 \
&& MAC_OS_X_VERSION_MIN_REQUIRED <= 1070
unsigned val = (unsigned)[NSApp presentationOptions];
// Mac OS X 10.7 bug fix, the menu won't appear without this.
@ -7377,7 +7415,6 @@ - (void)windowDidEnterFullScreen /* provided for direct calls */
[NSApp setPresentationOptions: options];
}
#endif
#endif
[toolbar setVisible:tbar_visible];
}
@ -7417,7 +7454,7 @@ - (void)windowDidExitFullScreen /* provided for direct calls */
}
[self setFSValue: fs_before_fs];
fs_before_fs = -1;
#ifdef HAVE_NATIVE_FS
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
[self updateCollectionBehavior];
#endif
if (FRAME_EXTERNAL_TOOL_BAR (emacsframe))
@ -7449,7 +7486,7 @@ - (BOOL)isFullscreen
}
else
{
#ifdef HAVE_NATIVE_FS
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
res = (([[self window] styleMask] & NSWindowStyleMaskFullScreen) != 0);
#else
res = NO;
@ -7462,7 +7499,7 @@ - (BOOL)isFullscreen
return res;
}
#ifdef HAVE_NATIVE_FS
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
- (void)updateCollectionBehavior
{
NSTRACE ("[EmacsView updateCollectionBehavior]");
@ -7477,7 +7514,10 @@ - (void)updateCollectionBehavior
b &= ~NSWindowCollectionBehaviorFullScreenPrimary;
[win setCollectionBehavior: b];
fs_is_native = ns_use_native_fullscreen;
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
if (NSAppKitVersionNumber >= NSAppKitVersionNumber10_7)
#endif
fs_is_native = ns_use_native_fullscreen;
}
}
#endif
@ -7494,8 +7534,11 @@ - (void)toggleFullScreen: (id)sender
if (fs_is_native)
{
#ifdef HAVE_NATIVE_FS
[[self window] toggleFullScreen:sender];
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
if ([[self window] respondsToSelector: @selector(toggleFullScreen:)])
#endif
[[self window] toggleFullScreen:sender];
#endif
return;
}
@ -7512,10 +7555,13 @@ - (void)toggleFullScreen: (id)sender
{
NSScreen *screen = [w screen];
#if defined (NS_IMPL_COCOA) && \
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9
#if defined (NS_IMPL_COCOA) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1090
/* Hide ghost menu bar on secondary monitor? */
if (! onFirstScreen)
if (! onFirstScreen
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
&& [NSScreen respondsToSelector: @selector(screensHaveSeparateSpaces)]
#endif
)
onFirstScreen = [NSScreen screensHaveSeparateSpaces];
#endif
/* Hide dock and menubar if we are on the primary screen. */
@ -7543,9 +7589,12 @@ - (void)toggleFullScreen: (id)sender
[fw setTitle:[w title]];
[fw setDelegate:self];
[fw setAcceptsMouseMovedEvents: YES];
#if !defined (NS_IMPL_COCOA) || \
MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_9
[fw useOptimizedDrawing: YES];
#if !defined (NS_IMPL_COCOA) \
|| MAC_OS_X_VERSION_MIN_REQUIRED <= 1090
#if MAC_OS_X_VERSION_MAX_ALLOWED > 1090
if ([fw respondsToSelector: @selector(useOptimizedDrawing:)])
#endif
[fw useOptimizedDrawing: YES];
#endif
[fw setBackgroundColor: col];
if ([col alphaComponent] != (EmacsCGFloat) 1.0)
@ -8106,10 +8155,14 @@ - (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
NSTRACE_ARG_RECT (frameRect));
#ifdef NS_IMPL_COCOA
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9
#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1090
// If separate spaces is on, it is like each screen is independent. There is
// no spanning of frames across screens.
if ([NSScreen screensHaveSeparateSpaces])
if (
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
[NSScreen respondsToSelector: @selector(screensHaveSeparateSpaces)] &&
#endif
[NSScreen screensHaveSeparateSpaces])
{
NSTRACE_MSG ("Screens have separate spaces");
frameRect = [super constrainFrameRect:frameRect toScreen:screen];
@ -8117,7 +8170,8 @@ - (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen *)screen
return frameRect;
}
else
#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9 */
#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1090 */
// 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).
@ -8323,12 +8377,21 @@ + (CGFloat) scrollerWidth
/* TODO: if we want to allow variable widths, this is the place to do it,
however neither GNUstep nor Cocoa support it very well */
CGFloat r;
#if !defined (NS_IMPL_COCOA) || \
MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
r = [NSScroller scrollerWidth];
#else
r = [NSScroller scrollerWidthForControlSize: NSControlSizeRegular
scrollerStyle: NSScrollerStyleLegacy];
#if defined (NS_IMPL_COCOA) \
&& MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
if ([NSScroller respondsToSelector:
@selector(scrollerWidthForControlSize:scrollerStyle:)])
#endif
r = [NSScroller scrollerWidthForControlSize: NSControlSizeRegular
scrollerStyle: NSScrollerStyleLegacy];
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070
else
#endif
#endif /* MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 */
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 \
|| defined (NS_IMPL_GNUSTEP)
r = [NSScroller scrollerWidth];
#endif
return r;
}
@ -9015,12 +9078,8 @@ Convert an X font name (XLFD) to an NS font name.
doc: /*Non-nil means to use native fullscreen on Mac OS X 10.7 and later.
Nil means use fullscreen the old (< 10.7) way. The old way works better with
multiple monitors, but lacks tool bar. This variable is ignored on
Mac OS X < 10.7. Default is t for 10.7 and later, nil otherwise. */);
#ifdef HAVE_NATIVE_FS
Mac OS X < 10.7. Default is t. */);
ns_use_native_fullscreen = YES;
#else
ns_use_native_fullscreen = NO;
#endif
ns_last_use_native_fullscreen = ns_use_native_fullscreen;
DEFVAR_BOOL ("ns-use-fullscreen-animation", ns_use_fullscreen_animation,