summaryrefslogtreecommitdiff
path: root/widget
diff options
context:
space:
mode:
authorMoonchild <moonchild@palemoon.org>2022-06-03 19:14:12 +0000
committerMoonchild <moonchild@palemoon.org>2022-06-03 19:14:12 +0000
commit64e3f4118a430706046f5757da73ed0081807df7 (patch)
treebd0f55ca786b79a51ba197f747084e6add4b2355 /widget
parentd53fd09524fbd2d4a12d6c307272679cbe4f4251 (diff)
parent4abc90ad3eabce07b67e9f85a2211e04d3c1ccf5 (diff)
downloaduxp-64e3f4118a430706046f5757da73ed0081807df7.tar.gz
Merge pull request 'Support MacOS Monterey version detection, 11.0 and newer SDKs and fix system font crash.' (#1912) from dbsoft/UXP:AppleARM into master
Reviewed-on: https://repo.palemoon.org/MoonchildProductions/UXP/pulls/1912 Reviewed-by: Moonchild <moonchild@palemoon.org>
Diffstat (limited to 'widget')
-rw-r--r--widget/cocoa/nsChildView.mm3
-rw-r--r--widget/cocoa/nsCocoaFeatures.h3
-rw-r--r--widget/cocoa/nsCocoaFeatures.mm43
3 files changed, 47 insertions, 2 deletions
diff --git a/widget/cocoa/nsChildView.mm b/widget/cocoa/nsChildView.mm
index 868687fe16..e2aa6729e9 100644
--- a/widget/cocoa/nsChildView.mm
+++ b/widget/cocoa/nsChildView.mm
@@ -209,6 +209,8 @@ uint32_t nsChildView::sLastInputEventCount = 0;
+ (BOOL)_shouldZoomOnDoubleClick; // present on 10.7 and above
@end
+// This is only possible with SDKs below 10.15
+#ifndef MAC_OS_X_VERSION_10_15
// Starting with 10.7 the bottom corners of all windows are rounded.
// Unfortunately, the standard rounding that OS X applies to OpenGL views
// does not use anti-aliasing and looks very crude. Since we want a smooth,
@@ -226,6 +228,7 @@ uint32_t nsChildView::sLastInputEventCount = 0;
return region;
}
@end
+#endif
#pragma mark -
diff --git a/widget/cocoa/nsCocoaFeatures.h b/widget/cocoa/nsCocoaFeatures.h
index a9cab95d56..c6841a7491 100644
--- a/widget/cocoa/nsCocoaFeatures.h
+++ b/widget/cocoa/nsCocoaFeatures.h
@@ -25,9 +25,12 @@ public:
static bool OnMojaveOrLater();
static bool OnCatalinaOrLater();
static bool OnBigSurOrLater();
+ static bool OnMontereyOrLater();
static bool IsAtLeastVersion(int32_t aMajor, int32_t aMinor, int32_t aBugFix=0);
+ static bool ProcessIsRosettaTranslated();
+
// These are utilities that do not change or depend on the value of mOSXVersion
// and instead just encapsulate the encoding algorithm. Note that GetVersion
// actually adjusts to the lowest supported OS, so it will always return
diff --git a/widget/cocoa/nsCocoaFeatures.mm b/widget/cocoa/nsCocoaFeatures.mm
index e0fafb7d96..2edb958931 100644
--- a/widget/cocoa/nsCocoaFeatures.mm
+++ b/widget/cocoa/nsCocoaFeatures.mm
@@ -26,6 +26,7 @@
#define MACOS_VERSION_10_15_HEX 0x000A0F00
#define MACOS_VERSION_10_16_HEX 0x000A1000
#define MACOS_VERSION_11_0_HEX 0x000B0000
+#define MACOS_VERSION_12_0_HEX 0x000C0000
#include "nsCocoaFeatures.h"
#include "nsCocoaUtils.h"
@@ -33,6 +34,7 @@
#include "nsObjCExceptions.h"
#import <Cocoa/Cocoa.h>
+#include <sys/sysctl.h>
int32_t nsCocoaFeatures::mOSVersion = 0;
@@ -196,14 +198,51 @@ nsCocoaFeatures::OnCatalinaOrLater()
/* static */ bool
nsCocoaFeatures::OnBigSurOrLater()
{
- // Account for the version being 10.16 (which occurs when the
- // application is linked with an older SDK) or 11.0 on Big Sur.
+ // Account for the version being 10.16 or 11.0 on Big Sur.
+ // The version is reported as 10.16 if SYSTEM_VERSION_COMPAT is set to 1,
+ // or if SYSTEM_VERSION_COMPAT is not set and the application is linked
+ // with a pre-Big Sur SDK.
+ // We should set SYSTEM_VERSION_COMPAT to 0 in its Info.plist, so it'll
+ // usually see the correct 11.* version, despite being linked against an
+ // old SDK. However, it still sees the 10.16 compatibility version when
+ // launched from the command line, see bug 1727624. (This only applies to
+ // the Intel build - the arm64 build is linked against a Big Sur SDK and
+ // always sees the correct version.)
return ((macOSVersion() >= MACOS_VERSION_10_16_HEX) ||
(macOSVersion() >= MACOS_VERSION_11_0_HEX));
}
+/* static */ bool nsCocoaFeatures::OnMontereyOrLater()
+{
+ // Monterey pretends to be 10.16 and is indistinguishable from Big Sur.
+ // In practice, this means that an Intel build can return false
+ // from this function if it's launched from the command line, see bug 1727624.
+ // This will not be an issue anymore once we link against the Big Sur SDK.
+ return (macOSVersion() >= MACOS_VERSION_12_0_HEX);
+}
+
/* static */ bool
nsCocoaFeatures::IsAtLeastVersion(int32_t aMajor, int32_t aMinor, int32_t aBugFix)
{
return macOSVersion() >= GetVersion(aMajor, aMinor, aBugFix);
}
+
+/*
+ * Returns true if the process is running under Rosetta translation. Returns
+ * false if running natively or if an error was encountered. We use the
+ * `sysctl.proc_translated` sysctl which is documented by Apple to be used
+ * for this purpose. Note: using this in a sandboxed process requires allowing
+ * the sysctl in the sandbox policy.
+ */
+/* static */ bool nsCocoaFeatures::ProcessIsRosettaTranslated()
+{
+ int ret = 0;
+ size_t size = sizeof(ret);
+ if (sysctlbyname("sysctl.proc_translated", &ret, &size, NULL, 0) == -1) {
+ if (errno != ENOENT) {
+ fprintf(stderr, "Failed to check for translation environment\n");
+ }
+ return false;
+ }
+ return (ret == 1);
+}