summaryrefslogtreecommitdiff
path: root/src/libaudqt/prefs-plugin.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libaudqt/prefs-plugin.cc')
-rw-r--r--src/libaudqt/prefs-plugin.cc35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/libaudqt/prefs-plugin.cc b/src/libaudqt/prefs-plugin.cc
index 0853f45..8b38950 100644
--- a/src/libaudqt/prefs-plugin.cc
+++ b/src/libaudqt/prefs-plugin.cc
@@ -78,7 +78,7 @@ EXPORT void plugin_prefs (PluginHandle * ph)
{
ConfigWindow * cw = find_config_window (ph);
- if (cw)
+ if (cw && cw->root)
{
window_bring_to_front (cw->root);
return;
@@ -92,15 +92,25 @@ EXPORT void plugin_prefs (PluginHandle * ph)
if (! p)
return;
- cw = new ConfigWindow;
- config_windows.append (cw);
+ if (! cw)
+ {
+ cw = new ConfigWindow {ph};
+ config_windows.append (cw);
+ }
- cw->ph = ph;
cw->root = new QDialog;
+ cw->root->setAttribute (Qt::WA_DeleteOnClose);
if (p->init)
p->init ();
+ QObject::connect (cw->root, & QObject::destroyed, [p, cw] () {
+ if (p->cleanup)
+ p->cleanup ();
+
+ cw->root = nullptr;
+ });
+
const char * name = header->info.name;
if (header->info.domain)
name = dgettext (header->info.domain, name);
@@ -108,8 +118,9 @@ EXPORT void plugin_prefs (PluginHandle * ph)
cw->root->setWindowTitle ((const char *) str_printf(_("%s Settings"), name));
QVBoxLayout * vbox = new QVBoxLayout (cw->root);
-
+ vbox->setContentsMargins (4, 4, 4, 4);
vbox->setSpacing (4);
+
prefs_populate (vbox, p->widgets, header->info.domain);
vbox->addStretch (1);
@@ -121,23 +132,19 @@ EXPORT void plugin_prefs (PluginHandle * ph)
bbox->button (QDialogButtonBox::Ok)->setText (translate_str (N_("_Set")));
bbox->button (QDialogButtonBox::Cancel)->setText (translate_str (N_("_Cancel")));
- QObject::connect (bbox, & QDialogButtonBox::accepted, [=] () {
- if (p->apply)
- p->apply ();
-
- cw->root->hide ();
+ QObject::connect (bbox, & QDialogButtonBox::accepted, [p, cw] () {
+ p->apply ();
+ cw->root->deleteLater ();
});
-
- QObject::connect (bbox, & QDialogButtonBox::rejected, cw->root, & QWidget::hide);
}
else
{
bbox->setStandardButtons (QDialogButtonBox::Close);
bbox->button (QDialogButtonBox::Close)->setText (translate_str (N_("_Close")));
-
- QObject::connect (bbox, & QDialogButtonBox::rejected, cw->root, & QWidget::hide);
}
+ QObject::connect (bbox, & QDialogButtonBox::rejected, cw->root, & QObject::deleteLater);
+
vbox->addWidget (bbox);
window_bring_to_front (cw->root);