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:
parent
3505b77ad7
commit
69f2b755f4
5 changed files with 212 additions and 139 deletions
|
@ -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);
|
||||
}
|
||||
|
|
85
src/nsfns.m
85
src/nsfns.m
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
48
src/nsterm.h
48
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 */
|
||||
|
|
191
src/nsterm.m
191
src/nsterm.m
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue