forked from qt-creator/qt-creator
BinEditor: Fix crash when selecting "None" in codec chooser
The find support was unconditionally using the codec instance, but that
can be nullptr.
Amends d16d2d66a3
Change-Id: Ic1db3205e4a53de6ee031d134652e7f39ed1a18f
Reviewed-by: Artem Sokolovskii <artem.sokolovskii@qt.io>
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
@@ -249,6 +249,7 @@ public:
|
|||||||
void setMarkup(const QList<Markup> &markup);
|
void setMarkup(const QList<Markup> &markup);
|
||||||
void setNewWindowRequestAllowed(bool c) { m_canRequestNewWindow = c; }
|
void setNewWindowRequestAllowed(bool c) { m_canRequestNewWindow = c; }
|
||||||
void setCodec(QTextCodec *codec);
|
void setCodec(QTextCodec *codec);
|
||||||
|
QByteArray toByteArray(const QString &s) const;
|
||||||
|
|
||||||
void clearMarkup() { m_markup.clear(); }
|
void clearMarkup() { m_markup.clear(); }
|
||||||
void addMarkup(quint64 a, quint64 l, const QColor &c, const QString &t) { m_markup.append(Markup(a, l, c, t)); }
|
void addMarkup(quint64 a, quint64 l, const QColor &c, const QString &t) { m_markup.append(Markup(a, l, c, t)); }
|
||||||
@@ -1882,6 +1883,13 @@ void BinEditorWidget::setCodec(QTextCodec *codec)
|
|||||||
viewport()->update();
|
viewport()->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QByteArray BinEditorWidget::toByteArray(const QString &s) const
|
||||||
|
{
|
||||||
|
if (m_codec)
|
||||||
|
return m_codec->fromUnicode(s);
|
||||||
|
return s.toLatin1();
|
||||||
|
}
|
||||||
|
|
||||||
void BinEditorDocument::updateContents()
|
void BinEditorDocument::updateContents()
|
||||||
{
|
{
|
||||||
m_oldData = m_data;
|
m_oldData = m_data;
|
||||||
@@ -1967,8 +1975,8 @@ public:
|
|||||||
{
|
{
|
||||||
m_lastText = txt;
|
m_lastText = txt;
|
||||||
m_lastFindFlags = findFlags;
|
m_lastFindFlags = findFlags;
|
||||||
m_widget->highlightSearchResults(m_codec->fromUnicode(txt),
|
m_widget->highlightSearchResults(
|
||||||
Utils::textDocumentFlagsForFindFlags(findFlags));
|
m_widget->toByteArray(txt), Utils::textDocumentFlagsForFindFlags(findFlags));
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearHighlights() final
|
void clearHighlights() final
|
||||||
@@ -1997,17 +2005,9 @@ public:
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setCodec(QTextCodec *codec)
|
|
||||||
{
|
|
||||||
if (codec == m_codec)
|
|
||||||
return;
|
|
||||||
m_codec = codec;
|
|
||||||
rehighlightAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
Result findIncremental(const QString &txt, FindFlags findFlags) final
|
Result findIncremental(const QString &txt, FindFlags findFlags) final
|
||||||
{
|
{
|
||||||
QByteArray pattern = m_codec->fromUnicode(txt);
|
QByteArray pattern = m_widget->toByteArray(txt);
|
||||||
if (txt != m_lastText)
|
if (txt != m_lastText)
|
||||||
resetIncrementalSearch(); // Because we don't search for nibbles.
|
resetIncrementalSearch(); // Because we don't search for nibbles.
|
||||||
m_lastText = txt;
|
m_lastText = txt;
|
||||||
@@ -2043,7 +2043,7 @@ public:
|
|||||||
|
|
||||||
Result findStep(const QString &txt, FindFlags findFlags) final
|
Result findStep(const QString &txt, FindFlags findFlags) final
|
||||||
{
|
{
|
||||||
QByteArray pattern = m_codec->fromUnicode(txt);
|
QByteArray pattern = m_widget->toByteArray(txt);
|
||||||
bool wasReset = (m_incrementalStartPos < 0);
|
bool wasReset = (m_incrementalStartPos < 0);
|
||||||
if (m_contPos == -1) {
|
if (m_contPos == -1) {
|
||||||
m_contPos = m_widget->cursorPosition() + 1;
|
m_contPos = m_widget->cursorPosition() + 1;
|
||||||
@@ -2081,7 +2081,6 @@ private:
|
|||||||
bool m_incrementalWrappedState = false;
|
bool m_incrementalWrappedState = false;
|
||||||
QString m_lastText;
|
QString m_lastText;
|
||||||
FindFlags m_lastFindFlags;
|
FindFlags m_lastFindFlags;
|
||||||
QTextCodec *m_codec;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2250,9 +2249,11 @@ public:
|
|||||||
|
|
||||||
auto aggregate = new Aggregation::Aggregate;
|
auto aggregate = new Aggregation::Aggregate;
|
||||||
auto binEditorFind = new BinEditorFind(m_widget);
|
auto binEditorFind = new BinEditorFind(m_widget);
|
||||||
connect(codecChooser, &CodecChooser::codecChanged,
|
connect(
|
||||||
binEditorFind, &BinEditorFind::setCodec);
|
codecChooser,
|
||||||
binEditorFind->setCodec(codecChooser->currentCodec());
|
&CodecChooser::codecChanged,
|
||||||
|
binEditorFind,
|
||||||
|
&BinEditorFind::rehighlightAll);
|
||||||
|
|
||||||
aggregate->add(binEditorFind);
|
aggregate->add(binEditorFind);
|
||||||
aggregate->add(m_widget);
|
aggregate->add(m_widget);
|
||||||
|
Reference in New Issue
Block a user