diff options
| author | Tannin <devnull@localhost> | 2014-12-04 19:30:07 +0100 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2014-12-04 19:30:07 +0100 |
| commit | 6eb05396e4b2b58bc75ef4f79fddfd2355c265fa (patch) | |
| tree | 9a32629c8a7663ec2bcb2606792a4ad30a2803b4 /src/problemsdialog.cpp | |
| parent | 9fcf34fec7874f183c2e8f37009da99293c9e318 (diff) | |
bugfix: hitting the fix button in the diagnosis plugin could crash MO if the
line didn't have mouse focus
Diffstat (limited to 'src/problemsdialog.cpp')
| -rw-r--r-- | src/problemsdialog.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/problemsdialog.cpp b/src/problemsdialog.cpp index edb34f39..f324f1e8 100644 --- a/src/problemsdialog.cpp +++ b/src/problemsdialog.cpp @@ -35,14 +35,14 @@ void ProblemsDialog::runDiagnosis() QTreeWidgetItem *newItem = new QTreeWidgetItem();
newItem->setText(0, diagnose->shortDescription(key));
newItem->setData(0, Qt::UserRole, diagnose->fullDescription(key));
- newItem->setData(1, Qt::UserRole, qVariantFromValue(reinterpret_cast<void*>(diagnose)));
- newItem->setData(1, Qt::UserRole + 1, key);
ui->problemsWidget->addTopLevelItem(newItem);
if (diagnose->hasGuidedFix(key)) {
newItem->setText(1, tr("Fix"));
QPushButton *fixButton = new QPushButton(tr("Fix"));
+ fixButton->setProperty("fix", qVariantFromValue(reinterpret_cast<void*>(diagnose)));
+ fixButton->setProperty("key", key);
connect(fixButton, SIGNAL(clicked()), this, SLOT(startFix()));
ui->problemsWidget->setItemWidget(newItem, 1, fixButton);
} else {
@@ -66,8 +66,13 @@ void ProblemsDialog::selectionChanged() void ProblemsDialog::startFix()
{
- IPluginDiagnose *plugin = reinterpret_cast<IPluginDiagnose*>(ui->problemsWidget->currentItem()->data(1, Qt::UserRole).value<void*>());
- plugin->startGuidedFix(ui->problemsWidget->currentItem()->data(1, Qt::UserRole + 1).toUInt());
+ QObject *fixButton = QObject::sender();
+ if (fixButton == NULL) {
+ qWarning("no button");
+ return;
+ }
+ IPluginDiagnose *plugin = reinterpret_cast<IPluginDiagnose*>(fixButton ->property("fix").value<void*>());
+ plugin->startGuidedFix(fixButton ->property("key").toUInt());
runDiagnosis();
}
|
