aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-07-12 08:52:32 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2011-07-12 11:50:53 +0200
commit1dfd78a9c8961604ec9550b605f63c272624c822 (patch)
treecbfb8aefb9cd8ac6ca8351923e76def807669930
parentf7b2dd95de1a40dcbbe94a22b92942061dcd8797 (diff)
Indenters: Fix dangling pointer when project settings are deleted.
Task-number: QTCREATORBUG-5390 Change-Id: I68517955a86fbb2ded53f6235a7fe27793e2b2c8 Reviewed-on: http://codereview.qt.nokia.com/1481 Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
-rw-r--r--src/plugins/cpptools/cppqtstyleindenter.cpp2
-rw-r--r--src/plugins/texteditor/basetexteditor.cpp29
-rw-r--r--src/plugins/texteditor/basetexteditor.h2
-rw-r--r--src/plugins/texteditor/indenter.cpp1
4 files changed, 33 insertions, 1 deletions
diff --git a/src/plugins/cpptools/cppqtstyleindenter.cpp b/src/plugins/cpptools/cppqtstyleindenter.cpp
index 413e404149d..3bcbe813c2c 100644
--- a/src/plugins/cpptools/cppqtstyleindenter.cpp
+++ b/src/plugins/cpptools/cppqtstyleindenter.cpp
@@ -50,6 +50,8 @@ using namespace CppTools;
CppQtStyleIndenter::CppQtStyleIndenter()
: m_cppCodeStylePreferences(0)
{
+ // Just for safety. setCodeStylePreferences should be called when the editor the
+ // indenter belongs to gets initialized.
m_cppCodeStylePreferences = CppToolsSettings::instance()->cppCodeStylePreferences();
}
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 1401ab74500..a14afe32540 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -51,6 +51,7 @@
#include "codeassistant.h"
#include "defaultassistinterface.h"
#include "convenience.h"
+#include "texteditorsettings.h"
#include <aggregation/aggregate.h>
#include <coreplugin/actionmanager/actionmanager.h>
@@ -4335,12 +4336,16 @@ void BaseTextEditorWidget::setTabPreferences(TabPreferences *tabPreferences)
{
if (d->m_tabPreferences) {
disconnect(d->m_tabPreferences, SIGNAL(currentSettingsChanged(TextEditor::TabSettings)),
- this, SLOT(setTabSettings(TextEditor::TabSettings)));
+ this, SLOT(setTabSettings(TextEditor::TabSettings)));
+ disconnect(d->m_tabPreferences, SIGNAL(destroyed()),
+ this, SLOT(onTabPreferencesDestroyed()));
}
d->m_tabPreferences = tabPreferences;
if (d->m_tabPreferences) {
connect(d->m_tabPreferences, SIGNAL(currentSettingsChanged(TextEditor::TabSettings)),
this, SLOT(setTabSettings(TextEditor::TabSettings)));
+ connect(d->m_tabPreferences, SIGNAL(destroyed()),
+ this, SLOT(onTabPreferencesDestroyed()));
setTabSettings(d->m_tabPreferences->currentSettings());
}
}
@@ -4351,15 +4356,37 @@ void BaseTextEditorWidget::setCodeStylePreferences(IFallbackPreferences *prefere
if (d->m_codeStylePreferences) {
disconnect(d->m_codeStylePreferences, SIGNAL(currentValueChanged(QVariant)),
this, SLOT(slotCodeStyleSettingsChanged(QVariant)));
+ disconnect(d->m_codeStylePreferences, SIGNAL(destroyed()),
+ this, SLOT(onCodeStylePreferencesDestroyed()));
}
d->m_codeStylePreferences = preferences;
if (d->m_codeStylePreferences) {
connect(d->m_codeStylePreferences, SIGNAL(currentValueChanged(QVariant)),
this, SLOT(slotCodeStyleSettingsChanged(QVariant)));
+ connect(d->m_codeStylePreferences, SIGNAL(destroyed()),
+ this, SLOT(onCodeStylePreferencesDestroyed()));
slotCodeStyleSettingsChanged(d->m_codeStylePreferences->currentValue());
}
}
+void BaseTextEditorWidget::onTabPreferencesDestroyed()
+{
+ if (sender() != d->m_tabPreferences)
+ return;
+ // avoid failing disconnects, m_tabPreferences has already been reduced to QObject
+ d->m_tabPreferences = 0;
+ setTabPreferences(TextEditorSettings::instance()->tabPreferences(languageSettingsId()));
+}
+
+void BaseTextEditorWidget::onCodeStylePreferencesDestroyed()
+{
+ if (sender() != d->m_codeStylePreferences)
+ return;
+ // avoid failing disconnects, m_codeStylePreferences has already been reduced to QObject
+ d->m_codeStylePreferences = 0;
+ setCodeStylePreferences(TextEditorSettings::instance()->codeStylePreferences(languageSettingsId()));
+}
+
void BaseTextEditorWidget::slotCodeStyleSettingsChanged(const QVariant &)
{
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index e7915545d63..ab64861b305 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -355,6 +355,8 @@ private slots:
bool inFindScope(const QTextCursor &cursor);
bool inFindScope(int selectionStart, int selectionEnd);
void inSnippetMode(bool *active);
+ void onTabPreferencesDestroyed();
+ void onCodeStylePreferencesDestroyed();
private:
Internal::BaseTextEditorPrivate *d;
diff --git a/src/plugins/texteditor/indenter.cpp b/src/plugins/texteditor/indenter.cpp
index 02e24e390eb..0695e4f3b79 100644
--- a/src/plugins/texteditor/indenter.cpp
+++ b/src/plugins/texteditor/indenter.cpp
@@ -33,6 +33,7 @@
#include "indenter.h"
#include "basetexteditor.h"
#include "tabsettings.h"
+#include "ifallbackpreferences.h"
using namespace TextEditor;