diff options
Diffstat (limited to 'src/libaudqt/prefs-plugin.cc')
-rw-r--r-- | src/libaudqt/prefs-plugin.cc | 35 |
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); |