aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2019-11-04 10:52:25 +0100
committerPeter Wu <peter@lekensteyn.nl>2019-11-05 15:21:30 +0000
commit499d912f4b12c8121979f44b1a8b7551c17ee76b (patch)
treed9cdd567f7bca81b35b9515f483edf7bd99a1f2e /ui/qt
parentb01f0febe2b2f57bae5320e8341232ffd0474e44 (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.cpp18
-rw-r--r--ui/qt/funnel_string_dialog.h7
-rw-r--r--ui/qt/funnel_text_dialog.cpp12
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();
}