| /**************************************************************************** |
| ** |
| ** Copyright (C) 2015 The Qt Company Ltd. |
| ** Contact: http://www.qt.io/licensing/ |
| ** |
| ** This file is part of the QtCore module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:LGPL21$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see http://www.qt.io/terms-conditions. For further |
| ** information use the contact form at http://www.qt.io/contact-us. |
| ** |
| ** GNU Lesser General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Lesser |
| ** General Public License version 2.1 or version 3 as published by the Free |
| ** Software Foundation and appearing in the file LICENSE.LGPLv21 and |
| ** LICENSE.LGPLv3 included in the packaging of this file. Please review the |
| ** following information to ensure the GNU Lesser General Public License |
| ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and |
| ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
| ** |
| ** As a special exception, The Qt Company gives you certain additional |
| ** rights. These rights are described in The Qt Company LGPL Exception |
| ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #ifndef QCORE_MAC_P_H |
| #define QCORE_MAC_P_H |
| |
| // |
| // W A R N I N G |
| // ------------- |
| // |
| // This file is not part of the Qt API. It exists for the convenience |
| // of other Qt classes. This header file may change from version to |
| // version without notice, or even be removed. |
| // |
| // We mean it. |
| // |
| |
| #ifndef __IMAGECAPTURE__ |
| # define __IMAGECAPTURE__ |
| #endif |
| |
| #if defined(QT_BOOTSTRAPPED) |
| #include <ApplicationServices/ApplicationServices.h> |
| #else |
| #include <CoreFoundation/CoreFoundation.h> |
| #endif |
| |
| #include "qglobal.h" |
| |
| #ifdef Q_OS_MACX |
| #include <CoreServices/CoreServices.h> |
| #endif |
| |
| #ifdef __OBJC__ |
| #include <Foundation/Foundation.h> |
| #endif |
| |
| #include "qstring.h" |
| |
| #if defined( __OBJC__) && defined(QT_NAMESPACE) |
| #define QT_NAMESPACE_ALIAS_OBJC_CLASS(__KLASS__) @compatibility_alias __KLASS__ QT_MANGLE_NAMESPACE(__KLASS__) |
| #else |
| #define QT_NAMESPACE_ALIAS_OBJC_CLASS(__KLASS__) |
| #endif |
| |
| QT_BEGIN_NAMESPACE |
| |
| /* |
| Helper class that automates refernce counting for CFtypes. |
| After constructing the QCFType object, it can be copied like a |
| value-based type. |
| |
| Note that you must own the object you are wrapping. |
| This is typically the case if you get the object from a Core |
| Foundation function with the word "Create" or "Copy" in it. If |
| you got the object from a "Get" function, either retain it or use |
| constructFromGet(). One exception to this rule is the |
| HIThemeGet*Shape functions, which in reality are "Copy" functions. |
| */ |
| template <typename T> |
| class Q_CORE_EXPORT QCFType |
| { |
| public: |
| inline QCFType(const T &t = 0) : type(t) {} |
| inline QCFType(const QCFType &helper) : type(helper.type) { if (type) CFRetain(type); } |
| inline ~QCFType() { if (type) CFRelease(type); } |
| inline operator T() { return type; } |
| inline QCFType operator =(const QCFType &helper) |
| { |
| if (helper.type) |
| CFRetain(helper.type); |
| CFTypeRef type2 = type; |
| type = helper.type; |
| if (type2) |
| CFRelease(type2); |
| return *this; |
| } |
| inline T *operator&() { return &type; } |
| template <typename X> X as() const { return reinterpret_cast<X>(type); } |
| static QCFType constructFromGet(const T &t) |
| { |
| CFRetain(t); |
| return QCFType<T>(t); |
| } |
| protected: |
| T type; |
| }; |
| |
| class Q_CORE_EXPORT QCFString : public QCFType<CFStringRef> |
| { |
| public: |
| inline QCFString(const QString &str) : QCFType<CFStringRef>(0), string(str) {} |
| inline QCFString(const CFStringRef cfstr = 0) : QCFType<CFStringRef>(cfstr) {} |
| inline QCFString(const QCFType<CFStringRef> &other) : QCFType<CFStringRef>(other) {} |
| operator QString() const; |
| operator CFStringRef() const; |
| static QString toQString(CFStringRef cfstr); |
| static CFStringRef toCFStringRef(const QString &str); |
| #ifdef __OBJC__ |
| static QString toQString(const NSString *nsstr); |
| static NSString *toNSString(const QString &string); |
| #endif |
| |
| private: |
| QString string; |
| }; |
| |
| typedef struct { |
| int major, minor, patch; |
| } QAppleOperatingSystemVersion; |
| |
| QAppleOperatingSystemVersion qt_apple_os_version(); |
| |
| QT_END_NAMESPACE |
| |
| #endif // QCORE_MAC_P_H |