From 97d3843501a5cc4844e7f066d0956061ee66c3da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Thu, 30 Apr 2026 15:05:34 +0200 Subject: [PATCH] Always debounce modelDirty() with dirty() timer. Took 29 minutes Took 3 minutes --- .../visual_database_display_widget.cpp | 10 +++++----- .../models/database/card_database_display_model.cpp | 13 ++++++------- .../models/database/card_database_display_model.h | 4 ---- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp index 44a9e98a0..c7a548e4b 100644 --- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp +++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_widget.cpp @@ -29,6 +29,11 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent, : QWidget(parent), deckEditor(_deckEditor), databaseModel(database_model), databaseDisplayModel(database_display_model) { + debounceTimer = new QTimer(this); + debounceTimer->setSingleShot(true); // Ensure it only fires once after the timeout + + connect(debounceTimer, &QTimer::timeout, this, &VisualDatabaseDisplayWidget::onSearchModelChanged); + cards = new QList; connect(databaseDisplayModel, &CardDatabaseDisplayModel::modelDirty, this, &VisualDatabaseDisplayWidget::modelDirty); @@ -156,11 +161,6 @@ void VisualDatabaseDisplayWidget::initialize() mainLayout->addWidget(cardSizeWidget); - debounceTimer = new QTimer(this); - debounceTimer->setSingleShot(true); // Ensure it only fires once after the timeout - - connect(debounceTimer, &QTimer::timeout, this, &VisualDatabaseDisplayWidget::onSearchModelChanged); - databaseDisplayModel->setFilterTree(filterModel->filterTree()); connect(filterModel, &FilterTreeModel::layoutChanged, this, &VisualDatabaseDisplayWidget::onSearchModelChanged); diff --git a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp index 826bec581..b9c38d3d7 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp +++ b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.cpp @@ -10,7 +10,10 @@ CardDatabaseDisplayModel::CardDatabaseDisplayModel(QObject *parent) setSortCaseSensitivity(Qt::CaseInsensitive); dirtyTimer.setSingleShot(true); - connect(&dirtyTimer, &QTimer::timeout, this, &CardDatabaseDisplayModel::invalidate); + connect(&dirtyTimer, &QTimer::timeout, this, [this]() { + invalidate(); + emit modelDirty(); + }); loadedRowCount = 0; } @@ -19,13 +22,9 @@ void CardDatabaseDisplayModel::setSourceModel(QAbstractItemModel *model) { QSortFilterProxyModel::setSourceModel(model); - connect(model, &QAbstractItemModel::rowsInserted, this, [this]() { - dirty(); - }); + connect(model, &QAbstractItemModel::rowsInserted, this, [this]() { dirty(); }); - connect(model, &QAbstractItemModel::rowsRemoved, this, [this]() { - dirty(); - }); + connect(model, &QAbstractItemModel::rowsRemoved, this, [this]() { dirty(); }); connect(model, &QAbstractItemModel::modelReset, this, [this]() { loadedRowCount = 0; diff --git a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h index b1d3c0f22..c3145c356 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h +++ b/libcockatrice_models/libcockatrice/models/database/card_database_display_model.h @@ -43,7 +43,6 @@ public: void setIsToken(FilterBool _isToken) { isToken = _isToken; - emit modelDirty(); dirty(); } @@ -54,20 +53,17 @@ public: filterString = nullptr; } cardName = sanitizeCardName(_cardName, characterTranslation); - emit modelDirty(); dirty(); } void setStringFilter(const QString &_src) { delete filterString; filterString = new FilterString(_src); - emit modelDirty(); dirty(); } void setCardNameSet(const QSet &_cardNameSet) { cardNameSet = _cardNameSet; - emit modelDirty(); dirty(); }