aboutsummaryrefslogtreecommitdiff
path: root/src/QMenuModel/qdbusmenumodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QMenuModel/qdbusmenumodel.cpp')
-rw-r--r--src/QMenuModel/qdbusmenumodel.cpp105
1 files changed, 22 insertions, 83 deletions
diff --git a/src/QMenuModel/qdbusmenumodel.cpp b/src/QMenuModel/qdbusmenumodel.cpp
index 96f936c..c551464 100644
--- a/src/QMenuModel/qdbusmenumodel.cpp
+++ b/src/QMenuModel/qdbusmenumodel.cpp
@@ -2,95 +2,58 @@
#include <QDebug>
QDBusMenuModel::QDBusMenuModel(QObject *parent)
- :QMenuModel(parent),
- m_watchId(0),
- m_busType(None)
+ :QMenuModel(0, parent)
{
}
QDBusMenuModel::~QDBusMenuModel()
{
- disconnect();
}
-QDBusMenuModel::BusType QDBusMenuModel::busType() const
+void QDBusMenuModel::start()
{
- return m_busType;
+ QDbusObject::connect();
}
-void QDBusMenuModel::setBusType(QDBusMenuModel::BusType type)
+void QDBusMenuModel::stop()
{
- if (m_busType != type) {
- if (isConnected())
- disconnect();
- m_busType = type;
- Q_EMIT busTypeChanged(m_busType);
- }
+ QDbusObject::disconnect();
}
-QString QDBusMenuModel::busName() const
+void QDBusMenuModel::serviceVanish(GDBusConnection *)
{
- return m_busName;
+ setMenuModel(NULL);
}
-void QDBusMenuModel::setBusName(const QString &busName)
+void QDBusMenuModel::serviceAppear(GDBusConnection *connection)
{
- if (m_busName != busName) {
- if (isConnected())
- disconnect();
- m_busName = busName;
- Q_EMIT busNameChanged(m_busName);
+ GMenuModel *model = reinterpret_cast<GMenuModel*>(g_dbus_menu_model_get(connection,
+ busName().toLatin1(),
+ objectPath().toLatin1()));
+ setMenuModel(model);
+ if (model == NULL) {
+ stop();
}
}
-QString QDBusMenuModel::objectPath() const
+void QDBusMenuModel::busTypeChanged(BusType)
{
- return m_objectPath;
+ busTypeChanged();
}
-void QDBusMenuModel::setObjectPath(const QString &objectPath)
+void QDBusMenuModel::busNameChanged(const QString &)
{
- if (m_objectPath != objectPath) {
- if (isConnected())
- disconnect();
- m_objectPath = objectPath;
- Q_EMIT objectPathChanged(m_objectPath);
- }
+ busNameChanged();
}
-void QDBusMenuModel::connect()
+void QDBusMenuModel::objectPathChanged(const QString &objectPath)
{
- if (isConnected() || (m_watchId > 0)) {
- return;
- } else if ((m_busType > None) && !m_objectPath.isEmpty() && !m_busName.isEmpty()) {
- qDebug() << "Wait for service";
- GBusType type = m_busType == SessionBus ? G_BUS_TYPE_SESSION : G_BUS_TYPE_SYSTEM;
- m_watchId = g_bus_watch_name (type,
- m_busName.toLatin1(),
- G_BUS_NAME_WATCHER_FLAGS_NONE,
- QDBusMenuModel::onServiceAppeared,
- QDBusMenuModel::onServiceFanished,
- this,
- NULL);
- } else {
- Q_EMIT connectionError("Invalid menu model connection args");
- }
-}
-
-void QDBusMenuModel::disconnect()
-{
- if (isConnected()) {
- g_bus_unwatch_name (m_watchId);
- m_watchId = 0;
-
- setMenuModel(NULL);
- Q_EMIT disconnected();
- }
+ objectPathChanged();
}
-bool QDBusMenuModel::isConnected() const
+void QDBusMenuModel::statusChanged(ConnectionStatus status)
{
- return (m_watchId != 0);
+ statusChanged();
}
void QDBusMenuModel::setIntBusType(int busType)
@@ -99,27 +62,3 @@ void QDBusMenuModel::setIntBusType(int busType)
setBusType(static_cast<BusType>(busType));
}
}
-
-void QDBusMenuModel::onServiceAppeared(GDBusConnection *connection, const gchar *, const gchar *, gpointer data)
-{
- qDebug() << "Service appears";
- QDBusMenuModel *self = reinterpret_cast<QDBusMenuModel*>(data);
- GMenuModel *model = reinterpret_cast<GMenuModel*>(g_dbus_menu_model_get(connection,
- self->m_busName.toLatin1(),
- self->m_objectPath.toLatin1()));
- self->setMenuModel(model);
- if (model) {
- Q_EMIT self->connected();
- } else {
- Q_EMIT self->connectionError("Fail to retrieve menu model");
- self->disconnect();
- }
-}
-
-void QDBusMenuModel::onServiceFanished(GDBusConnection *, const gchar *, gpointer data)
-{
- qDebug() << "Service fanished";
- QDBusMenuModel *self = reinterpret_cast<QDBusMenuModel*>(data);
- Q_EMIT self->connectionError("Menu model disapear");
- self->disconnect();
-}