24 #include <QtCore/qplugin.h>
25 #include <QtCore/QCoreApplication>
26 #include <QtCore/QTimer>
28 #include <QtGui/QApplication>
29 #include <QtGui/QWidget>
31 #include <QtDBus/QDBusConnection>
32 #include <QtDBus/QDBusConnectionInterface>
36 #include <PolkitQt1/Authority>
37 #include <PolkitQt1/Subject>
64 , m_flyingActions(false)
69 connect(PolkitQt1::Authority::instance(), SIGNAL(configChanged()),
70 this, SLOT(checkForResultChanged()));
71 connect(PolkitQt1::Authority::instance(), SIGNAL(consoleKitDBChanged()),
72 this, SLOT(checkForResultChanged()));
77 m_flyingActions =
true;
78 PolkitQt1::Authority::instance()->enumerateActions();
91 kDebug() <<
"Parent widget does not exist, skipping";
96 if (QDBusConnection::sessionBus().interface()->isServiceRegistered(QLatin1String(
"org.kde.Polkit1AuthAgent"))) {
98 if (qApp == 0 || QApplication::type() == QApplication::Tty) {
99 kDebug() <<
"Not streaming parent as we are on a TTY application";
103 qulonglong wId = parent->effectiveWinId();
106 QDBusMessage methodCall =
107 QDBusMessage::createMethodCall(QLatin1String(
"org.kde.Polkit1AuthAgent"), QLatin1String(
"/org/kde/Polkit1AuthAgent"), QLatin1String(
"org.kde.Polkit1AuthAgent"),
108 QLatin1String(
"setWIdForAction"));
110 methodCall << action;
113 QDBusPendingCall call = QDBusConnection::sessionBus().asyncCall(methodCall);
114 call.waitForFinished();
116 if (call.isError()) {
117 kWarning() <<
"ERROR while streaming the parent!!" << call.error();
120 kDebug() <<
"KDE polkit agent appears too old or not registered on the bus";
126 m_knownActions.clear();
127 foreach (
const PolkitQt1::ActionDescription& action, actions) {
128 m_knownActions << action.actionId();
130 m_flyingActions =
false;
147 PolkitQt1::SystemBusNameSubject subject(QString::fromUtf8(
callerID()));
148 PolkitQt1::Authority::Result r = PolkitQt1::Authority::instance()->checkAuthorizationSync(action, subject,
151 case PolkitQt1::Authority::Yes:
153 case PolkitQt1::Authority::No:
163 return QDBusConnection::systemBus().baseService().toUtf8();
168 PolkitQt1::SystemBusNameSubject subject(QString::fromUtf8(callerID));
169 PolkitQt1::Authority *authority = PolkitQt1::Authority::instance();
172 connect(authority, SIGNAL(checkAuthorizationFinished(PolkitQt1::Authority::Result)),
173 &e, SLOT(requestQuit(PolkitQt1::Authority::Result)));
174 authority->checkAuthorization(action, subject, PolkitQt1::Authority::AllowUserInteraction);
178 case PolkitQt1::Authority::Yes:
187 void Polkit1Backend::checkForResultChanged()
189 foreach(
const QString &action, m_cachedResults.keys()) {
197 PolkitQt1::Authority::instance()->enumerateActions();
198 m_flyingActions =
true;
204 if (m_flyingActions) {
206 while (m_flyingActions && tries < 10) {
209 QTimer::singleShot(200, &e, SLOT(quit()));
215 return m_knownActions.contains(action);