diff --git a/CMakeLists.txt b/CMakeLists.txt index 8470dfeb1..fb52aa96c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -109,19 +109,21 @@ install( ${INCLUDE_INSTALL_DIR}/PolkitTQt/Gui ) +install( + FILES + includes/PolkitTQt/Agent/Listener + includes/PolkitTQt/Agent/Session + DESTINATION + ${INCLUDE_INSTALL_DIR}/PolkitTQt/Agent +) + install( FILES polkit-tqt-export.h -## agent/polkittqt1-agent-listener.h -## agent/polkittqt1-agent-session.h -## ## ${CMAKE_CURRENT_BINARY_DIR}/polkittqt1-version.h -## DESTINATION ${INCLUDE_INSTALL_DIR} ) -## find_package(GObject REQUIRED) -## find_package(GIO REQUIRED) ## ## include (${TQT_USE_FILE}) ## include (InstallSettings) @@ -162,11 +164,6 @@ install( ## DESTINATION ## ${INCLUDE_INSTALL_DIR}/polkit-qt-1 ) ## -## install(FILES -## includes/PolkitTQt/Agent/Listener -## includes/PolkitTQt/Agent/Session -## DESTINATION -## ${INCLUDE_INSTALL_DIR}/polkit-qt-1/PolkitTQt/Agent ) ## ## # CMake Config files ## configure_file(PolkitTQt-1Config.cmake.in "${CMAKE_BINARY_DIR}/PolkitTQt-1Config.cmake" @ONLY) diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index ff4dd3360..0d7047c52 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -22,10 +22,16 @@ tde_setup_largefiles( ) # tqt find_package( TQt ) -# check for polkit -pkg_search_module( POLKIT polkit-gobject-1 ) -if( NOT POLKIT_FOUND ) - tde_message_fatal( "polkit is required, but was not found on your system" ) +# check for polkit-gobject-1 +pkg_search_module( POLKIT_GOBJECT polkit-gobject-1 ) +if( NOT POLKIT_GOBJECT_FOUND ) + tde_message_fatal( "polkit-gobject-1 is required, but was not found on your system" ) +endif( ) + +# check for polkit-agent-1 +pkg_search_module( POLKIT_AGENT polkit-agent-1 ) +if( NOT POLKIT_AGENT_FOUND ) + tde_message_fatal( "polkit-agent-1 is required, but was not found on your system" ) endif( ) # gcc visibility diff --git a/Mainpage.dox b/Mainpage.dox index 1f69da9c2..0ee4ab5f3 100644 --- a/Mainpage.dox +++ b/Mainpage.dox @@ -1,35 +1,35 @@ /** -\mainpage Polkit-tqt-1 - TQt wrapper around polkit-1 +\mainpage Polkit-tqt - TQt wrapper around polkit-1 -\section polkittqt1_overview Overview +\section polkit-tqt_overview Overview -polkit-tqt-1 aims to make it easy for TQt developers to take advantage of +polkit-tqt aims to make it easy for TQt developers to take advantage of polkit API. It is a convenience wrapper around QAction and QAbstractButton that lets you integrate those two components easily with polkit. -polkit-tqt-1 is split in three libraries: polkit-tqt-core-1, polkit-tqt-gui-1 and polkit-tqt-agent-1 +polkit-tqt is split in three libraries: polkit-tqt-core, polkit-tqt-gui and polkit-tqt-agent -\b polkit-tqt-core-1 lets you control actions and authentication without a GUI, with some very +\b polkit-tqt-core lets you control actions and authentication without a GUI, with some very simple functions. It also lets you retrieve and control useful informations on the polkit authority. You will be mostly interested in the \c Authority class. -\b polkit-tqt-gui-1 lets you easily associate GUI items with polkit actions. Through some simple +\b polkit-tqt-gui lets you easily associate GUI items with polkit actions. Through some simple wrapper classes you are able to associate QAction and QAbstractButton to a polkit action, and get their properties changed accordingly to polkit's result. It includes the classes Action, ActionButton and ActionButtons -\b polkit-tqt-agent-1 lets you write your own polkit authentication agents in a very simple way. +\b polkit-tqt-agent lets you write your own polkit authentication agents in a very simple way. -\li A sample usage of polkit-tqt-1 can be found in \ref polkittqt1_example +\li A sample usage of polkit-tqt can be found in \ref polkittqt1_example \li Alphabetical Class List \li Class Hierarchy -\page polkittqt1_example Polkit-tqt-1 usage example +\page polkittqt1_example Polkit-tqt usage example -You can find an example usage of Polkit-tqt-1 in the examples/ dir. You can +You can find an example usage of Polkit-tqt in the examples/ dir. You can build it by passing \c -DBUILD_EXAMPLES=TRUE to your cmake line. The structure consists of a .ui file and a main class, to demonstrate how easy it is to integrate polkit support in an existing application. Let's see some details about it: @@ -85,12 +85,12 @@ with even more ease, just by manually connecting the signal to ActionButton::act to understand why this connection doesn't happen automatically), and Action::authorized() signal notifies you when polkit has authorized you to perform the action. -As you can see, usage of polkit-tqt-1 is extremely simple. Have a look at the complete example +As you can see, usage of polkit-tqt is extremely simple. Have a look at the complete example and to the API Docs for more details. */ // DOXYGEN_PROJECTVERSION=0.96.1 -// DOXYGEN_PROJECTNAME=polkittqt-1 +// DOXYGEN_PROJECTNAME=polkittqt // DOXYGEN_ENABLE=YES diff --git a/agent/CMakeLists.txt b/agent/CMakeLists.txt index 08af11e1b..7ebab2769 100644 --- a/agent/CMakeLists.txt +++ b/agent/CMakeLists.txt @@ -10,9 +10,13 @@ ################################################# include_directories( - ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/core ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} ${TQT_INCLUDE_DIRS} + ${POLKIT_GOBJECT_INCLUDE_DIRS} + ${POLKIT_AGENT_INCLUDE_DIRS} ) link_directories( @@ -22,37 +26,33 @@ link_directories( ##### install headers ########################### -install( FILES - dummy-agent.h - DESTINATION ${INCLUDE_INSTALL_DIR} ) +install( + FILES + polkit-tqt-agent-session.h + polkit-tqt-agent-listener.h + listeneradapter.h + polkit-tqt-listener.h + DESTINATION ${INCLUDE_INSTALL_DIR} +) ##### polkit-tqt-agent (shared) ######################### tde_add_library( polkit-tqt-agent SHARED AUTOMOC SOURCES ${polkit_tqt_agent_MOCS} - dummy-agent.cpp + polkit-tqt-agent-session.cpp + polkit-tqt-agent-listener.cpp + listeneradapter.cpp + polkit-tqt-listener.cpp VERSION 0.0.0 - LINK ${TQT_LIBRARIES} + LINK ${TQT_LIBRARIES} ${POLKIT_GOBJECT_LIBRARIES} ${POLKIT_AGENT_LIBRARIES} polkit-tqt-core-shared DESTINATION ${LIB_INSTALL_DIR} ) -## set(polkit_tqt_agent_SRCS -## polkittqt1-agent-session.cpp -## polkittqt1-agent-listener.cpp -## listeneradapter.cpp -## polkittqtlistener.cpp -## ) -## target_link_libraries(polkit-tqt-agent-1 -## ${POLKIT_LIBRARIES} -## ${TQT_TQTCORE_LIBRARY} -## ${POLKIT_AGENT_LIBRARY} -## polkit-tqt-core-1 -## ) -## -## set_target_properties(polkit-tqt-agent-1 PROPERTIES VERSION ${POLKITTQT-1_LIBRARY_VERSION} -## SOVERSION ${POLKITTQT-1_ABI_VERSION} -## DEFINE_SYMBOL MAKE_POLKIT_TQT_LIB) -## -## install(TARGETS polkit-tqt-agent-1 ${INSTALL_TARGETS_DEFAULT_ARGS}) +## +## set_target_properties(polkit-tqt-agent-1 PROPERTIES VERSION ${POLKITTQT-1_LIBRARY_VERSION} +## SOVERSION ${POLKITTQT-1_ABI_VERSION} +## DEFINE_SYMBOL MAKE_POLKIT_TQT_LIB) +## + diff --git a/agent/dummy-agent.cpp b/agent/dummy-agent.cpp deleted file mode 100644 index 2d7fcdcab..000000000 --- a/agent/dummy-agent.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This file is part of the Polkit-tqt project - * Copyright (C) 2009 Daniel Nicoletti - * Copyright (C) 2009 Dario Freddi - * Copyright (C) 2009 Jaroslav Reznik - * Copyright (C) 2009 Radek Novacek - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "dummy-agent.h" - -namespace PolkitTQt -{ - - -DummyAgent* DummyAgent::instance() -{ - return 0; -} - -} - -#include "dummy-agent.moc" diff --git a/agent/dummy-agent.h b/agent/dummy-agent.h deleted file mode 100644 index c01d0e748..000000000 --- a/agent/dummy-agent.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * This file is part of the Polkit-tqt project - * Copyright (C) 2009 Daniel Nicoletti - * Copyright (C) 2009 Dario Freddi - * Copyright (C) 2009 Jaroslav Reznik - * Copyright (C) 2009 Radek Novacek - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#ifndef DUMMY_AGENT_H -#define DUMMY_AGENT_H - -#define POLKIT_TQT_EXPORT TQ_EXPORT - - -/** - * \namespace PolkitTQt PolkitTQt - * - * \brief Namespace wrapping Polkit-TQt classes - * - * This namespace wraps all Polkit-TQt classes. - */ -namespace PolkitTQt -{ - -/** - * \class DummyAgent - * - * \brief Convenience class for TQt/KDE applications - * - * This class is a dummy used for initial basic compiling. - */ -class POLKIT_TQT_EXPORT DummyAgent -{ -public: - - static DummyAgent* instance(); -}; - -} - -#endif diff --git a/agent/listeneradapter.cpp b/agent/listeneradapter.cpp index 968704e37..ad4730ed5 100644 --- a/agent/listeneradapter.cpp +++ b/agent/listeneradapter.cpp @@ -18,129 +18,119 @@ * Boston, MA 02110-1301, USA. */ -#include "listeneradapter_p.h" -#include #define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE 1 #include +#include "listeneradapter.h" + + namespace PolkitTQt { namespace Agent { -class ListenerAdapterHelper -{ -public: - ListenerAdapterHelper() : q(0) {} - ~ListenerAdapterHelper() { - delete q; - } - ListenerAdapter *q; -}; +//-------------------------------------- +// ListenerAdapter +//-------------------------------------- -TQ_GLOBAL_STATIC(ListenerAdapterHelper, s_globalListenerAdapter) +ListenerAdapter *ListenerAdapter::m_theListenerAdapter = NULL; ListenerAdapter *ListenerAdapter::instance() { - if (!s_globalListenerAdapter()->q) { - new ListenerAdapter(); - } - - return s_globalListenerAdapter()->q; + if (!m_theListenerAdapter) + { + m_theListenerAdapter = new ListenerAdapter(); + } + return m_theListenerAdapter; } -ListenerAdapter::ListenerAdapter(TQObject *parent) - : TQObject(parent) +ListenerAdapter::ListenerAdapter(TQObject *parent) : TQObject(parent) { - Q_ASSERT(!s_globalListenerAdapter()->q); - s_globalListenerAdapter()->q = this; } Listener* ListenerAdapter::findListener(PolkitAgentListener *listener) { - Listener *listItem; - - TQ_FOREACH(listItem, m_listeners) { - Q_ASSERT(listItem); - - if (listItem->listener() == listener) { - return listItem; - } + TQValueList::iterator listerIt; + for (listerIt = m_listeners.begin(); listerIt != m_listeners.end(); ++listerIt) + { + Listener *listItem = *listerIt; + if (listItem && listItem->listener() == listener) + { + return listItem; } + } - return NULL; + return NULL; } -void ListenerAdapter::polkit_tqt_listener_initiate_authentication(PolkitAgentListener *listener, - const gchar *action_id, - const gchar *message, - const gchar *icon_name, - PolkitDetails *details, - const gchar *cookie, - GList *identities, - GCancellable *cancellable, - GSimpleAsyncResult *result) +void ListenerAdapter::polkit_tqt_listener_initiate_authentication(PolkitAgentListener *listener, + const gchar *action_id, const gchar *message, const gchar *icon_name, + PolkitDetails *details, const gchar *cookie, GList *identities, + GCancellable *cancellable, GSimpleAsyncResult *result) { - tqDebug() << "polkit_tqt_listener_initiate_authentication callback for " << listener; - - PolkitTQt::Identity::List idents; - PolkitTQt::Details dets(details); - - Listener *list = findListener(listener); - - for (GList *identity = g_list_first(identities); identity != NULL; identity = g_list_next(identity)) { - idents.append(PolkitTQt::Identity((PolkitIdentity *)identity->data)); - } - - list->initiateAuthentication(TQString::fromUtf8(action_id), - TQString::fromUtf8(message), - TQString::fromUtf8(icon_name), - dets, - TQString::fromUtf8(cookie), - idents, - new AsyncResult(result)); + tqDebug("polkit_tqt_listener_initiate_authentication callback for %p", listener); + + Identity::List idents; + Details dets(details); + GList *identity; + for (identity = g_list_first(identities); identity != NULL; identity = g_list_next(identity)) + { + idents.append(Identity((PolkitIdentity*)identity->data)); + } + + Listener *list = findListener(listener); + list->initiateAuthentication(TQString::fromUtf8(action_id), TQString::fromUtf8(message), + TQString::fromUtf8(icon_name), dets, TQString::fromUtf8(cookie), idents, + new AsyncResult(result)); } -gboolean ListenerAdapter::polkit_tqt_listener_initiate_authentication_finish(PolkitAgentListener *listener, - GAsyncResult *res, - GError **error) +gboolean ListenerAdapter::polkit_tqt_listener_initiate_authentication_finish( + PolkitAgentListener *listener, GAsyncResult *res, GError **error) { - tqDebug() << "polkit_tqt_listener_initiate_authentication_finish callback for " << listener; - - GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT(res); - if (g_simple_async_result_propagate_error(simple, error)) { - return false; - } - return true; + tqDebug("polkit_tqt_listener_initiate_authentication_finish callback for %p", listener); + + GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT(res); + if (g_simple_async_result_propagate_error(simple, error)) + { + return false; + } + return true; } void ListenerAdapter::cancelled_cb(PolkitAgentListener *listener) { - tqDebug() << "cancelled_cb for " << listener; - - Listener *list = findListener(listener); + tqDebug("cancelled_cb for %p", listener); + Listener *list = findListener(listener); + if (list) + { list->cancelAuthentication(); + } } void ListenerAdapter::addListener(Listener *listener) { - tqDebug() << "Adding new listener " << listener << "for " << listener->listener(); + tqDebug("Adding new listener %p for %p", listener, listener->listener()); - m_listeners.append(listener); + m_listeners.append(listener); } void ListenerAdapter::removeListener(Listener *listener) { - tqDebug() << "Removing listener " << listener; - - // should be safe as we don't have more than one same listener registered in one time - m_listeners.removeOne(listener); + tqDebug("Removing listener %p", listener); + + // should be safe as we don't have more than one same listener registered in one time + TQValueList::iterator listerIt = m_listeners.find(listener); + if (listerIt != m_listeners.end()) + { + m_listeners.remove(listerIt); + } } } } -#include "listeneradapter_p.moc" +#include "listeneradapter.moc" + diff --git a/agent/listeneradapter_p.h b/agent/listeneradapter.h similarity index 69% rename from agent/listeneradapter_p.h rename to agent/listeneradapter.h index 98cb302d4..b05d9966f 100644 --- a/agent/listeneradapter_p.h +++ b/agent/listeneradapter.h @@ -21,11 +21,11 @@ #ifndef LISTENER_ADAPTER_P_H #define LISTENER_ADAPTER_P_H -#include +#include "tqobject.h" -#include "polkittqt1-agent-listener.h" -#include "polkittqt1-identity.h" -#include "polkittqt1-details.h" +#include "polkit-tqt-agent-listener.h" +#include "polkit-tqt-identity.h" +#include "polkit-tqt-details.h" typedef struct _GList GList; typedef struct _GCancellable GCancellable; @@ -35,6 +35,10 @@ typedef struct _GError GError; typedef int gboolean; typedef char gchar; +class TQString; +template class TQValueList; + + namespace PolkitTQt { @@ -43,35 +47,40 @@ namespace Agent class AsyncResult; class Listener; + class ListenerAdapter : public TQObject { - Q_OBJECT - TQ_DISABLE_COPY(ListenerAdapter) -public: + Q_OBJECT + + public: static ListenerAdapter* instance(); - ~ListenerAdapter() {} - - void polkit_tqt_listener_initiate_authentication(PolkitAgentListener *listener, - const gchar *action_id, - const gchar *message, - const gchar *icon_name, - PolkitDetails *details, - const gchar *cookie, - GList *identities, - GCancellable *cancellable, - GSimpleAsyncResult *result); - - gboolean polkit_tqt_listener_initiate_authentication_finish(PolkitAgentListener *listener, - GAsyncResult *res, - GError **error); + ~ListenerAdapter() + { + } + + void polkit_tqt_listener_initiate_authentication(PolkitAgentListener *listener, + const gchar *action_id, const gchar *message, const gchar *icon_name, + PolkitDetails *details, const gchar *cookie, GList *identities, + GCancellable *cancellable, GSimpleAsyncResult *result); + + gboolean polkit_tqt_listener_initiate_authentication_finish(PolkitAgentListener *listener, + GAsyncResult *res, GError **error); + void cancelled_cb(PolkitAgentListener *listener); -private: + + private: void addListener(Listener *listener); void removeListener(Listener *listener); Listener* findListener(PolkitAgentListener *listener); explicit ListenerAdapter(TQObject *parent = 0); - TQList m_listeners; + TQValueList m_listeners; + + // Disable copy + ListenerAdapter(const ListenerAdapter&); + ListenerAdapter& operator=(const ListenerAdapter&); + + static ListenerAdapter *m_theListenerAdapter; friend class Listener; }; @@ -81,3 +90,4 @@ private: } #endif + diff --git a/agent/polkit-tqt-agent-listener.cpp b/agent/polkit-tqt-agent-listener.cpp new file mode 100644 index 000000000..2ff78eaf6 --- /dev/null +++ b/agent/polkit-tqt-agent-listener.cpp @@ -0,0 +1,105 @@ +/* + * This file is part of the Polkit-tqt project + * Copyright (C) 2009 Jaroslav Reznik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "polkit-tqt-listener.h" +#include "polkit-tqt-agent-listener.h" + +#include "polkit-tqt-authority.h" +#include "polkit-tqt-subject.h" +#include "polkit-tqt-identity.h" +#include "polkit-tqt-details.h" + + +namespace PolkitTQt +{ + +namespace Agent +{ + +class ListenerPrivate +{ + public: + PolkitAgentListener *listener; + void *registeredHandle; +}; + +Listener::Listener(TQObject *parent) : TQObject(parent), d(new ListenerPrivate) +{ + d->listener = polkit_tqt_listener_new(); + + tqDebug("New PolkitAgentListener %p", d->listener); + + ListenerAdapter::instance()->addListener(this); +} + +Listener::Listener(PolkitAgentListener *listener, TQObject *parent) + : TQObject(parent), d(new ListenerPrivate) +{ + d->listener = listener; +} + +Listener::~Listener() +{ + tqDebug("Destroying listener"); + + ListenerAdapter::instance()->removeListener(this); + if (d->registeredHandle) + { + polkit_agent_listener_unregister(d->registeredHandle); + } + if (d->listener != NULL) + { + g_object_unref(d->listener); + } +} + +bool Listener::registerListener(const PolkitTQt::Subject &subject, const TQString &objectPath) +{ + GError *error = NULL; + + d->registeredHandle = polkit_agent_listener_register(d->listener, + POLKIT_AGENT_REGISTER_FLAGS_NONE, subject.subject(), objectPath.ascii(), NULL, &error); + + if (error != NULL) + { + tqWarning(TQString("Cannot register authentication agent: %1").arg(error->message)); + g_error_free(error); + return false; + } + + if (d->registeredHandle == NULL) + { + tqWarning(TQString("Cannot register authentication agent!")); + return false; + } + return true; +} + +const PolkitAgentListener *Listener::listener() +{ + return d->listener; +} + +} + +} + +#include "polkit-tqt-agent-listener.moc" + diff --git a/agent/polkitqt1-agent-listener.h b/agent/polkit-tqt-agent-listener.h similarity index 83% rename from agent/polkitqt1-agent-listener.h rename to agent/polkit-tqt-agent-listener.h index d8fdb76d3..30115dd8e 100644 --- a/agent/polkitqt1-agent-listener.h +++ b/agent/polkit-tqt-agent-listener.h @@ -22,31 +22,28 @@ #define POLKIT_TQT_AGENT_LISTENER_H #include "polkit-tqt-export.h" +#include "polkit-tqt-agent-session.h" +#include "polkit-tqt-identity.h" -#include +#include "tqobject.h" -#include "polkittqt1-agent-session.h" +typedef struct _PolkitAgentListener PolkitAgentListener; -#define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE 1 +class TQString; -typedef struct _PolkitAgentListener PolkitAgentListener; namespace PolkitTQt { class Subject; class Identity; class Details; -} - -namespace PolkitTQt -{ namespace Agent { class ListenerPrivate; /** - * \class Listener polkittqt1-agent-listener.h Listener + * \class Listener polkit-tqt-agent-listener.h Listener * \author Jaroslav Reznik * * \brief Listener is abstract class used for implementing authentication agents. @@ -60,9 +57,9 @@ class ListenerPrivate; */ class POLKIT_TQT_EXPORT Listener : public TQObject { - Q_OBJECT - TQ_DISABLE_COPY(Listener) -public: + Q_OBJECT + + public: /** * \brief Constructor of Listener class */ @@ -93,7 +90,7 @@ public: * \param objectPath DBus object path * \return \c True if the polkittqt1-agent-listener.has been registered, \c False otherwise */ - bool registerListener(const PolkitTQt::Subject &subject, const TQString &objectPath); + bool registerListener(const Subject &subject, const TQString &objectPath); /** * \brief Returns pointer to the PolkitAgentListener. @@ -104,7 +101,7 @@ public: */ const PolkitAgentListener *listener(); -public Q_SLOTS: +public slots: /** * \brief Initiate authentication for the action * @@ -123,16 +120,11 @@ public Q_SLOTS: * authentication is done. You can pass it to the constructor of the Session class * and then call session->result()->complete() to mark the action as done. */ - virtual void initiateAuthentication(const TQString &actionId, - const TQString &message, - const TQString &iconName, - const PolkitTQt::Details &details, - const TQString &cookie, - const PolkitTQt::Identity::List &identities, - AsyncResult *result) = 0; + virtual void initiateAuthentication(const TQString &actionId, const TQString &message, + const TQString &iconName, const Details &details, const TQString &cookie, + const Identity::List &identities, AsyncResult *result) = 0; /** - * TODO: Is this method really required ? * \brief Finishes an authentication request from the polkit daemon. * * \note You have to reimplement this method in the subclass. @@ -142,7 +134,6 @@ public Q_SLOTS: virtual bool initiateAuthenticationFinish() = 0; /** - * TODO: Is this method really required ? * \brief Cancels an authentication request from the polkit daemon. * * \note You have to reimplement this method in the subclass. @@ -152,10 +143,16 @@ public Q_SLOTS: virtual void cancelAuthentication() = 0; private: - ListenerPrivate * const d; + // Disable copy + Listener(const Listener&); + Listener& operator=(const Listener&); + + ListenerPrivate *const d; }; + } } #endif + diff --git a/agent/polkit-tqt-agent-session.cpp b/agent/polkit-tqt-agent-session.cpp new file mode 100644 index 000000000..b65bb90b2 --- /dev/null +++ b/agent/polkit-tqt-agent-session.cpp @@ -0,0 +1,189 @@ +/* + * This file is part of the PolKit-tqt project + * Copyright (C) 2009 Radek Novacek + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE +#include + +#include "polkit-tqt-identity.h" +#include "polkit-tqt-agent-session.h" + +#include + + +using namespace PolkitTQt; +using namespace PolkitTQt::Agent; + +//-------------------------------------- +// Session::Private +//-------------------------------------- + +class Session::Private +{ + public: + Private() + { + } + + ~Private() + { + // polkitAgentSession is freed in Session d'tor + } + + static void completed(PolkitAgentSession *s, gboolean gained_authorization, gpointer user_data); + static void request(PolkitAgentSession *s, gchar *request, gboolean echo_on, gpointer user_data); + static void showError(PolkitAgentSession *s, gchar *text, gpointer user_data); + static void showInfo(PolkitAgentSession *s, gchar *text, gpointer user_data); + + AsyncResult *result; + PolkitAgentSession *polkitAgentSession; +}; + +void Session::Private::completed(PolkitAgentSession *s, gboolean gained_authorization, + gpointer user_data) +{ + Session *session = (Session *)user_data; + emit(session)->completed(gained_authorization); + + //free session here as polkit documentation asks + g_object_unref(session->d->polkitAgentSession); + session->d->polkitAgentSession = 0; +} + +void Session::Private::request(PolkitAgentSession *s, gchar *request, gboolean echo_on, + gpointer user_data) +{ + emit((Session*)user_data)->request(TQString::fromUtf8(request), echo_on); +} + +void Session::Private::showError(PolkitAgentSession *s, gchar *text, gpointer user_data) +{ + emit((Session*)user_data)->showError(TQString::fromUtf8(text)); +} + +void Session::Private::showInfo(PolkitAgentSession *s, gchar *text, gpointer user_data) +{ + emit((Session*)user_data)->showInfo(TQString::fromUtf8(text)); +} + +//-------------------------------------- +// Session +//-------------------------------------- + +Session::Session(const Identity &identity, const TQString &cookie, AsyncResult *result, + TQObject *parent) : TQObject(parent), d(new Private) +{ + d->result = result; + d->polkitAgentSession = polkit_agent_session_new(identity.identity(), cookie.utf8().data()); + g_signal_connect(G_OBJECT(d->polkitAgentSession), "completed", G_CALLBACK(Private::completed), this); + g_signal_connect(G_OBJECT(d->polkitAgentSession), "request", G_CALLBACK(Private::request), this); + g_signal_connect(G_OBJECT(d->polkitAgentSession), "show-error", G_CALLBACK(Private::showError), this); + g_signal_connect(G_OBJECT(d->polkitAgentSession), "show-info", G_CALLBACK(Private::showInfo), this); +} + +Session::Session(PolkitAgentSession *pkAgentSession, TQObject *parent) + : TQObject(parent), d(new Private) +{ + d->polkitAgentSession = pkAgentSession; + g_signal_connect(G_OBJECT(d->polkitAgentSession), "completed", G_CALLBACK(Private::completed), this); + g_signal_connect(G_OBJECT(d->polkitAgentSession), "request", G_CALLBACK(Private::request), this); + g_signal_connect(G_OBJECT(d->polkitAgentSession), "show-error", G_CALLBACK(Private::showError), this); + g_signal_connect(G_OBJECT(d->polkitAgentSession), "show-info", G_CALLBACK(Private::showInfo), this); +} + +Session::~Session() +{ + if (d->polkitAgentSession) + { + g_object_unref(d->polkitAgentSession); + } + + delete d; +} + +void Session::initiate() +{ + polkit_agent_session_initiate(d->polkitAgentSession); +} + +void Session::setResponse(const TQString &response) +{ + polkit_agent_session_response(d->polkitAgentSession, response.utf8().data()); +} + +void Session::cancel() +{ + polkit_agent_session_cancel(d->polkitAgentSession); +} + +//-------------------------------------- +// AsyncResult::Private +//-------------------------------------- + +class AsyncResult::Private +{ + public: + Private(GSimpleAsyncResult *r) : result(r) + { + } + + GSimpleAsyncResult *result; +}; + +AsyncResult* Session::result() +{ + return d->result; +} + +AsyncResult::AsyncResult(GSimpleAsyncResult *result) : d(new Private(result)) +{ +} + +AsyncResult::~AsyncResult() +{ + if (d->result) + { + g_object_unref(d->result); + } +} + +void AsyncResult::setCompleted() +{ + if (d->result == NULL) + { + return; + } + g_simple_async_result_complete(d->result); + // Assure that completed won't be called twice + g_object_unref(d->result); + d->result = NULL; +} + +void AsyncResult::setError(const TQString &text) +{ + if (d->result == NULL) + { + return; + } + g_simple_async_result_set_error(d->result, POLKIT_ERROR, POLKIT_ERROR_FAILED, "%s", + text.utf8().data()); +} + +#include "polkit-tqt-agent-session.moc" + diff --git a/agent/polkitqt1-agent-session.h b/agent/polkit-tqt-agent-session.h similarity index 88% rename from agent/polkitqt1-agent-session.h rename to agent/polkit-tqt-agent-session.h index c4a5ac531..9f3e813d8 100644 --- a/agent/polkitqt1-agent-session.h +++ b/agent/polkit-tqt-agent-session.h @@ -1,5 +1,5 @@ /* - * This file is part of the PolKit1-tqt project + * This file is part of the PolKit-tqt project * Copyright (C) 2009 Radek Novacek * * This library is free software; you can redistribute it and/or @@ -21,14 +21,19 @@ #ifndef POLKIT_TQT_AGENT_SESSION_H #define POLKIT_TQT_AGENT_SESSION_H -#include -#include "polkittqt1-identity.h" +#include "polkit-tqt-export.h" + +#include "tqobject.h" typedef struct _GSimpleAsyncResult GSimpleAsyncResult; typedef struct _PolkitAgentSession PolkitAgentSession; +class TQString; + + namespace PolkitTQt { +class Identity; /** * \namespace Agent Agent @@ -47,7 +52,7 @@ namespace Agent */ class POLKIT_TQT_EXPORT AsyncResult { -public: + public: explicit AsyncResult(GSimpleAsyncResult *result); virtual ~AsyncResult(); @@ -64,13 +69,13 @@ public: */ void setError(const TQString &text); -private: + private: class Private; - Private * const d; + Private *const d; }; /** - * \class Session polkittqt1-agent-session.h Session + * \class Session polkit-tqt-agent-session.h Session * \author Radek Novacek * * This class is interface for interacting with native @@ -79,9 +84,9 @@ private: */ class POLKIT_TQT_EXPORT Session : public TQObject { - Q_OBJECT - TQ_DISABLE_COPY(Session) -public: + Q_OBJECT + + public: /** * Create a new authentication session. * @@ -90,7 +95,8 @@ public: * \param result Result of the authentication action. Must be finished using complete() method. * \param parent */ - Session(const PolkitTQt::Identity& identity, const TQString &cookie, AsyncResult *result = 0, TQObject *parent = 0); + Session(const Identity &identity, const TQString &cookie, AsyncResult *result = 0, + TQObject *parent = 0); /** * Create a new authentication session from PolkitAgentSession object @@ -134,10 +140,10 @@ public: */ AsyncResult *result(); -Q_SIGNALS: + signals: /** * This signal will be emitted when the authentication - * polkittqt1-agent-session.has been completed or cancelled. + * polkit-tqt-agent-session.has been completed or cancelled. * * \param gainedAuthorization \c True if authorization was successfully obtained. */ @@ -169,8 +175,12 @@ Q_SIGNALS: void showInfo(const TQString &text); private: + // Disable copy + Session(const Session&); + Session& operator=(const Session&); + class Private; - Private * const d; + Private *const d; }; } @@ -178,3 +188,4 @@ private: } #endif // SESSION_H + diff --git a/agent/polkit-tqt-listener.cpp b/agent/polkit-tqt-listener.cpp new file mode 100644 index 000000000..269dcf7ec --- /dev/null +++ b/agent/polkit-tqt-listener.cpp @@ -0,0 +1,111 @@ +/* + * This file is part of the Polkit-tqt project + * Copyright (C) 2009 Jaroslav Reznik + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * polkit-tqt-listener based on code by David Zeuthen + */ + +#include "polkit-tqt-listener.h" +#include + + +using namespace PolkitTQt::Agent; + +struct _PolkitTQtListener +{ + PolkitAgentListener parent_instance; +}; + +struct _PolkitTQtListenerClass +{ + PolkitAgentListenerClass parent_class; +}; + +static void polkit_tqt_listener_initiate_authentication(PolkitAgentListener *agent_listener, + const gchar *action_id, const gchar *message, const gchar *icon_name, + PolkitDetails *details, const gchar *cookie, GList *identities, + GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data); + +static gboolean polkit_tqt_listener_initiate_authentication_finish(PolkitAgentListener *listener, + GAsyncResult *res, GError **error); + +G_DEFINE_TYPE(PolkitTQtListener, polkit_tqt_listener, POLKIT_AGENT_TYPE_LISTENER); + +static void polkit_tqt_listener_init(PolkitTQtListener *listener) +{ +} + +static void polkit_tqt_listener_finalize(GObject *object) +{ + PolkitTQtListener *listener = POLKIT_TQT_LISTENER(object); + if (G_OBJECT_CLASS(polkit_tqt_listener_parent_class)->finalize != NULL) + { + G_OBJECT_CLASS(polkit_tqt_listener_parent_class)->finalize(object); + } +} + +static void polkit_tqt_listener_class_init(PolkitTQtListenerClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + PolkitAgentListenerClass *listener_class = POLKIT_AGENT_LISTENER_CLASS(klass); + + gobject_class->finalize = polkit_tqt_listener_finalize; + + listener_class->initiate_authentication = polkit_tqt_listener_initiate_authentication; + listener_class->initiate_authentication_finish = polkit_tqt_listener_initiate_authentication_finish; +} + +PolkitAgentListener *polkit_tqt_listener_new(void) +{ + return POLKIT_AGENT_LISTENER(g_object_new(POLKIT_TQT_TYPE_LISTENER, NULL)); +} + +static void cancelled_cb(GCancellable *cancellable, gpointer user_data) +{ + ListenerAdapter::instance()->cancelled_cb((PolkitAgentListener *)user_data); +} + +static void polkit_tqt_listener_initiate_authentication(PolkitAgentListener *agent_listener, + const gchar *action_id, const gchar *message, const gchar *icon_name, + PolkitDetails *details, const gchar *cookie, GList *identities, + GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) +{ + tqDebug("Listener adapter polkit_tqt_listener_initiate_authentication"); + PolkitTQtListener *listener = POLKIT_TQT_LISTENER(agent_listener); + + // The result of asynchronous method will be created here and it will be pushed to the listener. + GSimpleAsyncResult *result = g_simple_async_result_new((GObject*)listener, callback, user_data, + agent_listener); + tqDebug("GSimpleAsyncResult: %p", result); + + ListenerAdapter::instance()->polkit_tqt_listener_initiate_authentication(agent_listener, + action_id, message, icon_name, details, cookie, identities, cancellable, result); + if (cancellable != NULL) + { + g_signal_connect(cancellable, "cancelled", G_CALLBACK(cancelled_cb), agent_listener); + } +} + +static gboolean polkit_tqt_listener_initiate_authentication_finish(PolkitAgentListener *listener, + GAsyncResult *res, GError **error) +{ + tqDebug("Listener adapter polkit_tqt_listener_initiate_authentication_finish"); + return ListenerAdapter::instance()->polkit_tqt_listener_initiate_authentication_finish(listener, + res, error); +} + diff --git a/agent/polkitqtlistener_p.h b/agent/polkit-tqt-listener.h similarity index 80% rename from agent/polkitqtlistener_p.h rename to agent/polkit-tqt-listener.h index b9f7faace..55895cc6e 100644 --- a/agent/polkitqtlistener_p.h +++ b/agent/polkit-tqt-listener.h @@ -20,23 +20,28 @@ * polkit-tqt-listener based on code by David Zeuthen */ -#ifndef POLKITTQT_LISTENER_P_H -#define POLKITTQT_LISTENER_P_H +#ifndef POLKIT_TQT_LISTENER_P_H +#define POLKIT_TQT_LISTENER_P_H #define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE 1 +#include -#include "listeneradapter_p.h" +#include "listeneradapter.h" -#include G_BEGIN_DECLS #define POLKIT_TQT_TYPE_LISTENER (polkit_tqt_listener_get_type()) -#define POLKIT_TQT_LISTENER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), POLKIT_TQT_TYPE_LISTENER, PolkitTQtListener)) -#define POLKIT_TQT_LISTENER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), POLKIT_TQT_TYPE_LISTENER, PolkitTQtListenerClass)) -#define POLKIT_TQT_LISTENER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), POLKIT_TQT_TYPE_LISTENER, PolkitTQtListenerClass)) -#define POLKIT_TQT_IS_LISTENER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), POLKIT_TQT_TYPE_LISTENER)) -#define POLKIT_TQT_IS_LISTENER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), POLKIT_TQT_TYPE_LISTENER)) +#define POLKIT_TQT_LISTENER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \ + POLKIT_TQT_TYPE_LISTENER, PolkitTQtListener)) +#define POLKIT_TQT_LISTENER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), \ + POLKIT_TQT_TYPE_LISTENER, PolkitTQtListenerClass)) +#define POLKIT_TQT_LISTENER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), \ + POLKIT_TQT_TYPE_LISTENER, PolkitTQtListenerClass)) +#define POLKIT_TQT_IS_LISTENER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \ + POLKIT_TQT_TYPE_LISTENER)) +#define POLKIT_TQT_IS_LISTENER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \ + POLKIT_TQT_TYPE_LISTENER)) typedef struct _PolkitTQtListener PolkitTQtListener; typedef struct _PolkitTQtListenerClass PolkitTQtListenerClass; @@ -46,4 +51,5 @@ PolkitAgentListener *polkit_tqt_listener_new(void); G_END_DECLS -#endif /* POLKIT_TQT_LISTENER_H */ +#endif + diff --git a/agent/polkitqt1-agent-listener.cpp b/agent/polkitqt1-agent-listener.cpp deleted file mode 100644 index 456794878..000000000 --- a/agent/polkitqt1-agent-listener.cpp +++ /dev/null @@ -1,124 +0,0 @@ -/* - * This file is part of the Polkit-tqt project - * Copyright (C) 2009 Jaroslav Reznik - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "polkittqt1-agent-listener.h" - -#include - -#include "polkittqtlistener_p.h" - -#include "polkittqt1-authority.h" -#include "polkittqt1-subject.h" -#include "polkittqt1-identity.h" -#include "polkittqt1-details.h" - -namespace PolkitTQt -{ - -namespace Agent -{ - -class ListenerPrivate -{ -public: - PolkitAgentListener *listener; -#ifndef POLKIT_TQT_1_COMPATIBILITY_MODE - void *registeredHandle; -#endif -}; - -Listener::Listener(TQObject *parent) - : TQObject(parent), d(new ListenerPrivate) -{ - g_type_init(); - - d->listener = polkit_tqt_listener_new(); - - tqDebug() << "New PolkitAgentListener " << d->listener; - - ListenerAdapter::instance()->addListener(this); -} - -Listener::Listener(PolkitAgentListener *listener, TQObject *parent) - : TQObject(parent), d(new ListenerPrivate) -{ - g_type_init(); - - d->listener = listener; -} - -Listener::~Listener() -{ - tqDebug("Destroying listener"); - - ListenerAdapter::instance()->removeListener(this); -#ifndef POLKIT_TQT_1_COMPATIBILITY_MODE - if (d->registeredHandle) { - polkit_agent_listener_unregister(d->registeredHandle); - } -#endif - if (d->listener != NULL) { - g_object_unref(d->listener); - } -} - -bool Listener::registerListener(const PolkitTQt::Subject &subject, const TQString &objectPath) -{ - GError *error = NULL; - -#ifndef POLKIT_TQT_1_COMPATIBILITY_MODE - d->registeredHandle = polkit_agent_listener_register(d->listener, - POLKIT_AGENT_REGISTER_FLAGS_NONE, -#else - bool r = polkit_agent_register_listener(d->listener, -#endif - subject.subject(), - objectPath.toAscii().data(), -#ifndef POLKIT_TQT_1_COMPATIBILITY_MODE - NULL, -#endif - &error); - - if (error != NULL) { - tqWarning() << TQString("Cannot register authentication agent: %1").arg(error->message); - g_error_free(error); - return false; - } -#ifndef POLKIT_TQT_1_COMPATIBILITY_MODE - if (d->registeredHandle == NULL) { - tqWarning() << TQString("Cannot register authentication agent!"); - return false; - } - return true; -#else - return r; -#endif -} - -const PolkitAgentListener *Listener::listener() -{ - return d->listener; -} - -} - -} - -#include "polkittqt1-agent-listener.moc" diff --git a/agent/polkitqt1-agent-session.cpp b/agent/polkitqt1-agent-session.cpp deleted file mode 100644 index 1b5591dda..000000000 --- a/agent/polkitqt1-agent-session.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/* - * This file is part of the PolKit1-tqt project - * Copyright (C) 2009 Radek Novacek - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "polkittqt1-agent-session.h" - -#include - -#include "polkittqt1-identity.h" - -#define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE 1 -#include - -using namespace PolkitTQt::Agent; - -class Session::Private -{ -public: - Private() {} - ~Private(); - - static void completed(PolkitAgentSession *s, gboolean gained_authorization, gpointer user_data); - static void request(PolkitAgentSession *s, gchar *request, gboolean echo_on, gpointer user_data); - static void showError(PolkitAgentSession *s, gchar *text, gpointer user_data); - static void showInfo(PolkitAgentSession *s, gchar *text, gpointer user_data); - - AsyncResult *result; - PolkitAgentSession *polkitAgentSession; -}; - -Session::Private::~Private() -{ - // polkitAgentSession is freed in Session d'tor -} - -Session::Session(const PolkitTQt::Identity &identity, const TQString &cookie, AsyncResult *result, TQObject *parent) - : TQObject(parent) - , d(new Private) -{ - d->result = result; - d->polkitAgentSession = polkit_agent_session_new(identity.identity(), cookie.toUtf8().data()); - g_signal_connect(G_OBJECT(d->polkitAgentSession), "completed", G_CALLBACK(Private::completed), this); - g_signal_connect(G_OBJECT(d->polkitAgentSession), "request", G_CALLBACK(Private::request), this); - g_signal_connect(G_OBJECT(d->polkitAgentSession), "show-error", G_CALLBACK(Private::showError), this); - g_signal_connect(G_OBJECT(d->polkitAgentSession), "show-info", G_CALLBACK(Private::showInfo), this); -} - -Session::Session(PolkitAgentSession *pkAgentSession, TQObject *parent) - : TQObject(parent) - , d(new Private) -{ - d->polkitAgentSession = pkAgentSession; - g_signal_connect(G_OBJECT(d->polkitAgentSession), "completed", G_CALLBACK(Private::completed), this); - g_signal_connect(G_OBJECT(d->polkitAgentSession), "request", G_CALLBACK(Private::request), this); - g_signal_connect(G_OBJECT(d->polkitAgentSession), "show-error", G_CALLBACK(Private::showError), this); - g_signal_connect(G_OBJECT(d->polkitAgentSession), "show-info", G_CALLBACK(Private::showInfo), this); -} - -Session::~Session() -{ - if (d->polkitAgentSession) - g_object_unref(d->polkitAgentSession); - - delete d; -} - -void Session::initiate() -{ - polkit_agent_session_initiate(d->polkitAgentSession); -} - -void Session::setResponse(const TQString &response) -{ - polkit_agent_session_response(d->polkitAgentSession, response.toUtf8().data()); -} - -void Session::cancel() -{ - polkit_agent_session_cancel(d->polkitAgentSession); -} - -AsyncResult *Session::result() -{ - return d->result; -} - -void Session::Private::completed(PolkitAgentSession *s, gboolean gained_authorization, gpointer user_data) -{ - tqDebug() << "COMPLETED"; - Session *session = (Session *)user_data; - TQ_EMIT(session)->completed(gained_authorization); - - //free session here as polkit documentation asks - g_object_unref(session->d->polkitAgentSession); - session->d->polkitAgentSession = 0; -} - -void Session::Private::request(PolkitAgentSession *s, gchar *request, gboolean echo_on, gpointer user_data) -{ - tqDebug() << "REQUEST"; - TQ_EMIT((Session *)user_data)->request(TQString::fromUtf8(request), echo_on); -} - -void Session::Private::showError(PolkitAgentSession *s, gchar *text, gpointer user_data) -{ - tqDebug() << "showError"; - TQ_EMIT((Session *)user_data)->showError(TQString::fromUtf8(text)); -} - -void Session::Private::showInfo(PolkitAgentSession *s, gchar *text, gpointer user_data) -{ - tqDebug() << "showInfo"; - TQ_EMIT((Session *)user_data)->showInfo(TQString::fromUtf8(text)); -} - -// - -class AsyncResult::Private -{ -public: - Private(GSimpleAsyncResult *r) : result(r) {}; - - GSimpleAsyncResult *result; -}; - -AsyncResult::AsyncResult(GSimpleAsyncResult *result) - : d(new Private(result)) -{ -} - -AsyncResult::~AsyncResult() -{ - if (d->result) - g_object_unref(d->result); -} - -void AsyncResult::setCompleted() -{ - if (d->result == NULL) - return; - g_simple_async_result_complete(d->result); - // Assure that completed won't be called twice - g_object_unref(d->result); - d->result = NULL; -} - -void AsyncResult::setError(const TQString &text) -{ - Q_ASSERT(d->result); - g_simple_async_result_set_error(d->result, POLKIT_ERROR, POLKIT_ERROR_FAILED, "%s", text.toUtf8().data()); -} - -#include "polkittqt1-agent-session.moc" diff --git a/agent/polkitqtlistener.cpp b/agent/polkitqtlistener.cpp deleted file mode 100644 index 8baf335eb..000000000 --- a/agent/polkitqtlistener.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - * This file is part of the Polkit-tqt project - * Copyright (C) 2009 Jaroslav Reznik - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * polkit-tqt-listener based on code by David Zeuthen - */ - - -#include "polkittqtlistener_p.h" -#include - -#include - -#define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE 1 - -using namespace PolkitTQt::Agent; - -/** - * \internal - */ -struct _PolkitTQtListener { - PolkitAgentListener parent_instance; -}; - -/** - * \internal - */ -struct _PolkitTQtListenerClass { - PolkitAgentListenerClass parent_class; -}; - -static void polkit_tqt_listener_initiate_authentication(PolkitAgentListener *listener, - const gchar *action_id, - const gchar *message, - const gchar *icon_name, - PolkitDetails *details, - const gchar *cookie, - GList *identities, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -static gboolean polkit_tqt_listener_initiate_authentication_finish(PolkitAgentListener *listener, - GAsyncResult *res, - GError **error); - -G_DEFINE_TYPE(PolkitTQtListener, polkit_tqt_listener, POLKIT_AGENT_TYPE_LISTENER); - -static void polkit_tqt_listener_init(PolkitTQtListener *listener) -{ - g_type_init(); -} - -static void polkit_tqt_listener_finalize(GObject *object) -{ - PolkitTQtListener *listener; - - listener = POLKIT_TQT_LISTENER(object); - - if (G_OBJECT_CLASS(polkit_tqt_listener_parent_class)->finalize != NULL) { - G_OBJECT_CLASS(polkit_tqt_listener_parent_class)->finalize(object); - } -} - -static void polkit_tqt_listener_class_init(PolkitTQtListenerClass *klass) -{ - GObjectClass *gobject_class; - PolkitAgentListenerClass *listener_class; - - gobject_class = G_OBJECT_CLASS(klass); - listener_class = POLKIT_AGENT_LISTENER_CLASS(klass); - - gobject_class->finalize = polkit_tqt_listener_finalize; - - listener_class->initiate_authentication = polkit_tqt_listener_initiate_authentication; - listener_class->initiate_authentication_finish = polkit_tqt_listener_initiate_authentication_finish; -} - -PolkitAgentListener *polkit_tqt_listener_new(void) -{ - return POLKIT_AGENT_LISTENER(g_object_new(POLKIT_TQT_TYPE_LISTENER, NULL)); -} - -static void cancelled_cb(GCancellable *cancellable, gpointer user_data) -{ - ListenerAdapter::instance()->cancelled_cb((PolkitAgentListener *)user_data); -} - -static void polkit_tqt_listener_initiate_authentication(PolkitAgentListener *agent_listener, - const gchar *action_id, - const gchar *message, - const gchar *icon_name, - PolkitDetails *details, - const gchar *cookie, - GList *identities, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - tqDebug() << "Listener adapter polkit_tqt_listener_initiate_authentication"; - PolkitTQtListener *listener = POLKIT_TQT_LISTENER(agent_listener); - - // The result of asynchronous method will be created here and it will be pushed to the listener. - GSimpleAsyncResult *result = g_simple_async_result_new((GObject *) listener, callback, user_data, agent_listener); - tqDebug() << "GSimpleAsyncResult:" << result; - - ListenerAdapter::instance()->polkit_tqt_listener_initiate_authentication(agent_listener, - action_id, - message, - icon_name, - details, - cookie, - identities, - cancellable, - result); - - if (cancellable != NULL) { - g_signal_connect(cancellable, - "cancelled", - G_CALLBACK(cancelled_cb), - agent_listener); - } - -} - -static gboolean polkit_tqt_listener_initiate_authentication_finish(PolkitAgentListener *listener, - GAsyncResult *res, - GError **error) -{ - tqDebug() << "Listener adapter polkit_tqt_listener_initiate_authentication_finish"; - return ListenerAdapter::instance()->polkit_tqt_listener_initiate_authentication_finish(listener, - res, - error); -} - diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index f9e782a94..a71f4f05f 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -14,7 +14,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${TQT_INCLUDE_DIRS} - ${POLKIT_INCLUDE_DIRS} + ${POLKIT_GOBJECT_INCLUDE_DIRS} ) link_directories( @@ -25,7 +25,7 @@ link_directories( ##### install headers ########################### install( - FILES + FILES polkit-tqt-actiondescription.h polkit-tqt-authority.h polkit-tqt-details.h @@ -47,7 +47,7 @@ tde_add_library( polkit-tqt-core SHARED AUTOMOC polkit-tqt-subject.cpp polkit-tqt-temporaryauthorization.cpp VERSION 0.0.0 - LINK ${TQT_LIBRARIES} ${POLKIT_LIBRARIES} + LINK ${TQT_LIBRARIES} ${POLKIT_GOBJECT_LIBRARIES} DESTINATION ${LIB_INSTALL_DIR} ) diff --git a/debian/libpolkit-tqt-dev.install b/debian/libpolkit-tqt-dev.install index 649aaeb31..ca5f14415 100644 --- a/debian/libpolkit-tqt-dev.install +++ b/debian/libpolkit-tqt-dev.install @@ -1,6 +1,6 @@ debian/tmp/usr/include/polkit-tqt/PolkitTQt/ActionDescription -#debian/tmp/usr/include/polkit-tqt/PolkitTQt/Agent/Listener -#debian/tmp/usr/include/polkit-tqt/PolkitTQt/Agent/Session +debian/tmp/usr/include/polkit-tqt/PolkitTQt/Agent/Listener +debian/tmp/usr/include/polkit-tqt/PolkitTQt/Agent/Session debian/tmp/usr/include/polkit-tqt/PolkitTQt/Authority debian/tmp/usr/include/polkit-tqt/PolkitTQt/Details debian/tmp/usr/include/polkit-tqt/PolkitTQt/Gui/Action @@ -10,8 +10,8 @@ debian/tmp/usr/include/polkit-tqt/PolkitTQt/Identity debian/tmp/usr/include/polkit-tqt/PolkitTQt/Subject debian/tmp/usr/include/polkit-tqt/PolkitTQt/TemporaryAuthorization debian/tmp/usr/include/polkit-tqt/polkit-tqt-actiondescription.h -#debian/tmp/usr/include/polkit-tqt/polkit-tqt-agent-listener.h -#debian/tmp/usr/include/polkit-tqt/polkit-tqt-agent-session.h +debian/tmp/usr/include/polkit-tqt/polkit-tqt-agent-listener.h +debian/tmp/usr/include/polkit-tqt/polkit-tqt-agent-session.h debian/tmp/usr/include/polkit-tqt/polkit-tqt-authority.h debian/tmp/usr/include/polkit-tqt/polkit-tqt-details.h debian/tmp/usr/include/polkit-tqt/polkit-tqt-export.h diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 2a071e12c..d3f6e93e9 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -15,6 +15,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${TQT_INCLUDE_DIRS} + ${POLKIT_GOBJECT_INCLUDE_DIRS} ) link_directories( @@ -41,7 +42,7 @@ tde_add_library( polkit-tqt-gui SHARED AUTOMOC polkit-tqt-gui-actionbutton.cpp polkit-tqt-gui-actionbuttons.cpp VERSION 0.0.0 - LINK ${TQT_LIBRARIES} ${POLKIT_LIBRARIES} polkit-tqt-core-shared + LINK ${TQT_LIBRARIES} ${POLKIT_GOBJECT_LIBRARIES} polkit-tqt-core-shared DESTINATION ${LIB_INSTALL_DIR} ) diff --git a/includes/PolkitTQt/Agent/Listener b/includes/PolkitTQt/Agent/Listener index bb0ddc8b0..4c2927867 100644 --- a/includes/PolkitTQt/Agent/Listener +++ b/includes/PolkitTQt/Agent/Listener @@ -1 +1 @@ -#include "../../polkittqt1-agent-listener.h" +#include "../../polkit-tqt-agent-listener.h" diff --git a/includes/PolkitTQt/Agent/Session b/includes/PolkitTQt/Agent/Session index 94601c8a5..7740ca466 100644 --- a/includes/PolkitTQt/Agent/Session +++ b/includes/PolkitTQt/Agent/Session @@ -1 +1 @@ -#include "../../polkittqt1-agent-session.h" +#include "../../polkit-tqt-agent-session.h"