merge with dock-systray-plugin

This commit is contained in:
Hualet Wang 2015-06-30 19:38:40 +08:00
parent eb730d09b6
commit d340b25b8e
13 changed files with 248 additions and 16 deletions

View File

@ -0,0 +1,30 @@
<interface name="com.deepin.dde.TrayManager">
<method name="EnableNotification">
<arg type="u" direction="in"></arg>
<arg type="b" direction="in"></arg>
</method>
<method name="GetName">
<arg type="u" direction="in"></arg>
<arg type="s" direction="out"></arg>
</method>
<method name="Manage">
<arg type="b" direction="out"></arg>
</method>
<method name="RequireManageTrayIcons"></method>
<method name="RetryManager"></method>
<method name="Unmanage">
<arg type="b" direction="out"></arg>
</method>
<signal name="Removed">
<arg type="u"></arg>
</signal>
<signal name="Added">
<arg type="u"></arg>
</signal>
<signal name="Changed">
<arg type="u"></arg>
</signal>
<property name="TrayIcons" type="au" access="read">
<annotation name="org.qtproject.QtDBus.QtTypeName" value="QUintList"/>
</property>
</interface>

View File

@ -0,0 +1,27 @@
/*
* This file was generated by qdbusxml2cpp version 0.8
* Command line was: qdbusxml2cpp -c TrayManager -p dbustraymanager com.deepin.dde.TrayManager.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 "dbustraymanager.h"
/*
* Implementation of interface class TrayManager
*/
TrayManager::TrayManager(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
: QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
{
qDBusRegisterMetaType<QUintList>();
}
TrayManager::~TrayManager()
{
}

View File

@ -0,0 +1,99 @@
/*
* This file was generated by qdbusxml2cpp version 0.8
* Command line was: qdbusxml2cpp -c TrayManager -p dbustraymanager com.deepin.dde.TrayManager.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 DBUSTRAYMANAGER_H_1435726109
#define DBUSTRAYMANAGER_H_1435726109
#include <QtCore/QObject>
#include <QtCore/QByteArray>
#include <QtCore/QList>
#include <QtCore/QMap>
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QVariant>
#include <QtDBus/QtDBus>
#include <QDBusMetaType>
typedef QList<uint> QUintList;
Q_DECLARE_METATYPE(QUintList)
/*
* Proxy class for interface com.deepin.dde.TrayManager
*/
class TrayManager: public QDBusAbstractInterface
{
Q_OBJECT
public:
static inline const char *staticInterfaceName()
{ return "com.deepin.dde.TrayManager"; }
public:
TrayManager(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
~TrayManager();
Q_PROPERTY(QUintList TrayIcons READ trayIcons)
inline QUintList trayIcons() const
{ return qvariant_cast< QUintList >(property("TrayIcons")); }
public Q_SLOTS: // METHODS
inline QDBusPendingReply<> EnableNotification(uint in0, bool in1)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1);
return asyncCallWithArgumentList(QStringLiteral("EnableNotification"), argumentList);
}
inline QDBusPendingReply<QString> GetName(uint in0)
{
QList<QVariant> argumentList;
argumentList << QVariant::fromValue(in0);
return asyncCallWithArgumentList(QStringLiteral("GetName"), argumentList);
}
inline QDBusPendingReply<bool> Manage()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("Manage"), argumentList);
}
inline QDBusPendingReply<> RequireManageTrayIcons()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("RequireManageTrayIcons"), argumentList);
}
inline QDBusPendingReply<> RetryManager()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("RetryManager"), argumentList);
}
inline QDBusPendingReply<bool> Unmanage()
{
QList<QVariant> argumentList;
return asyncCallWithArgumentList(QStringLiteral("Unmanage"), argumentList);
}
Q_SIGNALS: // SIGNALS
void Added(uint in0);
void Changed(uint in0);
void Removed(uint in0);
};
namespace com {
namespace deepin {
namespace dde {
typedef ::TrayManager TrayManager;
}
}
}
#endif

9
dde-dock-systray-plugin/dde-dock-systray-plugin.pro Executable file → Normal file
View File

@ -4,7 +4,7 @@
#
#-------------------------------------------------
QT += core gui
QT += core gui dbus
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
@ -15,7 +15,10 @@ TARGET = $$qtLibraryTarget(dock-systray-plugin)
TEMPLATE = lib
SOURCES += systrayplugin.cpp \
docktrayitem.cpp
docktrayitem.cpp \
dbustraymanager.cpp
HEADERS += systrayplugin.h \
docktrayitem.h
docktrayitem.h \
../dde-dock/src/abstractdockitem.h \
dbustraymanager.h

4
dde-dock-systray-plugin/docktrayitem.cpp Executable file → Normal file
View File

@ -2,7 +2,7 @@
#include "docktrayitem.h"
static DockTrayItem * fromWinId(WId winId, QWidget *parent)
DockTrayItem * DockTrayItem::fromWinId(WId winId, QWidget *parent)
{
DockTrayItem *item = new DockTrayItem(parent);
@ -19,7 +19,7 @@ static DockTrayItem * fromWinId(WId winId, QWidget *parent)
DockTrayItem::DockTrayItem(QWidget *parent)
: AbstractDockItem(parent)
{
setFixedSize(32, 32);
}
DockTrayItem::~DockTrayItem()

0
dde-dock-systray-plugin/docktrayitem.h Executable file → Normal file
View File

View File

@ -0,0 +1 @@
{}

23
dde-dock-systray-plugin/systrayplugin.cpp Executable file → Normal file
View File

@ -1,4 +1,7 @@
#include <QtDBus/QDBusConnection>
#include "systrayplugin.h"
#include "abstractdockitem.h"
SystrayPlugin::~SystrayPlugin()
{
@ -11,12 +14,23 @@ QList<AbstractDockItem*> SystrayPlugin::items()
this->clearItems();
// get xids of trayicons.
if (!m_dbusTrayManager) {
m_dbusTrayManager = new com::deepin::dde::TrayManager("com.deepin.dde.TrayManager",
"/com/deepin/dde/TrayManager",
QDBusConnection::sessionBus(),
this);
}
QList<uint> trayIcons = m_dbusTrayManager->trayIcons();
qDebug() << "Found trayicons: " << trayIcons;
QList<WId> winIds;
winIds << 79691780 << 65011722;
foreach (QVariant trayIcon, trayIcons) {
winIds << trayIcon.toUInt();
}
// generate items.
WId winId;
foreach (winId, winIds) {
foreach (WId winId, winIds) {
m_items << DockTrayItem::fromWinId(winId);
}
@ -25,8 +39,7 @@ QList<AbstractDockItem*> SystrayPlugin::items()
void SystrayPlugin::clearItems()
{
AbstractDockItem *item;
foreach (item, m_items) {
foreach (AbstractDockItem * item, m_items) {
item->deleteLater();
}
m_items.clear();

5
dde-dock-systray-plugin/systrayplugin.h Executable file → Normal file
View File

@ -1,8 +1,12 @@
#ifndef SYSTRAYPLUGIN_H
#define SYSTRAYPLUGIN_H
#include <QtPlugin>
#include "docktrayitem.h"
#include "dockplugininterface.h"
#include "abstractdockitem.h"
#include "dbustraymanager.h"
class SystrayPlugin : public QObject, DockPluginInterface
{
@ -17,6 +21,7 @@ public:
private:
QList<AbstractDockItem*> m_items;
com::deepin::dde::TrayManager *m_dbusTrayManager = 0;
void clearItems();
};

View File

@ -24,7 +24,8 @@ SOURCES += \
src/Widgets/screenmask.cpp \
src/Widgets/windowpreview.cpp \
src/Panel/panel.cpp \
src/Widgets/appitem.cpp
src/Widgets/appitem.cpp \
src/systraymanager.cpp
HEADERS += \
src/abstractdockitem.h \
@ -39,7 +40,8 @@ HEADERS += \
src/Widgets/screenmask.h \
src/Widgets/windowpreview.h \
src/Panel/panel.h \
src/Widgets/appitem.h
src/Widgets/appitem.h \
src/systraymanager.h
RESOURCES += \
images.qrc \

View File

@ -1,4 +1,5 @@
#include "panel.h"
#include "systraymanager.h"
Panel::Panel(QWidget *parent)
: QLabel(parent),parentWidget(parent)
@ -23,14 +24,15 @@ Panel::Panel(QWidget *parent)
connect(leftLayout,SIGNAL(dragStarted()),this,SLOT(slotDragStarted()));
connect(leftLayout,SIGNAL(itemDropped()),this,SLOT(slotItemDropped()));
AppItem * b6 = new AppItem("App","../Resources/images/display-im6.q16.png");
AppItem * b7 = new AppItem("App","../Resources/images/eog.png");
rightLayout = new DockLayout(this);
rightLayout->setSortDirection(DockLayout::RightToLeft);
rightLayout->resize(300,50);
rightLayout->move(0,0);
rightLayout->addItem(b6);
rightLayout->addItem(b7);
SystrayManager *manager = new SystrayManager();
foreach (AbstractDockItem *item, manager->trayIcons()) {
rightLayout->addItem(item);
}
}
void Panel::resize(const QSize &size)

View File

@ -0,0 +1,29 @@
#include <QDir>
#include <QPluginLoader>
#include <QDebug>
#include "systraymanager.h"
SystrayManager::SystrayManager(QObject *parent)
: QObject(parent),
m_plugin(0)
{
this->loadPlugin();
}
QList<AbstractDockItem*> SystrayManager::trayIcons()
{
return m_plugin->items();
}
void SystrayManager::loadPlugin()
{
QPluginLoader loader("/home/hualet/project/linuxdeepin/dde-workspace-2015/dde-dock-systray-plugin/build/libdock-systray-plugin.so");
QObject *plugin = loader.instance();
if (plugin) {
m_plugin = qobject_cast<DockPluginInterface*>(plugin);
} else {
qWarning() << "Failed to load systray plugin.";
qWarning() << loader.errorString();
}
}

View File

@ -0,0 +1,21 @@
#ifndef SYSTRAYMANAGER_H
#define SYSTRAYMANAGER_H
#include <QObject>
#include "dockplugininterface.h"
class SystrayManager : public QObject
{
Q_OBJECT
public:
explicit SystrayManager(QObject *parent = 0);
QList<AbstractDockItem*> trayIcons();
private:
DockPluginInterface *m_plugin;
void loadPlugin();
};
#endif // SYSTRAYMANAGER_H