File indexing completed on 2024-03-24 04:46:02
0001 /* 0002 This file is part of the Polkit-qt project 0003 SPDX-FileCopyrightText: 2009 Jaroslav Reznik <jreznik@redhat.com> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "polkitqt1-agent-listener.h" 0009 0010 #include <QDebug> 0011 0012 #include "polkitqtlistener_p.h" 0013 0014 #include "polkitqt1-authority.h" 0015 #include "polkitqt1-subject.h" 0016 #include "polkitqt1-identity.h" 0017 #include "polkitqt1-details.h" 0018 0019 namespace PolkitQt1 0020 { 0021 0022 namespace Agent 0023 { 0024 0025 class ListenerPrivate 0026 { 0027 public: 0028 PolkitAgentListener *listener; 0029 #ifndef POLKIT_QT_1_COMPATIBILITY_MODE 0030 void *registeredHandle; 0031 #endif 0032 }; 0033 0034 Listener::Listener(QObject *parent) 0035 : QObject(parent), d(new ListenerPrivate) 0036 { 0037 d->listener = polkit_qt_listener_new(); 0038 0039 qDebug() << "New PolkitAgentListener " << d->listener; 0040 0041 ListenerAdapter::instance()->addListener(this); 0042 } 0043 0044 Listener::Listener(PolkitAgentListener *listener, QObject *parent) 0045 : QObject(parent), d(new ListenerPrivate) 0046 { 0047 d->listener = listener; 0048 0049 if (d->listener != nullptr) { 0050 g_object_ref(d->listener); 0051 } 0052 } 0053 0054 Listener::~Listener() 0055 { 0056 qDebug("Destroying listener"); 0057 0058 ListenerAdapter::instance()->removeListener(this); 0059 #ifndef POLKIT_QT_1_COMPATIBILITY_MODE 0060 if (d->registeredHandle) { 0061 polkit_agent_listener_unregister(d->registeredHandle); 0062 } 0063 #endif 0064 if (d->listener != nullptr) { 0065 g_object_unref(d->listener); 0066 } 0067 } 0068 0069 bool Listener::registerListener(const PolkitQt1::Subject &subject, const QString &objectPath) 0070 { 0071 GError *error = nullptr; 0072 0073 #ifndef POLKIT_QT_1_COMPATIBILITY_MODE 0074 d->registeredHandle = polkit_agent_listener_register(d->listener, 0075 POLKIT_AGENT_REGISTER_FLAGS_NONE, 0076 #else 0077 bool r = polkit_agent_register_listener(d->listener, 0078 #endif 0079 subject.subject(), 0080 objectPath.toLatin1().data(), 0081 #ifndef POLKIT_QT_1_COMPATIBILITY_MODE 0082 nullptr, 0083 #endif 0084 &error); 0085 0086 if (error != nullptr) { 0087 qWarning() << QString("Cannot register authentication agent: %1").arg(error->message); 0088 g_error_free(error); 0089 return false; 0090 } 0091 #ifndef POLKIT_QT_1_COMPATIBILITY_MODE 0092 if (d->registeredHandle == nullptr) { 0093 qWarning() << QString("Cannot register authentication agent!"); 0094 return false; 0095 } 0096 return true; 0097 #else 0098 return r; 0099 #endif 0100 } 0101 0102 const PolkitAgentListener *Listener::listener() 0103 { 0104 return d->listener; 0105 } 0106 0107 } 0108 0109 }