KCMultiDialog: Fix crash when clicking OK
Review Request #118639 - Created June 10, 2014 and submitted
When one closes KCMultiDialog with OK, QDialog::finished() can be emitted before the clicked() signal of the OK button. This causes the following sequence to happen: - KCMultiDialogPrivate::_k_dialogClosed * deletes the KCModule - KCModuleProxyPrivate::_k_moduleDestroyed * sets kcm to 0 - KCMultiDialog::slotOkClicked - KCMultiDialogPrivate::apply - KCModuleProxy::save - KCModuleProxyPrivate::realModule * notices kcm is 0, so recreates it * calls kcm->save() - KWinDesktopConfig::save() * crashes because it expects kcm->load() to have been called To avoid this, trigger the cleanup code in closeEvent() rather than when finished() is emitted, as we can be sure closeEvent() is always called *after* the methods connected to the button box signals has executed.
Configuring virtual desktops does not crash anymore
Good catch! I can confirm that this makes saving the values in the formats KCM work. The virtual desktop config doesn't crash for me without this patch, so can't confirm that this condition is fixed as well.