[sdk/kdiff3/1.13] src: Protect against early start resize signals from Qt.
Michael Reeves <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 656a1d066cd5f5bb48035dfa67cd578882ee20a7 by Michael Reeves.
Committed on 16/07/2026 at 00:53.
Pushed by mreeves into branch '1.13'.
Protect against early start resize signals from Qt.
M +1 -0 src/SourceData.cpp
M +14 -9 src/difftextwindow.cpp
https://invent.kde.org/sdk/kdiff3/-/commit/656a1d066cd5f5bb48035dfa67cd578882ee20a7
diff --git a/src/SourceData.cpp b/src/SourceData.cpp
index c48cdbef..b98a7e81 100644
--- a/src/SourceData.cpp
+++ b/src/SourceData.cpp
@@ -175,6 +175,7 @@ const std::shared_ptr<LineDataVector>& SourceData::getLineDataForDisplay() const
LineType SourceData::lineCount() const
{
+ assert(m_normalData.m_pBuf != nullptr);
return SafeInt<LineType>(m_normalData.lineCount());
}
diff --git a/src/difftextwindow.cpp b/src/difftextwindow.cpp
index 18990894..afe0f458 100644
--- a/src/difftextwindow.cpp
+++ b/src/difftextwindow.cpp
@@ -296,6 +296,7 @@ const Diff3LineVector* DiffTextWindow::getDiff3LineVector() const
qint32 DiffTextWindow::getLineNumberWidth() const
{
+ assert(d->mSourceData != nullptr);
return std::floor(std::log10(std::max(d->mSourceData->lineCount(), 1))) + 1;
}
@@ -1393,16 +1394,20 @@ QString DiffTextWindowData::getLineString(const LineType line) const
void DiffTextWindow::resizeEvent(QResizeEvent* e)
{
- QSize newSize = e->size();
- QFontMetrics fm = fontMetrics();
- LineType visibleLines = newSize.height() / fm.lineSpacing() - 2;
- //TODO: Fix after line number area is converted to a QWidget.
- qint32 visibleColumns = newSize.width() / fm.horizontalAdvance(u'0') - d->leftInfoWidth();
+ //Qt sends resize events before init under certain conditions. No good way to avoid this so just tell Qt to handle it.
+ if(d->mSourceData != nullptr)
+ {
+ QSize newSize = e->size();
+ QFontMetrics fm = fontMetrics();
+ LineType visibleLines = newSize.height() / fm.lineSpacing() - 2;
+ //TODO: Fix after line number area is converted to a QWidget.
+ qint32 visibleColumns = newSize.width() / fm.horizontalAdvance(u'0') - d->leftInfoWidth();
- if(e->size().height() != e->oldSize().height())
- Q_EMIT resizeHeightChangedSignal(visibleLines);
- if(e->size().width() != e->oldSize().width())
- Q_EMIT resizeWidthChangedSignal(visibleColumns);
+ if(e->size().height() != e->oldSize().height())
+ Q_EMIT resizeHeightChangedSignal(visibleLines);
+ if(e->size().width() != e->oldSize().width())
+ Q_EMIT resizeWidthChangedSignal(visibleColumns);
+ }
QWidget::resizeEvent(e);
}