File indexing completed on 2024-12-08 13:27:04
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Red Hat Inc 0003 * SPDX-License-Identifier: LGPL-2.0-or-later 0004 * 0005 * SPDX-FileCopyrightText: 2017 Jan Grulich <jgrulich@redhat.com> 0006 * SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org> 0007 */ 0008 0009 #include "access.h" 0010 #include "access_debug.h" 0011 #include "accessdialog.h" 0012 #include "request.h" 0013 #include "utils.h" 0014 0015 #include <QWindow> 0016 0017 AccessPortal::AccessPortal(QObject *parent) 0018 : QDBusAbstractAdaptor(parent) 0019 { 0020 } 0021 0022 AccessPortal::~AccessPortal() 0023 { 0024 } 0025 0026 uint AccessPortal::AccessDialog(const QDBusObjectPath &handle, 0027 const QString &app_id, 0028 const QString &parent_window, 0029 const QString &title, 0030 const QString &subtitle, 0031 const QString &body, 0032 const QVariantMap &options, 0033 QVariantMap &results) 0034 { 0035 qCDebug(XdgDesktopPortalKdeAccess) << "AccessDialog called with parameters:"; 0036 qCDebug(XdgDesktopPortalKdeAccess) << " handle: " << handle.path(); 0037 qCDebug(XdgDesktopPortalKdeAccess) << " app_id: " << app_id; 0038 qCDebug(XdgDesktopPortalKdeAccess) << " parent_window: " << parent_window; 0039 qCDebug(XdgDesktopPortalKdeAccess) << " title: " << title; 0040 qCDebug(XdgDesktopPortalKdeAccess) << " subtitle: " << subtitle; 0041 qCDebug(XdgDesktopPortalKdeAccess) << " body: " << body; 0042 qCDebug(XdgDesktopPortalKdeAccess) << " options: " << options; 0043 0044 auto accessDialog = new ::AccessDialog(); 0045 accessDialog->setBody(body); 0046 accessDialog->setTitle(title); 0047 accessDialog->setSubtitle(subtitle); 0048 0049 if (options.contains(QStringLiteral("deny_label"))) { 0050 accessDialog->setRejectLabel(options.value(QStringLiteral("deny_label")).toString()); 0051 } 0052 0053 if (options.contains(QStringLiteral("grant_label"))) { 0054 accessDialog->setAcceptLabel(options.value(QStringLiteral("grant_label")).toString()); 0055 } 0056 0057 if (options.contains(QStringLiteral("icon"))) { 0058 accessDialog->setIcon(options.value(QStringLiteral("icon")).toString()); 0059 } 0060 0061 // TODO choices 0062 Q_UNUSED(results); 0063 0064 accessDialog->createDialog(); 0065 Utils::setParentWindow(accessDialog->windowHandle(), parent_window); 0066 Request::makeClosableDialogRequest(handle, accessDialog); 0067 if (options.contains(QStringLiteral("modal"))) { 0068 accessDialog->windowHandle()->setModality(options.value(QStringLiteral("modal")).toBool() ? Qt::WindowModal : Qt::NonModal); 0069 } 0070 0071 if (accessDialog->exec()) { 0072 accessDialog->deleteLater(); 0073 return 0; 0074 } 0075 accessDialog->deleteLater(); 0076 0077 return 1; 0078 }