diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2019-11-04 10:52:25 +0100 |
---|---|---|
committer | Peter Wu <peter@lekensteyn.nl> | 2019-11-05 15:21:30 +0000 |
commit | 499d912f4b12c8121979f44b1a8b7551c17ee76b (patch) | |
tree | d9cdd567f7bca81b35b9515f483edf7bd99a1f2e /ui/qt | |
parent | b01f0febe2b2f57bae5320e8341232ffd0474e44 (diff) |
funnel: Free callback data
Free allocated callback data in FunnelStringDialog, TextWindow and
registered menu items. Also free strings used in FunnelStringDialog.
Bug: 16177
Change-Id: I9a129b8975a55d1dc89fe851116feebe82763bca
Reviewed-on: https://code.wireshark.org/review/34945
Petri-Dish: Stig Bjørlykke <stig@bjorlykke.org>
Tested-by: Petri Dish Buildbot
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Diffstat (limited to 'ui/qt')
-rw-r--r-- | ui/qt/funnel_string_dialog.cpp | 18 | ||||
-rw-r--r-- | ui/qt/funnel_string_dialog.h | 7 | ||||
-rw-r--r-- | ui/qt/funnel_text_dialog.cpp | 12 |
3 files changed, 28 insertions, 9 deletions
diff --git a/ui/qt/funnel_string_dialog.cpp b/ui/qt/funnel_string_dialog.cpp index affc5e8bca..58912c139a 100644 --- a/ui/qt/funnel_string_dialog.cpp +++ b/ui/qt/funnel_string_dialog.cpp @@ -20,11 +20,13 @@ static FunnelStringDialogHelper dialogHelper; const int min_edit_width_ = 20; // em widths -FunnelStringDialog::FunnelStringDialog(const QString title, const QStringList field_name_list, funnel_dlg_cb_t dialog_cb, void *dialog_cb_data) : +FunnelStringDialog::FunnelStringDialog(const QString title, const QStringList field_name_list, funnel_dlg_cb_t dialog_cb, void *dialog_cb_data, + funnel_dlg_cb_data_free_t dialog_data_free_cb) : QDialog(NULL), ui(new Ui::FunnelStringDialog), dialog_cb_(dialog_cb), - dialog_cb_data_(dialog_cb_data) + dialog_cb_data_(dialog_cb_data), + dialog_cb_data_free_(dialog_data_free_cb) { ui->setupUi(this); setWindowTitle(wsApp->windowTitleString(title)); @@ -44,6 +46,10 @@ FunnelStringDialog::FunnelStringDialog(const QString title, const QStringList fi FunnelStringDialog::~FunnelStringDialog() { + if (dialog_cb_data_free_) { + dialog_cb_data_free_(dialog_cb_data_); + } + delete ui; } @@ -78,9 +84,9 @@ void FunnelStringDialog::on_buttonBox_accepted() dialog_cb_(user_input, dialog_cb_data_); } -void FunnelStringDialog::stringDialogNew(const QString title, const QStringList field_name_list, funnel_dlg_cb_t dialog_cb, void *dialog_cb_data) +void FunnelStringDialog::stringDialogNew(const QString title, const QStringList field_name_list, funnel_dlg_cb_t dialog_cb, void *dialog_cb_data, funnel_dlg_cb_data_free_t dialog_cb_data_free) { - FunnelStringDialog *fsd = new FunnelStringDialog(title, field_name_list, dialog_cb, dialog_cb_data); + FunnelStringDialog *fsd = new FunnelStringDialog(title, field_name_list, dialog_cb, dialog_cb_data, dialog_cb_data_free); connect(&dialogHelper, SIGNAL(closeDialogs()), fsd, SLOT(close())); fsd->show(); } @@ -90,13 +96,13 @@ void FunnelStringDialogHelper::emitCloseDialogs() emit closeDialogs(); } -void string_dialog_new(const gchar *title, const gchar **fieldnames, funnel_dlg_cb_t dialog_cb, void *dialog_cb_data) +void string_dialog_new(const gchar *title, const gchar **fieldnames, funnel_dlg_cb_t dialog_cb, void *dialog_cb_data, funnel_dlg_cb_data_free_t dialog_cb_data_free) { QStringList field_name_list; for (int i = 0; fieldnames[i]; i++) { field_name_list << fieldnames[i]; } - FunnelStringDialog::stringDialogNew(title, field_name_list, dialog_cb, dialog_cb_data); + FunnelStringDialog::stringDialogNew(title, field_name_list, dialog_cb, dialog_cb_data, dialog_cb_data_free); } void string_dialogs_close(void) diff --git a/ui/qt/funnel_string_dialog.h b/ui/qt/funnel_string_dialog.h index d265e485a7..a1d890230d 100644 --- a/ui/qt/funnel_string_dialog.h +++ b/ui/qt/funnel_string_dialog.h @@ -28,11 +28,11 @@ class FunnelStringDialog : public QDialog Q_OBJECT public: - explicit FunnelStringDialog(const QString title, const QStringList field_name_list, funnel_dlg_cb_t dialog_cb, void *dialog_cb_data); + explicit FunnelStringDialog(const QString title, const QStringList field_name_list, funnel_dlg_cb_t dialog_cb, void *dialog_cb_data, funnel_dlg_cb_data_free_t dialog_cb_data_free); ~FunnelStringDialog(); // Funnel ops - static void stringDialogNew(const QString title, const QStringList field_name_list, funnel_dlg_cb_t dialog_cb, void* dialog_cb_data); + static void stringDialogNew(const QString title, const QStringList field_name_list, funnel_dlg_cb_t dialog_cb, void* dialog_cb_data, funnel_dlg_cb_data_free_t dialog_cb_data_free); void accept(); void reject(); @@ -44,6 +44,7 @@ private: Ui::FunnelStringDialog *ui; funnel_dlg_cb_t dialog_cb_; void *dialog_cb_data_; + funnel_dlg_cb_data_free_t dialog_cb_data_free_; QList<QLineEdit *> field_edits_; }; @@ -59,7 +60,7 @@ signals: }; extern "C" { -void string_dialog_new(const gchar* title, const gchar** fieldnames, funnel_dlg_cb_t dialog_cb, void* dialog_cb_data); +void string_dialog_new(const gchar* title, const gchar** fieldnames, funnel_dlg_cb_t dialog_cb, void* dialog_cb_data, funnel_dlg_cb_data_free_t dialog_cb_data_free); void string_dialogs_close(void); } diff --git a/ui/qt/funnel_text_dialog.cpp b/ui/qt/funnel_text_dialog.cpp index 83fa2b8c06..e1a5e11f85 100644 --- a/ui/qt/funnel_text_dialog.cpp +++ b/ui/qt/funnel_text_dialog.cpp @@ -57,6 +57,18 @@ void FunnelTextDialog::reject() close_cb_(close_cb_data_); } + QHash<QObject *, funnel_bt_t*>::iterator i; + for (i = text_button_to_funnel_button_.begin(); i != text_button_to_funnel_button_.end(); ++i) { + funnel_bt_t *funnel_button = i.value(); + if (funnel_button->free_data_fcn) { + funnel_button->free_data_fcn(funnel_button->data); + } + if (funnel_button->free_fcn) { + funnel_button->free_fcn(funnel_button); + } + } + text_button_to_funnel_button_.clear(); + disconnect(); deleteLater(); } |