support backend service restart

Change-Id: I2cb03cee2f7c0af10a8cb6466821b2430de92313
This commit is contained in:
石博文 2016-06-30 09:53:50 +08:00 committed by Hualet Wang
parent cd2b1bbd15
commit c34050ffe4
4 changed files with 34 additions and 5 deletions

View File

@ -71,7 +71,8 @@ DockItemController::DockItemController(QObject *parent)
m_itemList.append(m_placeholderItem);
connect(m_appInter, &DBusDock::EntryAdded, this, &DockItemController::appItemAdded);
connect(m_appInter, &DBusDock::EntryRemoved, this, &DockItemController::appItemRemoved);
connect(m_appInter, &DBusDock::EntryRemoved, this, static_cast<void (DockItemController::*)(const QString &)>(&DockItemController::appItemRemoved));
connect(m_appInter, &DBusDock::ServiceRestarted, this, &DockItemController::reloadAppItems);
connect(m_pluginsInter, &DockPluginsController::pluginItemInserted, this, &DockItemController::pluginItemInserted, Qt::QueuedConnection);
connect(m_pluginsInter, &DockPluginsController::pluginItemRemoved, this, &DockItemController::pluginItemRemoved, Qt::QueuedConnection);
@ -108,14 +109,19 @@ void DockItemController::appItemRemoved(const QString &appId)
if (app->appId() != appId)
continue;
emit itemRemoved(m_itemList[i]);
m_itemList[i]->deleteLater();
m_itemList.removeAt(i);
appItemRemoved(app);
break;
}
}
void DockItemController::appItemRemoved(AppItem *appItem)
{
emit itemRemoved(appItem);
appItem->deleteLater();
m_itemList.removeOne(appItem);
}
void DockItemController::pluginItemInserted(PluginsItem *item)
{
// find first plugins item position
@ -159,3 +165,15 @@ void DockItemController::pluginItemRemoved(PluginsItem *item)
emit itemRemoved(item);
m_itemList.removeOne(item);
}
void DockItemController::reloadAppItems()
{
// remove old item
for (auto item : m_itemList)
if (item->itemType() == DockItem::App)
appItemRemoved(static_cast<AppItem *>(item));
// append new item
for (auto path : m_appInter->entries())
appItemAdded(path, -1);
}

View File

@ -6,6 +6,7 @@
#include "dbus/dbusdock.h"
#include "item/dockitem.h"
#include "item/placeholderitem.h"
#include "item/appitem.h"
#include <QObject>
@ -31,8 +32,10 @@ private:
explicit DockItemController(QObject *parent = 0);
void appItemAdded(const QDBusObjectPath &path, const int index);
void appItemRemoved(const QString &appId);
void appItemRemoved(AppItem *appItem);
void pluginItemInserted(PluginsItem *item);
void pluginItemRemoved(PluginsItem *item);
void reloadAppItems();
private:
QList<DockItem *> m_itemList;

View File

@ -29,7 +29,7 @@ DockSettings::DockSettings(QWidget *parent)
m_dockInter(new DBusDock(this)),
m_itemController(DockItemController::instance(this))
{
m_dockInter->SetFrontendWindow(parent->winId());
resetFrontendWinId();
m_primaryRect = m_displayInter->primaryRect();
m_position = Dock::Position(m_dockInter->position());
m_displayMode = Dock::DisplayMode(m_dockInter->displayMode());
@ -94,6 +94,7 @@ DockSettings::DockSettings(QWidget *parent)
connect(m_dockInter, &DBusDock::DisplayModeChanged, this, &DockSettings::displayModeChanged);
connect(m_dockInter, &DBusDock::HideModeChanged, this, &DockSettings::hideModeChanged);
connect(m_dockInter, &DBusDock::HideStateChanged, this, &DockSettings::hideStateChanegd);
connect(m_dockInter, &DBusDock::ServiceRestarted, this, &DockSettings::resetFrontendWinId);
connect(m_itemController, &DockItemController::itemInserted, this, &DockSettings::dockItemCountChanged, Qt::QueuedConnection);
connect(m_itemController, &DockItemController::itemRemoved, this, &DockSettings::dockItemCountChanged, Qt::QueuedConnection);
@ -259,6 +260,11 @@ void DockSettings::primaryScreenChanged()
emit dataChanged();
}
void DockSettings::resetFrontendWinId()
{
m_dockInter->SetFrontendWindow(static_cast<QWidget *>(parent())->winId());
}
void DockSettings::calculateWindowConfig()
{
const int defaultHeight = AppItem::itemBaseHeight();

View File

@ -53,6 +53,8 @@ private slots:
void dockItemCountChanged();
void primaryScreenChanged();
void resetFrontendWinId();
private:
void calculateWindowConfig();