mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
new plugin interface, proxy, plugin manager etc.
This commit is contained in:
parent
8efd47bf3b
commit
f9a0aacfa4
@ -8,10 +8,8 @@ DockTrayItem * DockTrayItem::fromWinId(WId winId)
|
|||||||
|
|
||||||
QWindow *win = QWindow::fromWinId(winId);
|
QWindow *win = QWindow::fromWinId(winId);
|
||||||
QWidget *child = QWidget::createWindowContainer(win, item);
|
QWidget *child = QWidget::createWindowContainer(win, item);
|
||||||
|
child->setFixedSize(item->size());
|
||||||
QHBoxLayout *layout = new QHBoxLayout(item);
|
child->setParent(item);
|
||||||
layout->addWidget(child);
|
|
||||||
item->setLayout(layout);
|
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
@ -1,28 +1,30 @@
|
|||||||
#include <QtDBus/QDBusConnection>
|
#include <QtDBus/QDBusConnection>
|
||||||
|
|
||||||
#include "systrayplugin.h"
|
#include "systrayplugin.h"
|
||||||
#include "abstractdockitem.h"
|
|
||||||
|
|
||||||
|
|
||||||
SystrayPlugin::~SystrayPlugin()
|
SystrayPlugin::~SystrayPlugin()
|
||||||
{
|
{
|
||||||
this->clearItems();
|
this->clearItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystrayPlugin::init()
|
void SystrayPlugin::init(DockPluginProxyInterface * proxier)
|
||||||
{
|
{
|
||||||
|
m_proxier = proxier;
|
||||||
|
|
||||||
if (!m_dbusTrayManager) {
|
if (!m_dbusTrayManager) {
|
||||||
m_dbusTrayManager = new com::deepin::dde::TrayManager("com.deepin.dde.TrayManager",
|
m_dbusTrayManager = new com::deepin::dde::TrayManager("com.deepin.dde.TrayManager",
|
||||||
"/com/deepin/dde/TrayManager",
|
"/com/deepin/dde/TrayManager",
|
||||||
QDBusConnection::sessionBus(),
|
QDBusConnection::sessionBus(),
|
||||||
this);
|
this);
|
||||||
|
connect(m_dbusTrayManager, &TrayManager::Added, this, &SystrayPlugin::onAdded);
|
||||||
|
connect(m_dbusTrayManager, &TrayManager::Removed, this, &SystrayPlugin::onRemoved);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<uint> trayIcons = m_dbusTrayManager->trayIcons();
|
QList<uint> trayIcons = m_dbusTrayManager->trayIcons();
|
||||||
qDebug() << "Found trayicons: " << trayIcons;
|
qDebug() << "Found trayicons: " << trayIcons;
|
||||||
|
|
||||||
foreach (uint trayIcon, trayIcons) {
|
foreach (uint trayIcon, trayIcons) {
|
||||||
m_items[QString::number(trayIcon)] = DockTrayItem::fromWinId(trayIcon);
|
onAdded(trayIcon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,6 +38,12 @@ QWidget * SystrayPlugin::getItem(QString uuid)
|
|||||||
return m_items.value(uuid);
|
return m_items.value(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString SystrayPlugin::name()
|
||||||
|
{
|
||||||
|
return QString("systray");
|
||||||
|
}
|
||||||
|
|
||||||
|
// private methods
|
||||||
void SystrayPlugin::clearItems()
|
void SystrayPlugin::clearItems()
|
||||||
{
|
{
|
||||||
foreach (QWidget * item, m_items) {
|
foreach (QWidget * item, m_items) {
|
||||||
@ -43,3 +51,21 @@ void SystrayPlugin::clearItems()
|
|||||||
}
|
}
|
||||||
m_items.clear();
|
m_items.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// private slots
|
||||||
|
void SystrayPlugin::onAdded(WId winId)
|
||||||
|
{
|
||||||
|
QString key = QString::number(winId);
|
||||||
|
|
||||||
|
DockTrayItem *item = DockTrayItem::fromWinId(winId);
|
||||||
|
m_items[key] = item;
|
||||||
|
|
||||||
|
m_proxier->itemAddedEvent(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SystrayPlugin::onRemoved(WId winId)
|
||||||
|
{
|
||||||
|
QString key = QString::number(winId);
|
||||||
|
|
||||||
|
m_proxier->itemRemovedEvent(key);
|
||||||
|
}
|
||||||
|
@ -6,9 +6,10 @@
|
|||||||
|
|
||||||
#include "docktrayitem.h"
|
#include "docktrayitem.h"
|
||||||
#include "dockplugininterface.h"
|
#include "dockplugininterface.h"
|
||||||
|
#include "dockpluginproxyinterface.h"
|
||||||
#include "dbustraymanager.h"
|
#include "dbustraymanager.h"
|
||||||
|
|
||||||
class SystrayPlugin : public QObject, DockPluginInterface
|
class SystrayPlugin : public QObject, public DockPluginInterface
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PLUGIN_METADATA(IID "org.deepin.Dock.PluginInterface" FILE "systray.json")
|
Q_PLUGIN_METADATA(IID "org.deepin.Dock.PluginInterface" FILE "systray.json")
|
||||||
@ -17,15 +18,22 @@ class SystrayPlugin : public QObject, DockPluginInterface
|
|||||||
public:
|
public:
|
||||||
~SystrayPlugin();
|
~SystrayPlugin();
|
||||||
|
|
||||||
void init() Q_DECL_OVERRIDE;
|
void init(DockPluginProxyInterface * proxier) Q_DECL_OVERRIDE;
|
||||||
QStringList uuids() Q_DECL_OVERRIDE;
|
QStringList uuids() Q_DECL_OVERRIDE;
|
||||||
QWidget * getItem(QString uuid) Q_DECL_OVERRIDE;
|
QWidget * getItem(QString uuid) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
QString name() Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QMap<QString, QWidget*> m_items;
|
QMap<QString, QWidget*> m_items;
|
||||||
|
DockPluginProxyInterface * m_proxier = 0;
|
||||||
com::deepin::dde::TrayManager *m_dbusTrayManager = 0;
|
com::deepin::dde::TrayManager *m_dbusTrayManager = 0;
|
||||||
|
|
||||||
void clearItems();
|
void clearItems();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onAdded(WId winId);
|
||||||
|
void onRemoved(WId winId);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SYSTRAYPLUGIN_H
|
#endif // SYSTRAYPLUGIN_H
|
||||||
|
@ -22,7 +22,6 @@ SOURCES += \
|
|||||||
src/Widgets/windowpreview.cpp \
|
src/Widgets/windowpreview.cpp \
|
||||||
src/Panel/panel.cpp \
|
src/Panel/panel.cpp \
|
||||||
src/Widgets/appitem.cpp \
|
src/Widgets/appitem.cpp \
|
||||||
src/systraymanager.cpp \
|
|
||||||
src/Panel/panelmenu.cpp \
|
src/Panel/panelmenu.cpp \
|
||||||
src/Controller/dockmodedata.cpp \
|
src/Controller/dockmodedata.cpp \
|
||||||
src/Controller/dockconstants.cpp \
|
src/Controller/dockconstants.cpp \
|
||||||
@ -34,8 +33,9 @@ SOURCES += \
|
|||||||
src/DBus/dbusdockedappmanager.cpp \
|
src/DBus/dbusdockedappmanager.cpp \
|
||||||
src/DBus/dbusdocksetting.cpp \
|
src/DBus/dbusdocksetting.cpp \
|
||||||
src/pluginitemwrapper.cpp \
|
src/pluginitemwrapper.cpp \
|
||||||
src/Widgets/arrowrectangle.cpp
|
src/Widgets/arrowrectangle.cpp \
|
||||||
|
src/dockpluginproxy.cpp \
|
||||||
|
src/dockpluginmanager.cpp
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
src/abstractdockitem.h \
|
src/abstractdockitem.h \
|
||||||
src/dockplugininterface.h \
|
src/dockplugininterface.h \
|
||||||
@ -47,7 +47,6 @@ HEADERS += \
|
|||||||
src/Widgets/windowpreview.h \
|
src/Widgets/windowpreview.h \
|
||||||
src/Panel/panel.h \
|
src/Panel/panel.h \
|
||||||
src/Widgets/appitem.h \
|
src/Widgets/appitem.h \
|
||||||
src/systraymanager.h \
|
|
||||||
src/Panel/panelmenu.h \
|
src/Panel/panelmenu.h \
|
||||||
src/Controller/dockmodedata.h \
|
src/Controller/dockmodedata.h \
|
||||||
src/Controller/dockconstants.h \
|
src/Controller/dockconstants.h \
|
||||||
@ -59,7 +58,10 @@ HEADERS += \
|
|||||||
src/DBus/dbusdockedappmanager.h \
|
src/DBus/dbusdockedappmanager.h \
|
||||||
src/DBus/dbusdocksetting.h \
|
src/DBus/dbusdocksetting.h \
|
||||||
src/pluginitemwrapper.h \
|
src/pluginitemwrapper.h \
|
||||||
src/Widgets/arrowrectangle.h
|
src/Widgets/arrowrectangle.h\
|
||||||
|
src/dockpluginproxyinterface.h \
|
||||||
|
src/dockpluginproxy.h \
|
||||||
|
src/dockpluginmanager.h
|
||||||
|
|
||||||
RESOURCES += \
|
RESOURCES += \
|
||||||
images.qrc \
|
images.qrc \
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "panel.h"
|
#include "panel.h"
|
||||||
#include "systraymanager.h"
|
#include "dockpluginproxy.h"
|
||||||
|
#include "dockpluginmanager.h"
|
||||||
|
|
||||||
Panel::Panel(QWidget *parent)
|
Panel::Panel(QWidget *parent)
|
||||||
: QLabel(parent),parentWidget(parent)
|
: QLabel(parent),parentWidget(parent)
|
||||||
@ -25,11 +26,16 @@ Panel::Panel(QWidget *parent)
|
|||||||
connect(dockCons, SIGNAL(dockModeChanged(DockConstants::DockMode,DockConstants::DockMode)),
|
connect(dockCons, SIGNAL(dockModeChanged(DockConstants::DockMode,DockConstants::DockMode)),
|
||||||
this, SLOT(slotDockModeChanged(DockConstants::DockMode,DockConstants::DockMode)));
|
this, SLOT(slotDockModeChanged(DockConstants::DockMode,DockConstants::DockMode)));
|
||||||
|
|
||||||
|
DockPluginManager *pluginManager = new DockPluginManager(this);
|
||||||
|
QList<DockPluginProxy*> proxies = pluginManager->getAll();
|
||||||
|
foreach (DockPluginProxy* proxy, proxies) {
|
||||||
|
connect(proxy, &DockPluginProxy::itemAdded, [=](AbstractDockItem* item) { rightLayout->addItem(item); });
|
||||||
|
connect(proxy, &DockPluginProxy::itemRemoved, [=](AbstractDockItem* item) { rightLayout->removeItem(rightLayout->indexOf(item)); });
|
||||||
|
}
|
||||||
|
|
||||||
panelMenu = new PanelMenu();
|
panelMenu = new PanelMenu();
|
||||||
|
|
||||||
initAppManager();
|
initAppManager();
|
||||||
initSystrayManager();
|
|
||||||
|
|
||||||
slotDockModeChanged(dockCons->getDockMode(),dockCons->getDockMode());
|
slotDockModeChanged(dockCons->getDockMode(),dockCons->getDockMode());
|
||||||
}
|
}
|
||||||
@ -193,15 +199,6 @@ void Panel::initAppManager()
|
|||||||
m_appManager->updateEntries();
|
m_appManager->updateEntries();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Panel::initSystrayManager()
|
|
||||||
{
|
|
||||||
SystrayManager *manager = new SystrayManager();
|
|
||||||
foreach (AbstractDockItem *item, manager->trayIcons()) {
|
|
||||||
rightLayout->addItem(item);
|
|
||||||
qDebug() << item->geometry()<<"=====++++++++";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Panel::~Panel()
|
Panel::~Panel()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -49,7 +49,6 @@ private:
|
|||||||
void hideMenu();
|
void hideMenu();
|
||||||
|
|
||||||
void initAppManager();
|
void initAppManager();
|
||||||
void initSystrayManager();
|
|
||||||
private:
|
private:
|
||||||
DockLayout * leftLayout;
|
DockLayout * leftLayout;
|
||||||
DockLayout *rightLayout;
|
DockLayout *rightLayout;
|
||||||
|
@ -4,13 +4,18 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
|
#include "dockpluginproxyinterface.h"
|
||||||
|
|
||||||
class DockPluginInterface
|
class DockPluginInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~DockPluginInterface() {}
|
virtual ~DockPluginInterface() {}
|
||||||
virtual void init() = 0;
|
virtual void init(DockPluginProxyInterface *proxy) = 0;
|
||||||
|
|
||||||
virtual QStringList uuids() = 0;
|
virtual QStringList uuids() = 0;
|
||||||
virtual QWidget* getItem(QString uuid) = 0;
|
virtual QWidget* getItem(QString uuid) = 0;
|
||||||
|
|
||||||
|
virtual QString name() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
50
dde-dock/src/dockpluginmanager.cpp
Normal file
50
dde-dock/src/dockpluginmanager.cpp
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#include <QDir>
|
||||||
|
#include <QPluginLoader>
|
||||||
|
|
||||||
|
#include "dockpluginmanager.h"
|
||||||
|
#include "dockpluginproxy.h"
|
||||||
|
#include "dockplugininterface.h"
|
||||||
|
|
||||||
|
DockPluginManager::DockPluginManager(QObject *parent) :
|
||||||
|
QObject(parent)
|
||||||
|
{
|
||||||
|
m_searchPaths << "/usr/share/dde-dock/plugins/";
|
||||||
|
|
||||||
|
foreach (QString path, m_searchPaths) {
|
||||||
|
QDir pluginsDir(path);
|
||||||
|
|
||||||
|
foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
|
||||||
|
QString pluginPath = pluginsDir.absoluteFilePath(fileName);
|
||||||
|
DockPluginProxy * proxy = loadPlugin(pluginPath);
|
||||||
|
m_proxies[pluginPath] = proxy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<DockPluginProxy*> DockPluginManager::getAll()
|
||||||
|
{
|
||||||
|
return m_proxies.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
// private methods
|
||||||
|
DockPluginProxy* DockPluginManager::loadPlugin(QString &path)
|
||||||
|
{
|
||||||
|
QPluginLoader pluginLoader(path);
|
||||||
|
QObject *plugin = pluginLoader.instance();
|
||||||
|
|
||||||
|
if (plugin) {
|
||||||
|
DockPluginInterface * interface = qobject_cast<DockPluginInterface*>(plugin);
|
||||||
|
if (interface) {
|
||||||
|
DockPluginProxy *proxy = new DockPluginProxy(interface);
|
||||||
|
interface->init(proxy);
|
||||||
|
qDebug() << "Plugin loaded: " << path;
|
||||||
|
return proxy;
|
||||||
|
} else {
|
||||||
|
qWarning() << "Load plugin failed(failed to convert) " << path;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
qWarning() << "Load plugin failed" << pluginLoader.errorString();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
24
dde-dock/src/dockpluginmanager.h
Normal file
24
dde-dock/src/dockpluginmanager.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef DOCKPLUGINMANAGER_H
|
||||||
|
#define DOCKPLUGINMANAGER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QMap>
|
||||||
|
#include <qstringlist.h>
|
||||||
|
|
||||||
|
class DockPluginProxy;
|
||||||
|
class DockPluginManager : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit DockPluginManager(QObject *parent = 0);
|
||||||
|
|
||||||
|
QList<DockPluginProxy*> getAll();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QStringList m_searchPaths;
|
||||||
|
QMap<QString, DockPluginProxy*> m_proxies;
|
||||||
|
|
||||||
|
DockPluginProxy* loadPlugin(QString &path);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DOCKPLUGINMANAGER_H
|
36
dde-dock/src/dockpluginproxy.cpp
Normal file
36
dde-dock/src/dockpluginproxy.cpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#include "dockpluginproxy.h"
|
||||||
|
#include "pluginitemwrapper.h"
|
||||||
|
|
||||||
|
DockPluginProxy::DockPluginProxy(DockPluginInterface * plugin, QObject * parent) :
|
||||||
|
QObject(parent),
|
||||||
|
m_plugin(plugin)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void DockPluginProxy::itemAddedEvent(QString uuid)
|
||||||
|
{
|
||||||
|
qDebug() << "Item added on plugin " << m_plugin->name();
|
||||||
|
|
||||||
|
AbstractDockItem * item = new PluginItemWrapper(m_plugin, uuid);
|
||||||
|
m_items << item;
|
||||||
|
|
||||||
|
emit itemAdded(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DockPluginProxy::itemRemovedEvent(QString uuid)
|
||||||
|
{
|
||||||
|
qDebug() << "Item removed on plugin " << m_plugin->name();
|
||||||
|
|
||||||
|
emit itemRemoved(getItem(uuid));
|
||||||
|
}
|
||||||
|
|
||||||
|
AbstractDockItem * DockPluginProxy::getItem(QString uuid)
|
||||||
|
{
|
||||||
|
foreach (AbstractDockItem * item, m_items) {
|
||||||
|
PluginItemWrapper *wrapper = qobject_cast<PluginItemWrapper*>(item);
|
||||||
|
if (wrapper->uuid() == uuid) {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
28
dde-dock/src/dockpluginproxy.h
Normal file
28
dde-dock/src/dockpluginproxy.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef DOCKPLUGINPROXY_H
|
||||||
|
#define DOCKPLUGINPROXY_H
|
||||||
|
|
||||||
|
#include "dockplugininterface.h"
|
||||||
|
#include "dockpluginproxyinterface.h"
|
||||||
|
#include "abstractdockitem.h"
|
||||||
|
|
||||||
|
class DockPluginProxy : public QObject, public DockPluginProxyInterface
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
DockPluginProxy(DockPluginInterface * plugin, QObject * parent = 0);
|
||||||
|
|
||||||
|
void itemAddedEvent(QString uuid) Q_DECL_OVERRIDE;
|
||||||
|
void itemRemovedEvent(QString uuid) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void itemAdded(AbstractDockItem * item);
|
||||||
|
void itemRemoved(AbstractDockItem * item);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QList<AbstractDockItem*> m_items;
|
||||||
|
DockPluginInterface * m_plugin;
|
||||||
|
|
||||||
|
AbstractDockItem * getItem(QString uuid);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DOCKPLUGINPROXY_H
|
13
dde-dock/src/dockpluginproxyinterface.h
Normal file
13
dde-dock/src/dockpluginproxyinterface.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#ifndef DOCKPLUGINPROXYINTERFACE_H
|
||||||
|
#define DOCKPLUGINPROXYINTERFACE_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
class DockPluginProxyInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void itemAddedEvent(QString uuid) = 0;
|
||||||
|
virtual void itemRemovedEvent(QString uuid) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DOCKPLUGINPROXYINTERFACE_H
|
@ -2,10 +2,11 @@
|
|||||||
|
|
||||||
PluginItemWrapper::PluginItemWrapper(DockPluginInterface *plugin,
|
PluginItemWrapper::PluginItemWrapper(DockPluginInterface *plugin,
|
||||||
QString uuid, QWidget * parent) :
|
QString uuid, QWidget * parent) :
|
||||||
AbstractDockItem(parent),
|
AbstractDockItem(parent)
|
||||||
m_plugin(plugin),
|
|
||||||
m_uuid(uuid)
|
|
||||||
{
|
{
|
||||||
|
m_plugin = plugin;
|
||||||
|
m_uuid = uuid;
|
||||||
|
|
||||||
if (m_plugin) {
|
if (m_plugin) {
|
||||||
QWidget * item = m_plugin->getItem(uuid);
|
QWidget * item = m_plugin->getItem(uuid);
|
||||||
|
|
||||||
@ -13,7 +14,12 @@ PluginItemWrapper::PluginItemWrapper(DockPluginInterface *plugin,
|
|||||||
setFixedSize(item->size());
|
setFixedSize(item->size());
|
||||||
|
|
||||||
item->setParent(this);
|
item->setParent(this);
|
||||||
item->move(this->rect().center() - item->rect().center());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString PluginItemWrapper::uuid() const
|
||||||
|
{
|
||||||
|
return m_uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -6,10 +6,13 @@
|
|||||||
|
|
||||||
class PluginItemWrapper : public AbstractDockItem
|
class PluginItemWrapper : public AbstractDockItem
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
PluginItemWrapper(DockPluginInterface *plugin, QString uuid, QWidget * parent = 0);
|
PluginItemWrapper(DockPluginInterface *plugin, QString uuid, QWidget * parent = 0);
|
||||||
|
|
||||||
|
|
||||||
|
QString uuid() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DockPluginInterface * m_plugin;
|
DockPluginInterface * m_plugin;
|
||||||
QString m_uuid;
|
QString m_uuid;
|
||||||
|
@ -1,47 +0,0 @@
|
|||||||
#include <QDir>
|
|
||||||
#include <QPluginLoader>
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
#include "systraymanager.h"
|
|
||||||
#include "pluginitemwrapper.h"
|
|
||||||
|
|
||||||
static QString SystrayPluginPath = "/usr/share/dde-dock/plugins/libdock-systray-plugin.so";
|
|
||||||
|
|
||||||
SystrayManager::SystrayManager(QObject *parent)
|
|
||||||
: QObject(parent),
|
|
||||||
m_plugin(0)
|
|
||||||
{
|
|
||||||
this->loadPlugin();
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<AbstractDockItem*> SystrayManager::trayIcons()
|
|
||||||
{
|
|
||||||
QList<AbstractDockItem*> result;
|
|
||||||
|
|
||||||
if (m_plugin) {
|
|
||||||
QStringList uuids = m_plugin->uuids();
|
|
||||||
|
|
||||||
foreach (QString uuid, uuids) {
|
|
||||||
result << new PluginItemWrapper(m_plugin, uuid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystrayManager::loadPlugin()
|
|
||||||
{
|
|
||||||
if (QFile::exists(SystrayPluginPath)) {
|
|
||||||
QPluginLoader loader(SystrayPluginPath);
|
|
||||||
QObject *plugin = loader.instance();
|
|
||||||
if (plugin) {
|
|
||||||
m_plugin = qobject_cast<DockPluginInterface*>(plugin);
|
|
||||||
m_plugin->init();
|
|
||||||
} else {
|
|
||||||
qWarning() << "Failed to load systray plugin.";
|
|
||||||
qWarning() << loader.errorString();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qWarning() << "libdock-systray-plugin.so file not found!";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
#ifndef SYSTRAYMANAGER_H
|
|
||||||
#define SYSTRAYMANAGER_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include "dockplugininterface.h"
|
|
||||||
|
|
||||||
class AbstractDockItem;
|
|
||||||
class SystrayManager : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
explicit SystrayManager(QObject *parent = 0);
|
|
||||||
|
|
||||||
QList<AbstractDockItem*> trayIcons();
|
|
||||||
|
|
||||||
private:
|
|
||||||
DockPluginInterface *m_plugin;
|
|
||||||
|
|
||||||
void loadPlugin();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // SYSTRAYMANAGER_H
|
|
Loading…
x
Reference in New Issue
Block a user