138 lines
3.7 KiB
Plaintext
138 lines
3.7 KiB
Plaintext
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: src/osx/cocoa/utils_base.mm
|
|
// Purpose: various OS X utility functions in the base lib
|
|
// (extracted from cocoa/utils.mm)
|
|
// Author: Tobias Taschner
|
|
// Created: 2016-02-10
|
|
// Copyright: (c) wxWidgets development team
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "wx/wxprec.h"
|
|
|
|
#include "wx/utils.h"
|
|
#include "wx/platinfo.h"
|
|
|
|
#ifndef WX_PRECOMP
|
|
#include "wx/intl.h"
|
|
#include "wx/app.h"
|
|
#endif
|
|
|
|
#include "wx/apptrait.h"
|
|
|
|
#include "wx/osx/private.h"
|
|
|
|
// our OS version is the same in non GUI and GUI cases
|
|
wxOperatingSystemId wxGetOsVersion(int *majorVsn, int *minorVsn)
|
|
{
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_10 || defined(__WXOSX_IPHONE__)
|
|
if ([NSProcessInfo instancesRespondToSelector:@selector(operatingSystemVersion)])
|
|
{
|
|
NSOperatingSystemVersion osVer = [NSProcessInfo processInfo].operatingSystemVersion;
|
|
|
|
if ( majorVsn != NULL )
|
|
*majorVsn = osVer.majorVersion;
|
|
|
|
if ( minorVsn != NULL )
|
|
*minorVsn = osVer.minorVersion;
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
// On OS X versions prior to 10.10 NSProcessInfo does not provide the OS version
|
|
// Deprecated Gestalt calls are required instead
|
|
wxGCC_WARNING_SUPPRESS(deprecated-declarations)
|
|
SInt32 maj, min;
|
|
#ifdef __WXOSX_IPHONE__
|
|
maj = 7;
|
|
min = 0;
|
|
#else
|
|
Gestalt(gestaltSystemVersionMajor, &maj);
|
|
Gestalt(gestaltSystemVersionMinor, &min);
|
|
#endif
|
|
wxGCC_WARNING_RESTORE()
|
|
|
|
if ( majorVsn != NULL )
|
|
*majorVsn = maj;
|
|
|
|
if ( minorVsn != NULL )
|
|
*minorVsn = min;
|
|
}
|
|
|
|
return wxOS_MAC_OSX_DARWIN;
|
|
}
|
|
|
|
bool wxCheckOsVersion(int majorVsn, int minorVsn)
|
|
{
|
|
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_10 || defined(__WXOSX_IPHONE__)
|
|
if ([NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)])
|
|
{
|
|
NSOperatingSystemVersion osVer;
|
|
osVer.majorVersion = majorVsn;
|
|
osVer.minorVersion = minorVsn;
|
|
osVer.patchVersion = 0;
|
|
|
|
return [[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:osVer] != NO;
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
int majorCur, minorCur;
|
|
wxGetOsVersion(&majorCur, &minorCur);
|
|
|
|
return majorCur > majorVsn || (majorCur == majorVsn && minorCur >= minorVsn);
|
|
}
|
|
}
|
|
|
|
wxString wxGetOsDescription()
|
|
{
|
|
|
|
int majorVer, minorVer;
|
|
wxGetOsVersion(&majorVer, &minorVer);
|
|
|
|
#ifndef __WXOSX_IPHONE__
|
|
// Notice that neither the OS name itself nor the code names seem to be
|
|
// ever translated, OS X itself uses the English words even for the
|
|
// languages not using Roman alphabet.
|
|
wxString osBrand = "OS X";
|
|
wxString osName;
|
|
if (majorVer == 10)
|
|
{
|
|
switch (minorVer)
|
|
{
|
|
case 7:
|
|
osName = "Lion";
|
|
// 10.7 was the last version where the "Mac" prefix was used
|
|
osBrand = "Mac OS X";
|
|
break;
|
|
case 8:
|
|
osName = "Mountain Lion";
|
|
break;
|
|
case 9:
|
|
osName = "Mavericks";
|
|
break;
|
|
case 10:
|
|
osName = "Yosemite";
|
|
break;
|
|
case 11:
|
|
osName = "El Capitan";
|
|
break;
|
|
};
|
|
}
|
|
#else
|
|
wxString osBrand = "iOS";
|
|
wxString osName;
|
|
#endif
|
|
|
|
wxString osDesc = osBrand;
|
|
if (!osName.empty())
|
|
osDesc += " " + osName;
|
|
|
|
NSString* osVersionString = [NSProcessInfo processInfo].operatingSystemVersionString;
|
|
if (osVersionString)
|
|
osDesc += " " + wxCFStringRef::AsString((CFStringRef)osVersionString);
|
|
|
|
return osDesc;
|
|
}
|
|
|