Signed-off-by: Mavridis Philippe <mavridisf@gmail.com>pull/6/head
parent
30af69c9c0
commit
b8f8ce418e
@ -0,0 +1,114 @@
|
||||
/*******************************************************************************
|
||||
XDG desktop portal implementation for TDE
|
||||
Copyright © 2024 Mavridis Philippe <mavridisf@gmail.com>
|
||||
|
||||
Partially based on code from kdbusnotification
|
||||
Copyright © 2021 Emanoil Kotsev <deloptes@gmail.com>
|
||||
|
||||
This program or library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this library; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Improvements and feedback are welcome!
|
||||
*******************************************************************************/
|
||||
|
||||
// TQt
|
||||
#include <tqtimer.h>
|
||||
|
||||
// TDE
|
||||
#include <kdebug.h>
|
||||
|
||||
// Portal
|
||||
#include "portal_daemon.h"
|
||||
#include "portal_daemon.moc"
|
||||
|
||||
PortalDaemon::PortalDaemon()
|
||||
: KUniqueApplication(),
|
||||
m_retryCount(0)
|
||||
{
|
||||
connectDBus();
|
||||
}
|
||||
|
||||
PortalDaemon::~PortalDaemon()
|
||||
{
|
||||
disconnectDBus();
|
||||
}
|
||||
|
||||
void PortalDaemon::connectDBus()
|
||||
{
|
||||
if (d_desktop) disconnectDBus();
|
||||
|
||||
m_connection = TQT_DBusConnection::addConnection(
|
||||
TQT_DBusConnection::SessionBus,
|
||||
DBUS_PORTAL_SERVICE
|
||||
);
|
||||
|
||||
if (m_connection.isConnected())
|
||||
{
|
||||
m_connection.connect(this, TQ_SLOT(slotDBusSignal(const TQT_DBusMessage&)));
|
||||
if (m_connection.requestName(DBUS_PORTAL_SERVICE, TQT_DBusConnection::NoReplace))
|
||||
{
|
||||
m_connection.scheduleDispatch();
|
||||
kdDebug() << "TDE portal service successfully registered." << endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
++m_retryCount;
|
||||
kdWarning() << "Failed to connect to DBus, retrying in "
|
||||
<< DBUS_RETRY_TIMEOUT << " secs "
|
||||
<< "(" << m_retryCount << "/" << DBUS_RETRY_COUNT << "tries)"
|
||||
<< endl;
|
||||
|
||||
if (m_retryCount < DBUS_RETRY_COUNT)
|
||||
{
|
||||
TQTimer::singleShot(DBUS_RETRY_TIMEOUT, this, TQ_SLOT(connectDBus()));
|
||||
}
|
||||
}
|
||||
|
||||
void PortalDaemon::disconnectDBus()
|
||||
{
|
||||
ZAP(d_root)
|
||||
ZAP(d_org)
|
||||
ZAP(d_freedesktop)
|
||||
ZAP(d_portal)
|
||||
ZAP(d_desktop)
|
||||
|
||||
if (m_connection.isConnected())
|
||||
{
|
||||
m_connection.disconnect(this, TQ_SLOT(slotDBusSignal(const TQT_DBusMessage&)));
|
||||
m_connection.closeConnection(DBUS_PORTAL_SERVICE);
|
||||
}
|
||||
|
||||
m_retryCount = 0;
|
||||
}
|
||||
|
||||
void PortalDaemon::slotDBusSignal(const TQT_DBusMessage &message)
|
||||
{
|
||||
TQString serviceName = message[0].toString();
|
||||
if (message.interface() == TQString("org.freedesktop.DBus") &&
|
||||
message.member() == TQString("NameAcquired") &&
|
||||
serviceName == DBUS_PORTAL_SERVICE)
|
||||
{
|
||||
kdDebug() << "Portal daemon acquired unique DBus name: "
|
||||
<< serviceName << endl;
|
||||
|
||||
d_root = new RootNodeService(m_connection);
|
||||
d_org = new OrgNodeService(m_connection);
|
||||
d_freedesktop = new FreeDesktopNodeService(m_connection);
|
||||
d_portal = new PortalNodeService(m_connection);
|
||||
d_desktop = new DesktopNodeService(m_connection);
|
||||
}
|
||||
}
|
||||
|
||||
// kate: replace-tabs true; tab-width 4; indent-width 4;
|
@ -0,0 +1,73 @@
|
||||
/*******************************************************************************
|
||||
XDG desktop portal implementation for TDE
|
||||
Copyright © 2024 Mavridis Philippe <mavridisf@gmail.com>
|
||||
|
||||
Partially based on code from kdbusnotification
|
||||
Copyright © 2021 Emanoil Kotsev <deloptes@gmail.com>
|
||||
|
||||
This program or library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more
|
||||
details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this library; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Improvements and feedback are welcome!
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef __PORTAL_DAEMON_H
|
||||
#define __PORTAL_DAEMON_H
|
||||
|
||||
// TQt
|
||||
#include <tqdbusconnection.h>
|
||||
#include <tqdbusmessage.h>
|
||||
|
||||
// TDE
|
||||
#include <kuniqueapplication.h>
|
||||
|
||||
// DBus
|
||||
#include "portal_service.h"
|
||||
|
||||
// Defines
|
||||
#define DBUS_PORTAL_SERVICE "org.freedesktop.impl.portal.desktop.tde"
|
||||
#define DBUS_RETRY_TIMEOUT 5000
|
||||
#define DBUS_RETRY_COUNT 3
|
||||
|
||||
#define ZAP(x) if (x) { delete x; x = nullptr; }
|
||||
|
||||
class PortalDaemon : public KUniqueApplication
|
||||
{
|
||||
TQ_OBJECT
|
||||
|
||||
public:
|
||||
PortalDaemon();
|
||||
virtual ~PortalDaemon();
|
||||
|
||||
private:
|
||||
void connectDBus();
|
||||
void disconnectDBus();
|
||||
|
||||
private slots:
|
||||
void slotDBusSignal(const TQT_DBusMessage&);
|
||||
|
||||
private:
|
||||
RootNodeService *d_root;
|
||||
OrgNodeService *d_org;
|
||||
FreeDesktopNodeService *d_freedesktop;
|
||||
PortalNodeService *d_portal;
|
||||
DesktopNodeService *d_desktop;
|
||||
|
||||
TQT_DBusConnection m_connection;
|
||||
uint m_retryCount;
|
||||
};
|
||||
|
||||
#endif // __PORTAL_DAEMON_H
|
||||
|
||||
// kate: replace-tabs true; tab-width 4; indent-width 4;
|
Loading…
Reference in new issue