diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2021-11-16 00:33:12 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2021-11-16 00:33:12 +0900 |
commit | a8e9f8dd80bddc39a64cd807880b5630fb9efec7 (patch) | |
tree | 866a00fc55bdfada1dd3d46c61feb1440d960526 /agent/polkit-tqt-agent-session.cpp | |
parent | 98b37ff3b1d307add5fe3f9e1f9c7923831debd4 (diff) | |
download | polkit-tqt-a8e9f8dd80bddc39a64cd807880b5630fb9efec7.tar.gz polkit-tqt-a8e9f8dd80bddc39a64cd807880b5630fb9efec7.zip |
Conversion of 'agent' library module.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'agent/polkit-tqt-agent-session.cpp')
-rw-r--r-- | agent/polkit-tqt-agent-session.cpp | 189 |
1 files changed, 189 insertions, 0 deletions
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 <rnovacek@redhat.com> + * + * 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 <polkitagent/polkitagent.h> + +#include "polkit-tqt-identity.h" +#include "polkit-tqt-agent-session.h" + +#include <tqstring.h> + + +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" + |