From 6eb05396e4b2b58bc75ef4f79fddfd2355c265fa Mon Sep 17 00:00:00 2001 From: Tannin Date: Thu, 4 Dec 2014 19:30:07 +0100 Subject: bugfix: hitting the fix button in the diagnosis plugin could crash MO if the line didn't have mouse focus --- src/problemsdialog.cpp | 13 +++++++++---- 1 file 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(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(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(ui->problemsWidget->currentItem()->data(1, Qt::UserRole).value()); - 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(fixButton ->property("fix").value()); + plugin->startGuidedFix(fixButton ->property("key").toUInt()); runDiagnosis(); } -- cgit v1.3.1