mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +00:00
support backend service restart
Change-Id: I2cb03cee2f7c0af10a8cb6466821b2430de92313
This commit is contained in:
parent
cd2b1bbd15
commit
c34050ffe4
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -53,6 +53,8 @@ private slots:
|
||||
void dockItemCountChanged();
|
||||
void primaryScreenChanged();
|
||||
|
||||
void resetFrontendWinId();
|
||||
|
||||
private:
|
||||
void calculateWindowConfig();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user