optimize systray plugin

Change-Id: I8126005aa2efbe9d7c6d0998b73372c6f3e72c38
This commit is contained in:
石博文 2016-06-28 17:48:02 +08:00 committed by Hualet Wang
parent 0910dc5e90
commit 3607e87f69
7 changed files with 38 additions and 7 deletions

View File

@ -73,7 +73,8 @@ DockItemController::DockItemController(QObject *parent)
connect(m_appInter, &DBusDock::EntryAdded, this, &DockItemController::appItemAdded);
connect(m_appInter, &DBusDock::EntryRemoved, this, &DockItemController::appItemRemoved);
connect(m_pluginsInter, &DockPluginsController::pluginItemInserted, this, &DockItemController::pluginsItemInserted, Qt::QueuedConnection);
connect(m_pluginsInter, &DockPluginsController::pluginItemInserted, this, &DockItemController::pluginItemInserted, Qt::QueuedConnection);
connect(m_pluginsInter, &DockPluginsController::pluginItemRemoved, this, &DockItemController::pluginItemRemoved, Qt::QueuedConnection);
}
void DockItemController::appItemAdded(const QDBusObjectPath &path, const int index)
@ -115,7 +116,7 @@ void DockItemController::appItemRemoved(const QString &appId)
}
}
void DockItemController::pluginsItemInserted(PluginsItem *item)
void DockItemController::pluginItemInserted(PluginsItem *item)
{
// find first plugins item position
int firstPluginPosition = -1;
@ -152,3 +153,9 @@ void DockItemController::pluginsItemInserted(PluginsItem *item)
m_itemList.insert(insertIndex, item);
emit itemInserted(insertIndex, item);
}
void DockItemController::pluginItemRemoved(PluginsItem *item)
{
emit itemRemoved(item);
m_itemList.removeOne(item);
}

View File

@ -31,7 +31,8 @@ private:
explicit DockItemController(QObject *parent = 0);
void appItemAdded(const QDBusObjectPath &path, const int index);
void appItemRemoved(const QString &appId);
void pluginsItemInserted(PluginsItem *item);
void pluginItemInserted(PluginsItem *item);
void pluginItemRemoved(PluginsItem *item);
private:
QList<DockItem *> m_itemList;

View File

@ -36,6 +36,18 @@ void DockPluginsController::itemUpdate(PluginsItemInterface * const itemInter, c
item->update();
}
void DockPluginsController::itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey)
{
PluginsItem *item = pluginItemAt(itemInter, itemKey);
Q_ASSERT(item);
emit pluginItemRemoved(item);
m_pluginList[itemInter].remove(itemKey);
item->deleteLater();
}
void DockPluginsController::loadPlugins()
{
// Q_ASSERT(m_pluginLoaderList.isEmpty());

View File

@ -21,9 +21,11 @@ public:
// implements PluginProxyInterface
void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey);
void itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey);
void itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey);
signals:
void pluginItemInserted(PluginsItem *pluginsItem) const;
void pluginItemInserted(PluginsItem *pluginItem) const;
void pluginItemRemoved(PluginsItem *pluginItem) const;
private slots:
void loadPlugins();

View File

@ -27,7 +27,7 @@ MainPanel::MainPanel(QWidget *parent)
"}");
connect(m_itemController, &DockItemController::itemInserted, this, &MainPanel::itemInserted);
connect(m_itemController, &DockItemController::itemRemoved, this, &MainPanel::itemRemoved);
connect(m_itemController, &DockItemController::itemRemoved, this, &MainPanel::itemRemoved, Qt::DirectConnection);
connect(m_itemController, &DockItemController::itemMoved, this, &MainPanel::itemMoved);
connect(m_itemAdjustTimer, &QTimer::timeout, this, &MainPanel::adjustItemSize);
@ -165,7 +165,6 @@ void MainPanel::adjustItemSize()
const QList<DockItem *> itemList = m_itemController->itemList();
for (auto item : itemList)
{
// item->setVisible(true);
QMetaObject::invokeMethod(item, "setVisible", Qt::QueuedConnection, Q_ARG(bool, true));
switch (item->itemType())
@ -283,6 +282,8 @@ void MainPanel::itemInserted(const int index, DockItem *item)
void MainPanel::itemRemoved(DockItem *item)
{
m_itemLayout->removeWidget(item);
m_itemAdjustTimer->start();
}
void MainPanel::itemMoved(DockItem *item, const int index)

View File

@ -11,6 +11,7 @@ class PluginProxyInterface
public:
virtual void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) = 0;
virtual void itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) = 0;
virtual void itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) = 0;
};
#endif // PLUGINPROXYINTERFACE_H

View File

@ -57,5 +57,12 @@ void SystemTrayPlugin::pluginAdded(const quint32 winId)
void SystemTrayPlugin::pluginRemoved(const quint32 winId)
{
Q_UNUSED(winId);
TrayWidget *widget = m_trayList[winId];
if (!widget)
return;
m_trayList.remove(winId);
m_proxyInter->itemRemoved(this, QString::number(winId));
widget->deleteLater();
}