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// Qt-Security score:significant reason:default
4
5#ifndef QDARWINPERMISSIONPLUGIN_P_P_H
6#define QDARWINPERMISSIONPLUGIN_P_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. This header file may change
13// from version to version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#if !defined(QT_DARWIN_PERMISSION_PLUGIN)
19#error "This header should only be included from permission plugins"
20#endif
21
22#include <QtCore/qnamespace.h>
23#include <QtCore/private/qpermissions_p.h>
24#include <QtCore/private/qcore_mac_p.h>
25
27
28using namespace QPermissions::Private;
29
30#ifndef QT_JOIN
31#define QT_JOIN_IMPL(A, B) A ## B
32#define QT_JOIN(A, B) QT_JOIN_IMPL(A, B)
33#endif
34
35#define PERMISSION_PLUGIN_NAME(SUFFIX)
37 QDarwin, QT_DARWIN_PERMISSION_PLUGIN), Permission), SUFFIX)
38
39#define PERMISSION_PLUGIN_CLASSNAME PERMISSION_PLUGIN_NAME(Plugin)
40#define PERMISSION_PLUGIN_HANDLER PERMISSION_PLUGIN_NAME(Handler)
41
42QT_DECLARE_NAMESPACED_OBJC_INTERFACE(
44 QDarwinPermissionHandler
45)
46
47QT_BEGIN_NAMESPACE
48
49class Q_CORE_EXPORT PERMISSION_PLUGIN_CLASSNAME : public QDarwinPermissionPlugin
50{
51 Q_OBJECT
52 Q_PLUGIN_METADATA(
53 IID QPermissionPluginInterface_iid
54 FILE "QDarwin" QT_STRINGIFY(QT_DARWIN_PERMISSION_PLUGIN) "PermissionPlugin.json")
55public:
57 : QDarwinPermissionPlugin([[PERMISSION_PLUGIN_HANDLER alloc] init])
58 {}
59};
60
61QT_END_NAMESPACE
62
63// Request
64#if defined(BUILDING_PERMISSION_REQUEST)
65// dummy symbol to be resolved by the linker to force loading of static library
66// (compare -Wl,-u)
67extern "C" void QT_MANGLE_NAMESPACE(PERMISSION_PLUGIN_NAME(Request))() { }
68#endif
69
70// -------------------------------------------------------
71
72namespace {
73template <typename NativeStatus>
74struct NativeStatusHelper;
75
76template <typename NativeStatus>
77Qt::PermissionStatus nativeStatusToQtStatus(NativeStatus status)
78{
79 using Converter = NativeStatusHelper<NativeStatus>;
80 switch (status) {
81 case Converter::Authorized:
82 return Qt::PermissionStatus::Granted;
83 case Converter::Denied:
84 case Converter::Restricted:
85 return Qt::PermissionStatus::Denied;
86 case Converter::Undetermined:
87 return Qt::PermissionStatus::Undetermined;
88 }
89 qCWarning(lcPermissions) << "Unknown permission status" << status << "detected in"
90 << QT_STRINGIFY(QT_DARWIN_PERMISSION_PLUGIN);
91 return Qt::PermissionStatus::Denied;
92}
93} // namespace
94
95#define QT_DEFINE_PERMISSION_STATUS_CONVERTER(NativeStatus) namespace
96 { template<> struct
97 NativeStatusHelper<NativeStatus> \
98{
99 enum {
100 Authorized = NativeStatus##Authorized,
101 Denied = NativeStatus##Denied,
102 Restricted = NativeStatus##Restricted,
103 Undetermined = NativeStatus##NotDetermined
104 }; \
105};}
106
107#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)