diff --git a/src/tomahawk/TomahawkWindow.cpp b/src/tomahawk/TomahawkWindow.cpp index fa74ddd07..cd75caf8b 100644 --- a/src/tomahawk/TomahawkWindow.cpp +++ b/src/tomahawk/TomahawkWindow.cpp @@ -1000,10 +1000,15 @@ TomahawkWindow::onHistoryForwardAvailable( bool avail ) void TomahawkWindow::showSettingsDialog() { - SettingsDialog* settingsDialog = new SettingsDialog; - connect( settingsDialog, SIGNAL( finished( bool ) ), settingsDialog, SLOT( deleteLater() ) ); + if ( m_settingsDialog ) + return; - settingsDialog->show(); + m_settingsDialog = new SettingsDialog; + // This needs to be a QueuedConnection, so that deleteLater() actually works. + connect( m_settingsDialog.data(), SIGNAL( finished( bool ) ), + m_settingsDialog.data(), SLOT( deleteLater() ), Qt::QueuedConnection ); + + m_settingsDialog->show(); } diff --git a/src/tomahawk/TomahawkWindow.h b/src/tomahawk/TomahawkWindow.h index c98a6057d..bea75b942 100644 --- a/src/tomahawk/TomahawkWindow.h +++ b/src/tomahawk/TomahawkWindow.h @@ -56,12 +56,12 @@ class QSearchField; class SourceTreeView; class QAction; +class SettingsDialog; class MusicScanner; class AudioControls; class TomahawkTrayIcon; class PlaylistModel; class AnimatedSplitter; - class AccountsToolButton; namespace Ui @@ -179,6 +179,7 @@ private: #endif Ui::TomahawkWindow* ui; + QPointer m_settingsDialog; QSearchField* m_searchWidget; AudioControls* m_audioControls; TomahawkTrayIcon* m_trayIcon;