Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qdarwinpermissionplugin_p_p.h
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QDARWINPERMISSIONPLUGIN_P_P_H
5#define QDARWINPERMISSIONPLUGIN_P_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. This header file may change
12// from version to version without notice, or even be removed.
13//
14// We mean it.
15//
16
17#if !defined(QT_DARWIN_PERMISSION_PLUGIN)
18#error "This header should only be included from permission plugins"
19#endif
20
21#include <QtCore/qnamespace.h>
22#include <QtCore/private/qpermissions_p.h>
23#include <QtCore/private/qcore_mac_p.h>
24
26
27using namespace QPermissions::Private;
28
29#ifndef QT_JOIN
30#define QT_JOIN_IMPL(A, B) A ## B
31#define QT_JOIN(A, B) QT_JOIN_IMPL(A, B)
32#endif
33
34#define PERMISSION_PLUGIN_NAME(SUFFIX)
36 QDarwin, QT_DARWIN_PERMISSION_PLUGIN), Permission), SUFFIX)
37
38#define PERMISSION_PLUGIN_CLASSNAME PERMISSION_PLUGIN_NAME(Plugin)
39#define PERMISSION_PLUGIN_HANDLER PERMISSION_PLUGIN_NAME(Handler)
40
41QT_DECLARE_NAMESPACED_OBJC_INTERFACE(
43 QDarwinPermissionHandler
44)
45
46QT_BEGIN_NAMESPACE
47
48class Q_CORE_EXPORT PERMISSION_PLUGIN_CLASSNAME : public QDarwinPermissionPlugin
49{
50 Q_OBJECT
51 Q_PLUGIN_METADATA(
52 IID QPermissionPluginInterface_iid
53 FILE "QDarwin" QT_STRINGIFY(QT_DARWIN_PERMISSION_PLUGIN) "PermissionPlugin.json")
54public:
56 : QDarwinPermissionPlugin([[PERMISSION_PLUGIN_HANDLER alloc] init])
57 {}
58};
59
60QT_END_NAMESPACE
61
62// Request
63#if defined(BUILDING_PERMISSION_REQUEST)
64// dummy symbol to be resolved by the linker to force loading of static library
65// (compare -Wl,-u)
66extern "C" void QT_MANGLE_NAMESPACE(PERMISSION_PLUGIN_NAME(Request))() { }
67#endif
68
69// -------------------------------------------------------
70
71namespace {
72template <typename NativeStatus>
73struct NativeStatusHelper;
74
75template <typename NativeStatus>
76Qt::PermissionStatus nativeStatusToQtStatus(NativeStatus status)
77{
78 using Converter = NativeStatusHelper<NativeStatus>;
79 switch (status) {
80 case Converter::Authorized:
81 return Qt::PermissionStatus::Granted;
82 case Converter::Denied:
83 case Converter::Restricted:
84 return Qt::PermissionStatus::Denied;
85 case Converter::Undetermined:
86 return Qt::PermissionStatus::Undetermined;
87 }
88 qCWarning(lcPermissions) << "Unknown permission status" << status << "detected in"
89 << QT_STRINGIFY(QT_DARWIN_PERMISSION_PLUGIN);
90 return Qt::PermissionStatus::Denied;
91}
92} // namespace
93
94#define QT_DEFINE_PERMISSION_STATUS_CONVERTER(NativeStatus) namespace
95 { template<> struct
96 NativeStatusHelper<NativeStatus> \
97{
98 enum {
99 Authorized = NativeStatus##Authorized,
100 Denied = NativeStatus##Denied,
101 Restricted = NativeStatus##Restricted,
102 Undetermined = NativeStatus##NotDetermined
103 }; \
104};}
105
106#endif // QDARWINPERMISSIONPLUGIN_P_P_H
QList< QString > QStringList
Constructs a string list that contains the given string, str.
#define PERMISSION_PLUGIN_HANDLER
#define QT_JOIN(A, B)
#define QT_JOIN_IMPL(A, B)
#define PERMISSION_PLUGIN_CLASSNAME
#define PERMISSION_PLUGIN_NAME(SUFFIX)