mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +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;
|
bool m_useSourcePixmap;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_INTERFACE(QuickIconDrag, "QuickIconDrag")
|
||||||
|
|
||||||
#endif // QUICKDRAGCORE_H
|
#endif // QUICKDRAGCORE_H
|
||||||
|
@ -121,39 +121,6 @@ void QuickPluginModel::onPluginRemoved(PluginsItemInterface *itemInter)
|
|||||||
Q_EMIT requestUpdate();
|
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()
|
void QuickPluginModel::initConnection()
|
||||||
{
|
{
|
||||||
QuickSettingController *quickController = QuickSettingController::instance();
|
QuickSettingController *quickController = QuickSettingController::instance();
|
||||||
@ -179,7 +146,6 @@ void QuickPluginModel::initConnection()
|
|||||||
|
|
||||||
connect(quickController, &QuickSettingController::pluginRemoved, this, &QuickPluginModel::onPluginRemoved);
|
connect(quickController, &QuickSettingController::pluginRemoved, this, &QuickPluginModel::onPluginRemoved);
|
||||||
connect(quickController, &QuickSettingController::pluginUpdated, this, &QuickPluginModel::requestUpdatePlugin);
|
connect(quickController, &QuickSettingController::pluginUpdated, this, &QuickPluginModel::requestUpdatePlugin);
|
||||||
connect(SETTINGCONFIG, &SettingConfig::valueChanged, this, &QuickPluginModel::onSettingChanged);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickPluginModel::initConfig()
|
void QuickPluginModel::initConfig()
|
||||||
|
@ -54,7 +54,6 @@ protected:
|
|||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void onPluginRemoved(PluginsItemInterface *itemInter);
|
void onPluginRemoved(PluginsItemInterface *itemInter);
|
||||||
void onSettingChanged(const QString &key, const QVariant &value);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initConnection();
|
void initConnection();
|
||||||
|
@ -306,7 +306,7 @@ bool QuickPluginWindow::eventFilter(QObject *watched, QEvent *event)
|
|||||||
m_dragEnterMimeData = nullptr;
|
m_dragEnterMimeData = nullptr;
|
||||||
QDropEvent *dropEvent = static_cast<QDropEvent *>(event);
|
QDropEvent *dropEvent = static_cast<QDropEvent *>(event);
|
||||||
if (isQuickWindow(dropEvent->source())) {
|
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)
|
if (mimeData)
|
||||||
dragPlugin(mimeData->pluginItemInterface());
|
dragPlugin(mimeData->pluginItemInterface());
|
||||||
}
|
}
|
||||||
@ -320,7 +320,7 @@ bool QuickPluginWindow::eventFilter(QObject *watched, QEvent *event)
|
|||||||
|
|
||||||
void QuickPluginWindow::dragEnterEvent(QDragEnterEvent *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) {
|
if (m_dragEnterMimeData) {
|
||||||
PluginsItemInterface *plugin = m_dragEnterMimeData->pluginItemInterface();
|
PluginsItemInterface *plugin = m_dragEnterMimeData->pluginItemInterface();
|
||||||
QIcon icon = plugin->icon(DockPart::QuickShow);
|
QIcon icon = plugin->icon(DockPart::QuickShow);
|
||||||
|
@ -673,7 +673,21 @@ bool DockPluginController::pluginCanDock(const QStringList &config, PluginsItemI
|
|||||||
|| (plugin->flags() & PluginFlag::Type_Tray))
|
|| (plugin->flags() & PluginFlag::Type_Tray))
|
||||||
return true;
|
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());
|
return config.contains(plugin->pluginName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,27 +69,7 @@ PluginsItemInterface *QuickSettingItem::pluginItem() const
|
|||||||
|
|
||||||
const QPixmap QuickSettingItem::dragPixmap()
|
const QPixmap QuickSettingItem::dragPixmap()
|
||||||
{
|
{
|
||||||
QPixmap pluginPixmap = m_pluginInter->icon(DockPart::QuickPanel, DGuiApplicationHelper::instance()->themeType()).pixmap(ICONWIDTH, ICONHEIGHT);
|
return grab();
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString QuickSettingItem::itemKey() const
|
const QString QuickSettingItem::itemKey() const
|
||||||
|
Loading…
x
Reference in New Issue
Block a user