mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
fix: 修复时尚模式下无法移除电源插件的问题
原因:在判断该插件是否可移除之前已经将内存中该插件的数据清除,找不到该插件的信息导致无法移除 修改方案:在判断该插件是否可移除之前不清空该插件的内存,等确定该插件可移除后再清空内存,保证插件获取到的数据始终正确 Log: 修复时尚模式下无法移除电源插件的问题 Influence: 任务栏时尚模式下,打开控制中心-个性化-任务栏-插件区域,去掉电源勾选,查看电源按钮是否消失 Task: https://pms.uniontech.com/task-view-121387.html Change-Id: I0a9f214dab64e6b81b71d8cf50a969979c69c1ac
This commit is contained in:
parent
2ee2fe9eca
commit
a9987a6c2a
@ -144,3 +144,8 @@ void DockPluginsController::requestSetAppletVisible(PluginsItemInterface *const
|
||||
item->hidePopup();
|
||||
}
|
||||
}
|
||||
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &DockPluginsController::pluginsMap()
|
||||
{
|
||||
return ProxyPluginController::instance(PluginType::FixedSystemPlugin)->pluginsMap();
|
||||
}
|
||||
|
@ -38,9 +38,6 @@ class DockPluginsController : public AbstractPluginsController
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
friend class DockItemController;
|
||||
friend class DockItemManager;
|
||||
|
||||
public:
|
||||
explicit DockPluginsController(QObject *parent = nullptr);
|
||||
~DockPluginsController() override;
|
||||
@ -52,6 +49,7 @@ public:
|
||||
void requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) override;
|
||||
void requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) override;
|
||||
void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) override;
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &pluginsMap();
|
||||
|
||||
signals:
|
||||
void pluginItemInserted(PluginsItem *pluginItem) const;
|
||||
|
@ -152,13 +152,9 @@ void ProxyPluginController::itemUpdate(PluginsItemInterface * const itemInter, c
|
||||
|
||||
void ProxyPluginController::itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey)
|
||||
{
|
||||
if (m_pluginsItems.contains(itemInter))
|
||||
m_pluginsItems.removeOne(itemInter);
|
||||
|
||||
if (m_pluginsItemKeys.contains(itemInter))
|
||||
m_pluginsItemKeys.remove(itemInter);
|
||||
|
||||
// 先获取可执行的controller,再移除,因为在判断当前插件是否加载的时候需要用到当前容器中的插件来获取当前代理
|
||||
QList<AbstractPluginsController *> validController = getValidController(itemInter);
|
||||
removePluginItem(itemInter);
|
||||
for (AbstractPluginsController *interface : validController)
|
||||
interface->itemRemoved(itemInter, itemKey);
|
||||
}
|
||||
@ -214,6 +210,15 @@ QList<AbstractPluginsController *> ProxyPluginController::getValidController(Plu
|
||||
return validController;
|
||||
}
|
||||
|
||||
void ProxyPluginController::removePluginItem(PluginsItemInterface * const itemInter)
|
||||
{
|
||||
if (m_pluginsItems.contains(itemInter))
|
||||
m_pluginsItems.removeOne(itemInter);
|
||||
|
||||
if (m_pluginsItemKeys.contains(itemInter))
|
||||
m_pluginsItemKeys.remove(itemInter);
|
||||
}
|
||||
|
||||
void ProxyPluginController::startLoader()
|
||||
{
|
||||
QDir dir;
|
||||
|
@ -67,7 +67,7 @@ protected:
|
||||
|
||||
private:
|
||||
QList<AbstractPluginsController *> getValidController(PluginsItemInterface *itemInter) const;
|
||||
// 该方法可以由DockPluginsController类类调用,强制加载,因此,在此处给这个类加载了一个友元
|
||||
void removePluginItem(PluginsItemInterface * const itemInter);
|
||||
void startLoader();
|
||||
|
||||
private:
|
||||
|
@ -125,7 +125,7 @@ void AbstractPluginsController::removeValue(PluginsItemInterface *const itemInte
|
||||
m_dockDaemonInter->RemovePluginSettings(itemInter->pluginName(), keyList);
|
||||
}
|
||||
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *> > &AbstractPluginsController::pluginsMap()
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &AbstractPluginsController::pluginsMap()
|
||||
{
|
||||
return m_pluginsMap;
|
||||
}
|
||||
|
@ -51,19 +51,19 @@ public:
|
||||
void itemAdded(PluginsItemInterface * const, const QString &) override {}
|
||||
void itemUpdate(PluginsItemInterface * const, const QString &) override {}
|
||||
void itemRemoved(PluginsItemInterface * const, const QString &) override {}
|
||||
void requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) override {}
|
||||
void requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) override {}
|
||||
void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) override {}
|
||||
void requestWindowAutoHide(PluginsItemInterface * const, const QString &, const bool) override {}
|
||||
void requestRefreshWindowVisible(PluginsItemInterface * const, const QString &) override {}
|
||||
void requestSetAppletVisible(PluginsItemInterface * const, const QString &, const bool) override {}
|
||||
|
||||
void updateDockInfo(PluginsItemInterface *const, const DockPart &) override {}
|
||||
|
||||
virtual bool needLoad(PluginsItemInterface *) { return true; }
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &pluginsMap();
|
||||
|
||||
signals:
|
||||
void pluginLoaderFinished();
|
||||
|
||||
protected:
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &pluginsMap();
|
||||
QObject *pluginItemAt(PluginsItemInterface * const itemInter, const QString &itemKey) const;
|
||||
PluginsItemInterface *pluginInterAt(const QString &itemKey);
|
||||
PluginsItemInterface *pluginInterAt(QObject *destItem);
|
||||
|
@ -107,9 +107,23 @@ void SystemPluginWindow::initUi()
|
||||
m_mainLayout->setSpacing(0);
|
||||
}
|
||||
|
||||
bool SystemPluginWindow::pluginExist(StretchPluginsItem *pluginItem)
|
||||
{
|
||||
for (int i = 0; i < m_mainLayout->count(); i++) {
|
||||
QLayoutItem *layoutItem = m_mainLayout->itemAt(i);
|
||||
if (!layoutItem)
|
||||
continue;
|
||||
|
||||
if (layoutItem->widget() == pluginItem)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void SystemPluginWindow::onPluginItemAdded(StretchPluginsItem *pluginItem)
|
||||
{
|
||||
if (m_mainLayout->children().contains(pluginItem))
|
||||
if (pluginExist(pluginItem))
|
||||
return;
|
||||
|
||||
pluginItem->setPosition(m_position);
|
||||
@ -121,7 +135,7 @@ void SystemPluginWindow::onPluginItemAdded(StretchPluginsItem *pluginItem)
|
||||
|
||||
void SystemPluginWindow::onPluginItemRemoved(StretchPluginsItem *pluginItem)
|
||||
{
|
||||
if (!m_mainLayout->children().contains(pluginItem))
|
||||
if (!pluginExist(pluginItem))
|
||||
return;
|
||||
|
||||
pluginItem->setParent(nullptr);
|
||||
|
@ -49,6 +49,7 @@ Q_SIGNALS:
|
||||
|
||||
private:
|
||||
void initUi();
|
||||
bool pluginExist(StretchPluginsItem *pluginItem);
|
||||
|
||||
private Q_SLOTS:
|
||||
void onPluginItemAdded(StretchPluginsItem *pluginItem);
|
||||
|
Loading…
x
Reference in New Issue
Block a user