fix: 修复任务栏第一次启动加载插件排列顺序不对的bug

由修改bug59243引入的问题,加载一个插件向后端写入一次数据会导致插件写入后端的顺序不正确。等到最后一个插件加载完后再将插件写入到后端,如果插件未加载完写入到后端的插件序号就是错误的。导致启动后插件顺序不对。托盘区域插件顺序需要文管那边将磁盘插件序号改为0

Log: 将加载一个插件向后端写入一次数据改为,加载完所有插件后再将插件顺序写入后端
Bug: https://pms.uniontech.com/zentao/bug-view-61127.html
Change-Id: I1f7b62e7ce1c9e48bf6bdcb1a7393b47e6ac9090
This commit is contained in:
chenwei 2021-01-27 15:38:13 +08:00
parent cabd1a4f8f
commit 7bd1bf6572
5 changed files with 20 additions and 8 deletions

View File

@ -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);
}

View File

@ -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();
}
});
}

View File

@ -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();

View File

@ -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();

View File

@ -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();