mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +00:00
fix: 修复任务栏第一次启动加载插件排列顺序不对的bug
由修改bug59243引入的问题,加载一个插件向后端写入一次数据会导致插件写入后端的顺序不正确。等到最后一个插件加载完后再将插件写入到后端,如果插件未加载完写入到后端的插件序号就是错误的。导致启动后插件顺序不对。托盘区域插件顺序需要文管那边将磁盘插件序号改为0 Log: 将加载一个插件向后端写入一次数据改为,加载完所有插件后再将插件顺序写入后端 Bug: https://pms.uniontech.com/zentao/bug-view-61127.html Change-Id: I1f7b62e7ce1c9e48bf6bdcb1a7393b47e6ac9090
This commit is contained in:
parent
cabd1a4f8f
commit
7bd1bf6572
@ -64,6 +64,7 @@ DockItemManager::DockItemManager(QObject *parent)
|
||||
connect(m_pluginsInter, &DockPluginsController::pluginItemRemoved, this, &DockItemManager::pluginItemRemoved, Qt::QueuedConnection);
|
||||
connect(m_pluginsInter, &DockPluginsController::pluginItemUpdated, this, &DockItemManager::itemUpdated, Qt::QueuedConnection);
|
||||
connect(m_pluginsInter, &DockPluginsController::trayVisableCountChanged, this, &DockItemManager::trayVisableCountChanged, Qt::QueuedConnection);
|
||||
connect(m_pluginsInter, &DockPluginsController::pluginLoaderFinished, this, &DockItemManager::updatePluginsItemOrderKey, Qt::QueuedConnection);
|
||||
|
||||
// 刷新图标
|
||||
QMetaObject::invokeMethod(this, "refershItemsIcon", Qt::QueuedConnection);
|
||||
@ -291,7 +292,6 @@ void DockItemManager::pluginItemInserted(PluginsItem *item)
|
||||
insertIndex ++;
|
||||
}
|
||||
|
||||
updatePluginsItemOrderKey();
|
||||
emit itemInserted(insertIndex - firstPluginPosition, item);
|
||||
}
|
||||
|
||||
|
@ -178,7 +178,7 @@ void AbstractPluginsController::positionChanged()
|
||||
inter->positionChanged(position);
|
||||
}
|
||||
|
||||
void AbstractPluginsController::loadPlugin(const QString &pluginFile)
|
||||
void AbstractPluginsController::loadPlugin(const QString &pluginFile, bool lastone)
|
||||
{
|
||||
QPluginLoader *pluginLoader = new QPluginLoader(pluginFile);
|
||||
const QJsonObject &meta = pluginLoader->metaData().value("MetaData").toObject();
|
||||
@ -238,8 +238,11 @@ void AbstractPluginsController::loadPlugin(const QString &pluginFile)
|
||||
// NOTE(justforlxz): 插件的所有初始化工作都在init函数中进行,
|
||||
// loadPlugin函数是按队列执行的,initPlugin函数会有可能导致
|
||||
// 函数执行被阻塞。
|
||||
QTimer::singleShot(1, this, [ = ] {
|
||||
QTimer::singleShot(1, this, [ = ] {
|
||||
initPlugin(interface);
|
||||
if (lastone) {
|
||||
emit pluginLoaderFinished();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -47,6 +47,9 @@ public:
|
||||
const QVariant getValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant& fallback = QVariant()) override;
|
||||
void removeValue(PluginsItemInterface * const itemInter, const QStringList &keyList) override;
|
||||
|
||||
signals:
|
||||
void pluginLoaderFinished();
|
||||
|
||||
protected:
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &pluginsMap();
|
||||
QObject *pluginItemAt(PluginsItemInterface * const itemInter, const QString &itemKey) const;
|
||||
@ -59,7 +62,7 @@ protected Q_SLOTS:
|
||||
private slots:
|
||||
void displayModeChanged();
|
||||
void positionChanged();
|
||||
void loadPlugin(const QString &pluginFile);
|
||||
void loadPlugin(const QString &pluginFile, bool lastone);
|
||||
void initPlugin(PluginsItemInterface *interface);
|
||||
void refreshPluginSettings();
|
||||
|
||||
|
@ -35,11 +35,14 @@ PluginLoader::PluginLoader(const QString &pluginDirPath, QObject *parent)
|
||||
void PluginLoader::run()
|
||||
{
|
||||
QDir pluginsDir(m_pluginDirPath);
|
||||
const QStringList plugins = pluginsDir.entryList(QDir::Files);
|
||||
const QStringList files = pluginsDir.entryList(QDir::Files);
|
||||
static const QGSettings gsetting("com.deepin.dde.dock.disableplugins", "/com/deepin/dde/dock/disableplugins/");
|
||||
static const auto disable_plugins_list = gsetting.get("disable-plugins-list").toStringList();
|
||||
|
||||
for (QString file : plugins)
|
||||
QStringList plugins;
|
||||
|
||||
// 查找可用插件
|
||||
for (QString file : files)
|
||||
{
|
||||
if (!QLibrary::isLibrary(file))
|
||||
continue;
|
||||
@ -52,8 +55,11 @@ void PluginLoader::run()
|
||||
qDebug() << "disable loading plugin:" << file;
|
||||
continue;
|
||||
}
|
||||
plugins << file;
|
||||
}
|
||||
|
||||
emit pluginFounded(pluginsDir.absoluteFilePath(file));
|
||||
for (auto plugin : plugins) {
|
||||
emit pluginFounded(pluginsDir.absoluteFilePath(plugin), plugins.last() == plugin);
|
||||
}
|
||||
|
||||
emit finished();
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
|
||||
signals:
|
||||
void finished() const;
|
||||
void pluginFounded(const QString &pluginFile) const;
|
||||
void pluginFounded(const QString &pluginFile, bool lastone) const;
|
||||
|
||||
protected:
|
||||
void run();
|
||||
|
Loading…
x
Reference in New Issue
Block a user