mirror of
https://invent.kde.org/network/falkon.git
synced 2024-09-21 09:42:10 +02:00
Preferences: Fix crash when un/loading of plugins
BUG: 492023 FIXED-IN: 24.12.0 Signed-off-by: Juraj Oravec <jurajoravec@mailo.com>
This commit is contained in:
parent
98bd2e711f
commit
fe81fe5aaa
|
@ -77,7 +77,7 @@ void PluginsManager::save()
|
||||||
QListWidgetItem* item = ui->list->item(i);
|
QListWidgetItem* item = ui->list->item(i);
|
||||||
|
|
||||||
if (item->checkState() == Qt::Checked) {
|
if (item->checkState() == Qt::Checked) {
|
||||||
const Plugins::Plugin plugin = item->data(PluginRoles::Plugin).value<Plugins::Plugin>();
|
const Plugins::Plugin plugin = m_pluginList[item->data(PluginRoles::PluginId).value<QString>()];
|
||||||
allowedPlugins.append(plugin.pluginId);
|
allowedPlugins.append(plugin.pluginId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,6 +96,7 @@ void PluginsManager::refresh()
|
||||||
|
|
||||||
const int oldCurrentRow = ui->list->currentRow();
|
const int oldCurrentRow = ui->list->currentRow();
|
||||||
|
|
||||||
|
m_pluginList.clear();
|
||||||
ui->list->clear();
|
ui->list->clear();
|
||||||
ui->butSettings->setEnabled(false);
|
ui->butSettings->setEnabled(false);
|
||||||
disconnect(ui->list, &QListWidget::itemChanged, this, &PluginsManager::itemChanged);
|
disconnect(ui->list, &QListWidget::itemChanged, this, &PluginsManager::itemChanged);
|
||||||
|
@ -119,10 +120,12 @@ void PluginsManager::refresh()
|
||||||
item->setData(PluginRoles::Version, spec.version);
|
item->setData(PluginRoles::Version, spec.version);
|
||||||
item->setData(PluginRoles::Author, spec.author);
|
item->setData(PluginRoles::Author, spec.author);
|
||||||
item->setData(PluginRoles::Description, spec.description);
|
item->setData(PluginRoles::Description, spec.description);
|
||||||
|
item->setData(PluginRoles::PluginId, plugin.pluginId);
|
||||||
|
|
||||||
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
||||||
item->setCheckState(plugin.isLoaded() ? Qt::Checked : Qt::Unchecked);
|
item->setCheckState(plugin.isLoaded() ? Qt::Checked : Qt::Unchecked);
|
||||||
item->setData(PluginRoles::Plugin, QVariant::fromValue(plugin));
|
|
||||||
|
m_pluginList[plugin.pluginId] = plugin;
|
||||||
|
|
||||||
ui->list->addItem(item);
|
ui->list->addItem(item);
|
||||||
}
|
}
|
||||||
|
@ -167,7 +170,7 @@ void PluginsManager::currentChanged(QListWidgetItem* item)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Plugins::Plugin plugin = item->data(PluginRoles::Plugin).value<Plugins::Plugin>();
|
const Plugins::Plugin plugin = m_pluginList[item->data(PluginRoles::PluginId).value<QString>()];
|
||||||
ui->butSettings->setEnabled(plugin.isLoaded() && plugin.pluginSpec.hasSettings);
|
ui->butSettings->setEnabled(plugin.isLoaded() && plugin.pluginSpec.hasSettings);
|
||||||
ui->butRemove->setEnabled(plugin.isRemovable());
|
ui->butRemove->setEnabled(plugin.isRemovable());
|
||||||
}
|
}
|
||||||
|
@ -178,7 +181,7 @@ void PluginsManager::itemChanged(QListWidgetItem* item)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Plugins::Plugin plugin = item->data(PluginRoles::Plugin).value<Plugins::Plugin>();
|
Plugins::Plugin plugin = m_pluginList[item->data(PluginRoles::PluginId).value<QString>()];
|
||||||
|
|
||||||
m_blockRefresh = true;
|
m_blockRefresh = true;
|
||||||
|
|
||||||
|
@ -198,7 +201,7 @@ void PluginsManager::itemChanged(QListWidgetItem* item)
|
||||||
QMessageBox::critical(this, tr("Error!"), tr("Cannot load extension!"));
|
QMessageBox::critical(this, tr("Error!"), tr("Cannot load extension!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
item->setData(PluginRoles::Plugin, QVariant::fromValue(plugin));
|
m_pluginList[plugin.pluginId] = plugin;
|
||||||
|
|
||||||
connect(ui->list, &QListWidget::itemChanged, this, &PluginsManager::itemChanged);
|
connect(ui->list, &QListWidget::itemChanged, this, &PluginsManager::itemChanged);
|
||||||
|
|
||||||
|
@ -212,12 +215,12 @@ void PluginsManager::settingsClicked()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Plugins::Plugin plugin = item->data(PluginRoles::Plugin).value<Plugins::Plugin>();
|
Plugins::Plugin plugin = m_pluginList[item->data(PluginRoles::PluginId).value<QString>()];
|
||||||
|
|
||||||
if (!plugin.isLoaded()) {
|
if (!plugin.isLoaded()) {
|
||||||
mApp->plugins()->loadPlugin(&plugin);
|
mApp->plugins()->loadPlugin(&plugin);
|
||||||
|
|
||||||
item->setData(PluginRoles::Plugin, QVariant::fromValue(plugin));
|
m_pluginList[plugin.pluginId] = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.isLoaded() && plugin.pluginSpec.hasSettings) {
|
if (plugin.isLoaded() && plugin.pluginSpec.hasSettings) {
|
||||||
|
@ -232,7 +235,7 @@ void PluginsManager::removeClicked()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Plugins::Plugin plugin = item->data(PluginRoles::Plugin).value<Plugins::Plugin>();
|
Plugins::Plugin plugin = m_pluginList[item->data(PluginRoles::PluginId).value<QString>()];
|
||||||
|
|
||||||
const auto button = QMessageBox::warning(this, tr("Confirmation"),
|
const auto button = QMessageBox::warning(this, tr("Confirmation"),
|
||||||
tr("Are you sure you want to remove '%1'?").arg(plugin.pluginSpec.name),
|
tr("Are you sure you want to remove '%1'?").arg(plugin.pluginSpec.name),
|
||||||
|
@ -241,6 +244,7 @@ void PluginsManager::removeClicked()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_pluginList.remove(plugin.pluginId);
|
||||||
mApp->plugins()->removePlugin(&plugin);
|
mApp->plugins()->removePlugin(&plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
|
#include "plugins.h"
|
||||||
#include "qzcommon.h"
|
#include "qzcommon.h"
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
|
@ -38,7 +39,7 @@ public:
|
||||||
Version = Qt::UserRole,
|
Version = Qt::UserRole,
|
||||||
Author = Qt::UserRole + 1,
|
Author = Qt::UserRole + 1,
|
||||||
Description = Qt::UserRole + 2,
|
Description = Qt::UserRole + 2,
|
||||||
Plugin = Qt::UserRole + 10
|
PluginId = Qt::UserRole + 3
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit PluginsManager(QWidget* parent = nullptr);
|
explicit PluginsManager(QWidget* parent = nullptr);
|
||||||
|
@ -62,6 +63,7 @@ private:
|
||||||
Ui::PluginsList* ui;
|
Ui::PluginsList* ui;
|
||||||
bool m_loaded;
|
bool m_loaded;
|
||||||
bool m_blockRefresh = false;
|
bool m_blockRefresh = false;
|
||||||
|
QHash<QString, Plugins::Plugin> m_pluginList;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PLUGINSMANAGER_H
|
#endif // PLUGINSMANAGER_H
|
||||||
|
|
Loading…
Reference in New Issue
Block a user