From ac959387fe1e92fe5d839e86e8e893bfcb7815bb Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 9 Jul 2024 11:14:31 +0200 Subject: [PATCH] StretchHeaderView: Fix infinite loop Fixes #1480 --- src/widgets/stretchheaderview.cpp | 9 ++++++++- src/widgets/stretchheaderview.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/widgets/stretchheaderview.cpp b/src/widgets/stretchheaderview.cpp index 3c0e27f8..3cea1321 100644 --- a/src/widgets/stretchheaderview.cpp +++ b/src/widgets/stretchheaderview.cpp @@ -42,7 +42,8 @@ constexpr int kMagicNumber = 0x502C9510; StretchHeaderView::StretchHeaderView(const Qt::Orientation orientation, QWidget *parent) : QHeaderView(orientation, parent), stretch_enabled_(false), - in_mouse_move_event_(false) { + in_mouse_move_event_(false), + forced_resize_logical_index_(-1) { setDefaultSectionSize(100); setMinimumSectionSize(30); @@ -326,6 +327,11 @@ void StretchHeaderView::SectionResized(const int logical_index, const int old_si return; } + if (logical_index == forced_resize_logical_index_) { + forced_resize_logical_index_ = -1; + return; + } + if (in_mouse_move_event_) { bool resized = false; if (new_size >= minimumSectionSize()) { @@ -356,6 +362,7 @@ void StretchHeaderView::SectionResized(const int logical_index, const int old_si } if (!resized) { in_mouse_move_event_ = true; + forced_resize_logical_index_ = logical_index; resizeSection(logical_index, old_size); in_mouse_move_event_ = false; } diff --git a/src/widgets/stretchheaderview.h b/src/widgets/stretchheaderview.h index 2806b09c..41364765 100644 --- a/src/widgets/stretchheaderview.h +++ b/src/widgets/stretchheaderview.h @@ -95,6 +95,7 @@ class StretchHeaderView : public QHeaderView { QVector column_widths_; bool in_mouse_move_event_; + int forced_resize_logical_index_; }; #endif // STRETCHHEADERVIEW_H