mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-02 15:45:21 +00:00
fix: 修复控制中心无法取消任务栏插件显示隐藏的问题
原因:获取以加载插件接口错误,导致无法获取到正确的插件,引起无法移除 修复:获取正确的插件对象指针,保证插件正确移除 Log: Influence: 从控制中心移除任务栏插件,观察任务栏插件是否正常移除 Bug: https://pms.uniontech.com/task-view-121387.html Change-Id: I0bf44d91de74acba277f76c412955f40b0a7efba
This commit is contained in:
parent
1b179edc55
commit
82da556471
@ -81,7 +81,7 @@ void DockPluginsController::itemAdded(PluginsItemInterface *const itemInter, con
|
||||
|
||||
void DockPluginsController::itemUpdate(PluginsItemInterface *const itemInter, const QString &itemKey)
|
||||
{
|
||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
PluginsItem *item = getPluginItem(itemInter, itemKey);
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
@ -92,7 +92,7 @@ void DockPluginsController::itemUpdate(PluginsItemInterface *const itemInter, co
|
||||
|
||||
void DockPluginsController::itemRemoved(PluginsItemInterface *const itemInter, const QString &itemKey)
|
||||
{
|
||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
PluginsItem *item = getPluginItem(itemInter, itemKey);
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
@ -116,7 +116,7 @@ void DockPluginsController::itemRemoved(PluginsItemInterface *const itemInter, c
|
||||
|
||||
void DockPluginsController::requestWindowAutoHide(PluginsItemInterface *const itemInter, const QString &itemKey, const bool autoHide)
|
||||
{
|
||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
PluginsItem *item = getPluginItem(itemInter, itemKey);
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
@ -125,7 +125,7 @@ void DockPluginsController::requestWindowAutoHide(PluginsItemInterface *const it
|
||||
|
||||
void DockPluginsController::requestRefreshWindowVisible(PluginsItemInterface *const itemInter, const QString &itemKey)
|
||||
{
|
||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
PluginsItem *item = getPluginItem(itemInter, itemKey);
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
@ -134,7 +134,7 @@ void DockPluginsController::requestRefreshWindowVisible(PluginsItemInterface *co
|
||||
|
||||
void DockPluginsController::requestSetAppletVisible(PluginsItemInterface *const itemInter, const QString &itemKey, const bool visible)
|
||||
{
|
||||
PluginsItem *item = static_cast<PluginsItem *>(pluginItemAt(itemInter, itemKey));
|
||||
PluginsItem *item = getPluginItem(itemInter, itemKey);
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
@ -149,3 +149,16 @@ QMap<PluginsItemInterface *, QMap<QString, QObject *>> &DockPluginsController::p
|
||||
{
|
||||
return ProxyPluginController::instance(PluginType::FixedSystemPlugin)->pluginsMap();
|
||||
}
|
||||
|
||||
PluginsItem *DockPluginsController::getPluginItem(PluginsItemInterface * const itemInter, const QString &itemKey) const
|
||||
{
|
||||
ProxyPluginController *proxyController = ProxyPluginController::instance(itemInter);
|
||||
if (!proxyController)
|
||||
return nullptr;
|
||||
|
||||
const QMap<PluginsItemInterface *, QMap<QString, QObject *>> &plugins = proxyController->pluginsMap();
|
||||
if (plugins.contains(itemInter) && plugins[itemInter].contains(itemKey))
|
||||
return static_cast<PluginsItem *>(plugins[itemInter][itemKey]);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -49,6 +49,9 @@ public:
|
||||
void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) override;
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &pluginsMap();
|
||||
|
||||
private:
|
||||
PluginsItem *getPluginItem(PluginsItemInterface * const itemInter, const QString &itemKey) const;
|
||||
|
||||
signals:
|
||||
void pluginItemInserted(PluginsItem *pluginItem) const;
|
||||
void pluginItemRemoved(PluginsItem *pluginItem) const;
|
||||
|
@ -133,14 +133,11 @@ QString ProxyPluginController::itemKey(PluginsItemInterface *itemInter) const
|
||||
|
||||
void ProxyPluginController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey)
|
||||
{
|
||||
m_pluginsItems << itemInter;
|
||||
m_pluginsItemKeys[itemInter] = itemKey;
|
||||
|
||||
addPluginItems(itemInter, itemKey);
|
||||
// 获取需要加载当前插件的监听者,然后将当前插件添加到监听者
|
||||
QList<AbstractPluginsController *> validController = getValidController(itemInter);
|
||||
for (AbstractPluginsController *interface : validController)
|
||||
interface->itemAdded(itemInter, itemKey);
|
||||
|
||||
}
|
||||
|
||||
void ProxyPluginController::itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey)
|
||||
@ -154,9 +151,10 @@ void ProxyPluginController::itemRemoved(PluginsItemInterface * const itemInter,
|
||||
{
|
||||
// 先获取可执行的controller,再移除,因为在判断当前插件是否加载的时候需要用到当前容器中的插件来获取当前代理
|
||||
QList<AbstractPluginsController *> validController = getValidController(itemInter);
|
||||
removePluginItem(itemInter);
|
||||
for (AbstractPluginsController *interface : validController)
|
||||
interface->itemRemoved(itemInter, itemKey);
|
||||
|
||||
removePluginItem(itemInter);
|
||||
}
|
||||
|
||||
void ProxyPluginController::requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide)
|
||||
@ -210,6 +208,15 @@ QList<AbstractPluginsController *> ProxyPluginController::getValidController(Plu
|
||||
return validController;
|
||||
}
|
||||
|
||||
void ProxyPluginController::addPluginItems(PluginsItemInterface * const itemInter, const QString &itemKey)
|
||||
{
|
||||
if (!m_pluginsItems.contains(itemInter))
|
||||
m_pluginsItems << itemInter;
|
||||
|
||||
if (!m_pluginsItemKeys.contains(itemInter))
|
||||
m_pluginsItemKeys[itemInter] = itemKey;
|
||||
}
|
||||
|
||||
void ProxyPluginController::removePluginItem(PluginsItemInterface * const itemInter)
|
||||
{
|
||||
if (m_pluginsItems.contains(itemInter))
|
||||
|
@ -67,6 +67,7 @@ protected:
|
||||
|
||||
private:
|
||||
QList<AbstractPluginsController *> getValidController(PluginsItemInterface *itemInter) const;
|
||||
void addPluginItems(PluginsItemInterface * const itemInter, const QString &itemKey);
|
||||
void removePluginItem(PluginsItemInterface * const itemInter);
|
||||
void startLoader();
|
||||
|
||||
|
@ -911,10 +911,13 @@ void MultiScreenWorker::onChildSizeChanged()
|
||||
|
||||
QSize dockSize = dockRect(m_ds.current(), position(), HideMode::KeepShowing, displayMode()).size();
|
||||
parent()->move(dockRect(m_ds.current()).topLeft());
|
||||
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom)
|
||||
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
||||
parent()->setFixedWidth(dockSize.width());
|
||||
else
|
||||
parent()->panel()->setFixedWidth(dockSize.width());
|
||||
} else {
|
||||
parent()->setFixedHeight(dockSize.height());
|
||||
parent()->panel()->setFixedHeight(dockSize.height());
|
||||
}
|
||||
|
||||
parent()->panel()->move(0, 0);
|
||||
parent()->panel()->update();
|
||||
|
@ -1054,7 +1054,7 @@ QSize MainPanelControl::suitableSize(int screenSize, double deviceRatio) const
|
||||
int iconSize = (totalLength - redundantLength) / iconCount;
|
||||
|
||||
if (m_position == Position::Top || m_position == Position::Bottom) {
|
||||
iconSize = iconSize < height() ? iconSize : height();
|
||||
iconSize = qMin(iconSize, height());
|
||||
int panelWidth = qMin(iconSize * iconCount + static_cast<int>((m_fixedSpliter->width() + traySuitableSize.width() + 20) / ratio),
|
||||
static_cast<int>(screenSize / deviceRatio));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user