diff --git a/controller/dockitemcontroller.cpp b/controller/dockitemcontroller.cpp index 6462e9dd4..5d7e1fa04 100644 --- a/controller/dockitemcontroller.cpp +++ b/controller/dockitemcontroller.cpp @@ -1,4 +1,7 @@ #include "dockitemcontroller.h" +#include "dbus/dbusdockentry.h" + +#include DockItemController *DockItemController::INSTANCE = nullptr; @@ -11,7 +14,7 @@ DockItemController *DockItemController::instance(QObject *parent) } DockItemController::DockItemController(QObject *parent) - : QObject(parent) + : QObject(parent), + m_entryManager(new DBusDockEntryManager(this)) { - } diff --git a/controller/dockitemcontroller.h b/controller/dockitemcontroller.h index 881c92046..9e16f460a 100644 --- a/controller/dockitemcontroller.h +++ b/controller/dockitemcontroller.h @@ -1,6 +1,8 @@ #ifndef DOCKITEMCONTROLLER_H #define DOCKITEMCONTROLLER_H +#include "dbus/dbusdockentrymanager.h" + #include class DockItemController : public QObject @@ -8,7 +10,7 @@ class DockItemController : public QObject Q_OBJECT public: - DockItemController *instance(QObject *parent); + static DockItemController *instance(QObject *parent); signals: void dockItemCountChanged() const; @@ -16,6 +18,8 @@ signals: private: explicit DockItemController(QObject *parent = 0); + DBusDockEntryManager *m_entryManager; + static DockItemController *INSTANCE; }; diff --git a/dbus/dbusdockentry.cpp b/dbus/dbusdockentry.cpp new file mode 100644 index 000000000..e688f28e8 --- /dev/null +++ b/dbus/dbusdockentry.cpp @@ -0,0 +1,31 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -c DBusDockEntry -p dbusdockentry dde-dock-entry-v1.xml + * + * qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * This file may have been hand-edited. Look for HAND-EDIT comments + * before re-generating it. + */ + +#include "dbusdockentry.h" + +/* + * Implementation of interface class DBusDockEntry + */ + +DBusDockEntry::DBusDockEntry(const QString &path, QObject *parent) + : QDBusAbstractInterface("com.deepin.daemon.Dock", path, staticInterfaceName(), QDBusConnection::sessionBus(), parent) +{ + qRegisterMetaType("Dict"); + qDBusRegisterMetaType(); + + QDBusConnection::sessionBus().connect(this->service(), this->path(), "org.freedesktop.DBus.Properties", "PropertiesChanged","sa{sv}as", this, SLOT(__propertyChanged__(QDBusMessage))); +} + +DBusDockEntry::~DBusDockEntry() +{ + QDBusConnection::sessionBus().disconnect(service(), path(), "org.freedesktop.DBus.Properties", "PropertiesChanged", "sa{sv}as", this, SLOT(propertyChanged(QDBusMessage))); +} + diff --git a/dbus/dbusdockentry.h b/dbus/dbusdockentry.h new file mode 100644 index 000000000..eb33391c4 --- /dev/null +++ b/dbus/dbusdockentry.h @@ -0,0 +1,92 @@ +/* + * This file was generated by qdbusxml2cpp version 0.8 + * Command line was: qdbusxml2cpp -c DBusDockEntry -p dbusdockentry dde-dock-entry-v1.xml + * + * qdbusxml2cpp is Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). + * + * This is an auto-generated file. + * Do not edit! All changes made to it will be lost. + */ + +#ifndef DBUSDOCKENTRY_H_1464922075 +#define DBUSDOCKENTRY_H_1464922075 + +#include +#include +#include +#include +#include +#include +#include +#include + +typedef QMap Dict; + +/* + * Proxy class for interface dde.dock.Entry + */ +class DBusDockEntry: public QDBusAbstractInterface +{ + Q_OBJECT + + Q_SLOT void __propertyChanged__(const QDBusMessage& msg) + { + QList arguments = msg.arguments(); + if (3 != arguments.count()) + return; + QString interfaceName = msg.arguments().at(0).toString(); + if (interfaceName !="dde.dock.Entry") + return; + QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); + foreach(const QString &prop, changedProps.keys()) { + const QMetaObject* self = metaObject(); + for (int i=self->propertyOffset(); i < self->propertyCount(); ++i) { + QMetaProperty p = self->property(i); + if (p.name() == prop) { + Q_EMIT p.notifySignal().invoke(this); + } + } + } + } +public: + static inline const char *staticInterfaceName() + { return "dde.dock.Entry"; } + +public: + explicit DBusDockEntry(const QString &path, QObject *parent = 0); + + ~DBusDockEntry(); + + Q_PROPERTY(Dict Data READ data NOTIFY DataChanged) + inline Dict data() const + { return qvariant_cast< Dict >(property("Data")); } + + Q_PROPERTY(QString Id READ id NOTIFY IdChanged) + inline QString id() const + { return qvariant_cast< QString >(property("Id")); } + + Q_PROPERTY(QString Type READ type NOTIFY TypeChanged) + inline QString type() const + { return qvariant_cast< QString >(property("Type")); } + +public Q_SLOTS: // METHODS + inline QDBusPendingReply<> Activate() + { + QList argumentList; + return asyncCallWithArgumentList(QStringLiteral("Activate"), argumentList); + } + +Q_SIGNALS: // SIGNALS + void DataChanged(const QString &in0, const QString &in1); +// begin property changed signals +void DataChanged(); +void IdChanged(); +void TypeChanged(); +}; + +namespace dde { + namespace dock { + typedef ::DBusDockEntry Entry; + } +} +#endif diff --git a/dbus/dde-dock-entry-v1.xml b/dbus/dde-dock-entry-v1.xml index 23dc9ecdd..eaad21d72 100644 --- a/dbus/dde-dock-entry-v1.xml +++ b/dbus/dde-dock-entry-v1.xml @@ -1,13 +1,5 @@ - - - - - - - - @@ -15,5 +7,7 @@ - + + + diff --git a/dde-dock.pro b/dde-dock.pro index 6738fd921..8653f945c 100644 --- a/dde-dock.pro +++ b/dde-dock.pro @@ -12,7 +12,8 @@ SOURCES += main.cpp \ xcb/xcb_misc.cpp \ item/dockitem.cpp \ panel/mainpanel.cpp \ - controller/dockitemcontroller.cpp + controller/dockitemcontroller.cpp \ + dbus/dbusdockentry.cpp HEADERS += \ window/mainwindow.h \ @@ -20,4 +21,5 @@ HEADERS += \ xcb/xcb_misc.h \ item/dockitem.h \ panel/mainpanel.h \ - controller/dockitemcontroller.h + controller/dockitemcontroller.h \ + dbus/dbusdockentry.h diff --git a/window/mainwindow.cpp b/window/mainwindow.cpp index 33bc2df9b..294af5c74 100644 --- a/window/mainwindow.cpp +++ b/window/mainwindow.cpp @@ -5,7 +5,8 @@ MainWindow::MainWindow(QWidget *parent) : QWidget(parent), - m_mainPanel(new MainPanel(this)) + m_mainPanel(new MainPanel(this)), + m_itemController(DockItemController::instance(this)) { } diff --git a/window/mainwindow.h b/window/mainwindow.h index 4f615613a..35fcaac53 100644 --- a/window/mainwindow.h +++ b/window/mainwindow.h @@ -3,6 +3,7 @@ #include "xcb/xcb_misc.h" #include "panel/mainpanel.h" +#include "controller/dockitemcontroller.h" #include @@ -17,6 +18,7 @@ private: void resizeEvent(QResizeEvent *e); MainPanel *m_mainPanel; + DockItemController *m_itemController; }; #endif // MAINWINDOW_H