aboutsummaryrefslogtreecommitdiffstats
path: root/desktop-widgets
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-09-29 21:41:37 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-09-29 14:01:22 -0700
commit6e24762a6cab33abd34c3d28f47119b0ac25e7e6 (patch)
tree83040072e330f50b434a143160ca6cc2e022e56a /desktop-widgets
parentb80fd26e81d5de5c3b6871a565e8f7449df16bc5 (diff)
downloadsubsurface-6e24762a6cab33abd34c3d28f47119b0ac25e7e6.tar.gz
Cleanup: Don't leak DiveLogImportDialog objects
The non-modal DiveLogImportDialog was only implicitly deleted when the MainWindow was destroyed. Instead hook into the accept() and reject() functions and schedule for deletion with deleteLater(). Quite the horrible proposition, but in line with Qt's object model. Consider making the dialog modal instead. There seems to be no upside for this being modal. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r--desktop-widgets/divelogimportdialog.cpp16
-rw-r--r--desktop-widgets/divelogimportdialog.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/desktop-widgets/divelogimportdialog.cpp b/desktop-widgets/divelogimportdialog.cpp
index 4d092bb8c..2068c3916 100644
--- a/desktop-widgets/divelogimportdialog.cpp
+++ b/desktop-widgets/divelogimportdialog.cpp
@@ -951,6 +951,22 @@ void DiveLogImportDialog::on_buttonBox_accepted()
MainWindow::instance()->refreshDisplay();
}
+// Since this is a non-modal dialog, the caller can't delete it at the call-site.
+// Therefore, hook into the accept() and reject() functions and schedule the object
+// for deletion with deleteLater(). Horrible, but absolutely the "Qt-way".
+// TODO: Think about making the dialog modal.
+void DiveLogImportDialog::accept()
+{
+ QDialog::accept();
+ deleteLater();
+}
+
+void DiveLogImportDialog::reject()
+{
+ QDialog::reject();
+ deleteLater();
+}
+
TagDragDelegate::TagDragDelegate(QObject *parent) : QStyledItemDelegate(parent)
{
}
diff --git a/desktop-widgets/divelogimportdialog.h b/desktop-widgets/divelogimportdialog.h
index f01ec282d..a6f2a8868 100644
--- a/desktop-widgets/divelogimportdialog.h
+++ b/desktop-widgets/divelogimportdialog.h
@@ -89,6 +89,8 @@ slots:
void loadFileContents(int value, enum whatChanged triggeredBy);
int setup_csv_params(QStringList r, char **params, int pnr);
int parseTxtHeader(QString fileName, char **params, int pnr);
+ void accept() override;
+ void reject() override;
private:
bool selector;