mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-02 15:45:21 +00:00
fix: 修复移除蓝牙设备后任务栏插件不消失的问题
1、任务栏插件显示区域移除对配置变化的响应,该功能已经在DockPluginController中实现 2、在配置变化的时候,判断插件是否可以加载的条件增加了判断该插件是否被加载 3、修复拖动快捷面板的问题 Log: 修复移除蓝牙设备后任务栏插件不消失的问题 Influence: 插上蓝牙,从控制中心勾选该插件,在任务栏显示,然后移除蓝牙设备,观察任务栏的蓝牙图标是否消失 Bug: https://pms.uniontech.com/bug-view-181945.html Change-Id: Ib207f4f0e2ceeb4b100c57b1f3e3899a802b8ed7
This commit is contained in:
parent
c42340387e
commit
1be68d06b2
@ -50,4 +50,6 @@ private:
|
||||
bool m_useSourcePixmap;
|
||||
};
|
||||
|
||||
Q_DECLARE_INTERFACE(QuickIconDrag, "QuickIconDrag")
|
||||
|
||||
#endif // QUICKDRAGCORE_H
|
||||
|
@ -121,39 +121,6 @@ void QuickPluginModel::onPluginRemoved(PluginsItemInterface *itemInter)
|
||||
Q_EMIT requestUpdate();
|
||||
}
|
||||
|
||||
void QuickPluginModel::onSettingChanged(const QString &key, const QVariant &value)
|
||||
{
|
||||
if (key != PLUGINNAMEKEY)
|
||||
return;
|
||||
QStringList localOrder = m_dockedPluginIndex.keys();
|
||||
std::sort(localOrder.begin(), localOrder.end(), [ = ](const QString &key1, const QString &key2) {
|
||||
return m_dockedPluginIndex.value(key1) < m_dockedPluginIndex.value(key2);
|
||||
});
|
||||
if (localOrder == value.toStringList())
|
||||
return;
|
||||
|
||||
// 当配置发生变化的时候,更新任务栏的插件显示
|
||||
// 1、将当前现有的插件列表中不在配置中的插件移除
|
||||
localOrder = value.toStringList();
|
||||
for (PluginsItemInterface *itemInter : m_dockedPluginsItems) {
|
||||
if (localOrder.contains(itemInter->pluginName()))
|
||||
continue;
|
||||
|
||||
m_dockedPluginsItems.removeOne(itemInter);
|
||||
m_dockedPluginIndex.remove(itemInter->pluginName());
|
||||
}
|
||||
// 2、将配置中已有的但是插件列表中没有的插件移动到任务栏上
|
||||
QList<PluginsItemInterface *> plugins = QuickSettingController::instance()->pluginItems(QuickSettingController::PluginAttribute::Quick);
|
||||
for (PluginsItemInterface *plugin : plugins)
|
||||
m_dockedPluginsItems << plugin;
|
||||
|
||||
m_dockedPluginIndex.clear();
|
||||
for (int i = 0; i < localOrder.size(); i++)
|
||||
m_dockedPluginIndex[localOrder[i]] = i;
|
||||
|
||||
Q_EMIT requestUpdate();
|
||||
}
|
||||
|
||||
void QuickPluginModel::initConnection()
|
||||
{
|
||||
QuickSettingController *quickController = QuickSettingController::instance();
|
||||
@ -179,7 +146,6 @@ void QuickPluginModel::initConnection()
|
||||
|
||||
connect(quickController, &QuickSettingController::pluginRemoved, this, &QuickPluginModel::onPluginRemoved);
|
||||
connect(quickController, &QuickSettingController::pluginUpdated, this, &QuickPluginModel::requestUpdatePlugin);
|
||||
connect(SETTINGCONFIG, &SettingConfig::valueChanged, this, &QuickPluginModel::onSettingChanged);
|
||||
}
|
||||
|
||||
void QuickPluginModel::initConfig()
|
||||
|
@ -54,7 +54,6 @@ protected:
|
||||
|
||||
private Q_SLOTS:
|
||||
void onPluginRemoved(PluginsItemInterface *itemInter);
|
||||
void onSettingChanged(const QString &key, const QVariant &value);
|
||||
|
||||
private:
|
||||
void initConnection();
|
||||
|
@ -306,7 +306,7 @@ bool QuickPluginWindow::eventFilter(QObject *watched, QEvent *event)
|
||||
m_dragEnterMimeData = nullptr;
|
||||
QDropEvent *dropEvent = static_cast<QDropEvent *>(event);
|
||||
if (isQuickWindow(dropEvent->source())) {
|
||||
const QuickPluginMimeData *mimeData = qobject_cast<const QuickPluginMimeData *>(dropEvent->mimeData());
|
||||
QuickPluginMimeData *mimeData = static_cast<QuickPluginMimeData *>(const_cast<QMimeData *>(dropEvent->mimeData()));
|
||||
if (mimeData)
|
||||
dragPlugin(mimeData->pluginItemInterface());
|
||||
}
|
||||
@ -320,7 +320,7 @@ bool QuickPluginWindow::eventFilter(QObject *watched, QEvent *event)
|
||||
|
||||
void QuickPluginWindow::dragEnterEvent(QDragEnterEvent *event)
|
||||
{
|
||||
m_dragEnterMimeData = const_cast<QuickPluginMimeData *>(qobject_cast<const QuickPluginMimeData *>(event->mimeData()));
|
||||
m_dragEnterMimeData = static_cast<QuickPluginMimeData *>(const_cast<QMimeData *>(event->mimeData()));
|
||||
if (m_dragEnterMimeData) {
|
||||
PluginsItemInterface *plugin = m_dragEnterMimeData->pluginItemInterface();
|
||||
QIcon icon = plugin->icon(DockPart::QuickShow);
|
||||
|
@ -673,7 +673,21 @@ bool DockPluginController::pluginCanDock(const QStringList &config, PluginsItemI
|
||||
|| (plugin->flags() & PluginFlag::Type_Tray))
|
||||
return true;
|
||||
|
||||
// 3、插件已经驻留在任务栏,则始终显示
|
||||
// 3、如果该插件并未加载(未调用itemAdde或已经调用itemRemoved),则该插件不显示
|
||||
if (!m_pluginsMap.contains(plugin))
|
||||
return false;
|
||||
|
||||
const QMap<QString, QObject *> &pluginMap = m_pluginsMap[plugin];
|
||||
// 如果不包含PLUGININFO,说明该插件从未调用itemAdded方法,无需加载
|
||||
if (!pluginMap.contains(PLUGININFO))
|
||||
return false;
|
||||
|
||||
// 如果该插件信息的m_loaded为true,说明已经调用过itemAdded方法,并且之后又调用了itemRemoved方法,则插件也无需加载
|
||||
PluginInfo *pluginInfo = static_cast<PluginInfo *>(pluginMap[PLUGININFO]);
|
||||
if (!pluginInfo->m_loaded)
|
||||
return false;
|
||||
|
||||
// 4、插件已经驻留在任务栏,则始终显示
|
||||
return config.contains(plugin->pluginName());
|
||||
}
|
||||
|
||||
|
@ -69,27 +69,7 @@ PluginsItemInterface *QuickSettingItem::pluginItem() const
|
||||
|
||||
const QPixmap QuickSettingItem::dragPixmap()
|
||||
{
|
||||
QPixmap pluginPixmap = m_pluginInter->icon(DockPart::QuickPanel, DGuiApplicationHelper::instance()->themeType()).pixmap(ICONWIDTH, ICONHEIGHT);
|
||||
|
||||
QPainter foregroundPainter(&pluginPixmap);
|
||||
foregroundPainter.setPen(foregroundColor());
|
||||
foregroundPainter.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
||||
foregroundPainter.fillRect(pluginPixmap.rect(), foregroundColor());
|
||||
|
||||
QPixmap pixmapDrag(ICONWIDTH + ICONSPACE + FONTSIZE * 2, ICONHEIGHT + ICONSPACE + FONTSIZE * 2);
|
||||
pixmapDrag.fill(Qt::transparent);
|
||||
QPainter painter(&pixmapDrag);
|
||||
painter.drawPixmap(QPoint((ICONSPACE + FONTSIZE * 2) / 2, 0), pluginPixmap);
|
||||
painter.setPen(foregroundPainter.pen());
|
||||
|
||||
QFont font;
|
||||
font.setPixelSize(FONTSIZE);
|
||||
painter.setFont(font);
|
||||
QTextOption option;
|
||||
option.setAlignment(Qt::AlignTop | Qt::AlignHCenter);
|
||||
painter.drawText(QRect(QPoint(0, ICONHEIGHT + ICONSPACE),
|
||||
QPoint(pixmapDrag.width(), pixmapDrag.height())), m_pluginInter->pluginDisplayName(), option);
|
||||
return pixmapDrag;
|
||||
return grab();
|
||||
}
|
||||
|
||||
const QString QuickSettingItem::itemKey() const
|
||||
|
Loading…
x
Reference in New Issue
Block a user