summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlan Third <alan@idiocy.org>2017-07-06 23:10:49 +0100
committerAlan Third <alan@idiocy.org>2017-08-16 20:56:55 +0100
commit69f2b755f44a5e447b3ad482ce0b409764fa10e6 (patch)
tree10765f8a1a48d03ed87f02321f0928e21c2567cf /src
parent3505b77ad7b54e5208685b6e229c76387120d5a1 (diff)
downloademacs-69f2b755f44a5e447b3ad482ce0b409764fa10e6.tar.gz
emacs-69f2b755f44a5e447b3ad482ce0b409764fa10e6.tar.bz2
emacs-69f2b755f44a5e447b3ad482ce0b409764fa10e6.zip
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>
Diffstat (limited to 'src')
-rw-r--r--src/macfont.m18
-rw-r--r--src/nsfns.m83
-rw-r--r--src/nsmenu.m9
-rw-r--r--src/nsterm.h48
-rw-r--r--src/nsterm.m191
5 files changed, 211 insertions, 138 deletions
diff --git a/src/macfont.m b/src/macfont.m
index 4d310e47aec..19145f92c0a 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -2869,11 +2869,19 @@ macfont_draw (struct glyph_string *s, int from, int to, int x, int y,
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);
}
diff --git a/src/nsfns.m b/src/nsfns.m
index 36748cebb8b..e19e4e2641a 100644
--- a/src/nsfns.m
+++ b/src/nsfns.m
@@ -1592,7 +1592,7 @@ ns_run_file_dialog (void)
}
#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 @@ ns_screen_name (CGDirectDisplayID did)
{
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;
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1090
+#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090
+ if (CGDisplayIOServicePort == NULL)
+#endif
+ {
+ mach_port_t masterPort;
+ io_iterator_t it;
+ io_object_t obj;
- // CGDisplayIOServicePort is deprecated. Do it another (harder) way.
+ /* CGDisplayIOServicePort is deprecated. Do it another (harder) way.
- if (IOMasterPort (MACH_PORT_NULL, &masterPort) != kIOReturnSuccess
- || IOServiceGetMatchingServices (masterPort,
- IOServiceMatching ("IONDRVDevice"),
- &it) != kIOReturnSuccess)
- return name;
+ 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? */
- /* 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)))
- {
- CFMutableDictionaryRef props;
- const void *val;
-
- if (IORegistryEntryCreateCFProperties (obj,
- &props,
- kCFAllocatorDefault,
- kNilOptions) == kIOReturnSuccess
- && props != nil
- && (val = CFDictionaryGetValue(props, @"IOFBDependentIndex")))
+ 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,
diff --git a/src/nsmenu.m b/src/nsmenu.m
index 37a1a62d6d3..93e06707c07 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -532,9 +532,14 @@ x_activate_menubar (struct frame *f)
{
++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,
diff --git a/src/nsterm.h b/src/nsterm.h
index 67c0d42ac18..0ac8043e264 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -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 */
diff --git a/src/nsterm.m b/src/nsterm.m
index 36d906a7cec..95092b29c89 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -136,14 +136,18 @@ char const * nstrace_fullscreen_type_name (int fs_type)
+ (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 @@ char const * nstrace_fullscreen_type_name (int fs_type)
- (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 @@ ns_send_appdefined (int value)
}
}
-#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 @@ ns_read_socket (struct terminal *terminal, struct input_event *hold_quit)
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 @@ ns_select (int nfds, fd_set *readfds, fd_set *writefds,
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 @@ runAlertPanel(NSString *title,
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 @@ not_in_argv (NSString *arg)
+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 @@ not_in_argv (NSString *arg)
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 @@ not_in_argv (NSString *arg)
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 @@ not_in_argv (NSString *arg)
[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 @@ not_in_argv (NSString *arg)
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 @@ not_in_argv (NSString *arg)
/* 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 @@ not_in_argv (NSString *arg)
}
}
-#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 @@ not_in_argv (NSString *arg)
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.
@@ -7378,7 +7416,6 @@ not_in_argv (NSString *arg)
[NSApp setPresentationOptions: options];
}
#endif
-#endif
[toolbar setVisible:tbar_visible];
}
}
@@ -7417,7 +7454,7 @@ not_in_argv (NSString *arg)
}
[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 @@ not_in_argv (NSString *arg)
}
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 @@ not_in_argv (NSString *arg)
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 @@ not_in_argv (NSString *arg)
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 @@ not_in_argv (NSString *arg)
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 @@ not_in_argv (NSString *arg)
{
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 @@ not_in_argv (NSString *arg)
[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 @@ not_in_argv (NSString *arg)
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 @@ not_in_argv (NSString *arg)
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 @@ not_in_argv (NSString *arg)
/* 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 @@ Only works on Mac OS X 10.6 or later. */);
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,