diff --git a/src/common/Configuration.cpp b/src/common/Configuration.cpp index a452dfbc2..be7aea2ee 100644 --- a/src/common/Configuration.cpp +++ b/src/common/Configuration.cpp @@ -948,7 +948,7 @@ bool Configuration::getNavBarLegendEnabled() void Configuration::setShowQuickFilter(bool show) { s.setValue("showQuickFilter", show); - emit quickFilterToggled(show); + emit quickFilterOptionsChanged(); } bool Configuration::getShowQuickFilter() const @@ -959,7 +959,7 @@ bool Configuration::getShowQuickFilter() const void Configuration::setItemCountVisible(bool visible) { s.setValue("itemCountVisible", visible); - emit itemCountToggled(visible); + emit itemCountOptionsChanged(); } bool Configuration::getItemCountVisible() const @@ -969,11 +969,33 @@ bool Configuration::getItemCountVisible() const void Configuration::setItemCountAutoHide(bool value) { - s.value("autoHideItemCount", value); - emit itemCountAutoHideToggled(value); + s.setValue("autoHideItemCount", value); + emit itemCountOptionsChanged(); } bool Configuration::getItemCountAutoHide() const { return s.value("autoHideItemCount", false).toBool(); } + +void Configuration::setTruncateFunctionNameCol(bool value) +{ + s.setValue("truncateFcnNameCol", value); + emit functionsOptionsChanged(); +} + +bool Configuration::getTruncateFunctionNameCol() const +{ + return s.value("truncateFcnNameCol", true).toBool(); +} + +void Configuration::setFunctionNameColWidth(int width) +{ + s.setValue("fcnNameColWidth", width); + emit functionsOptionsChanged(); +} + +int Configuration::getFunctionNameColWidth() const +{ + return s.value("fcnNameColWidth", 400).toInt(); +} diff --git a/src/common/Configuration.h b/src/common/Configuration.h index 982106086..e22405028 100644 --- a/src/common/Configuration.h +++ b/src/common/Configuration.h @@ -338,15 +338,32 @@ class CUTTER_EXPORT Configuration : public QObject */ bool getItemCountAutoHide() const; + /** + * @brief Enable or Disable default width of function name column in widgets + * + * Prevents long function names from excessively stretching the UI. + * The default width is specified by @ref setFunctionNameColumnWidth + */ + void setTruncateFunctionNameCol(bool value); + bool getTruncateFunctionNameCol() const; + + /** + * @brief Set the function name column width in pixels + * + * This is only used if @ref setTruncateFunctionNameCol is set to true + */ + void setFunctionNameColWidth(int width); + int getFunctionNameColWidth() const; + public slots: void refreshFont(); signals: void fontsUpdated(); void colorsUpdated(); void interfaceThemeChanged(); - void quickFilterToggled(bool show); - void itemCountToggled(bool visible); - void itemCountAutoHideToggled(bool value); + void itemCountOptionsChanged(); + void quickFilterOptionsChanged(); + void functionsOptionsChanged(); #ifdef CUTTER_ENABLE_KSYNTAXHIGHLIGHTING void kSyntaxHighlightingThemeChanged(); #endif diff --git a/src/common/Helpers.cpp b/src/common/Helpers.cpp index 3dbe86a81..32b36a210 100644 --- a/src/common/Helpers.cpp +++ b/src/common/Helpers.cpp @@ -42,7 +42,16 @@ QString formatBytecount(const uint64_t bytecount) void adjustColumns(QTreeView *tv, int columnCount, int padding) { - for (int i = 0; i != columnCount; ++i) { + adjustColumns(tv, 0, columnCount, padding); +} + +void adjustColumns(QTreeView *tv, int startIndex, int endIndex, int padding) +{ + if (!tv) { + return; + } + + for (int i = startIndex; i < endIndex; ++i) { tv->resizeColumnToContents(i); if (padding > 0) { int width = tv->columnWidth(i); @@ -56,6 +65,18 @@ void adjustColumns(QTreeWidget *tw, int padding) adjustColumns(tw, tw->columnCount(), padding); } +void adjustColumn(QTreeView *tv, int columnIndex, int width) +{ + if (!tv) { + return; + } + + tv->resizeColumnToContents(columnIndex); + if (width >= 0 && tv->columnWidth(columnIndex) > width) { + tv->setColumnWidth(columnIndex, width); + } +} + QTreeWidgetItem *appendRow(QTreeWidget *tw, const QString &str, const QString &str2, const QString &str3, const QString &str4, const QString &str5) { diff --git a/src/common/Helpers.h b/src/common/Helpers.h index 432754e9f..cbda9dbb2 100644 --- a/src/common/Helpers.h +++ b/src/common/Helpers.h @@ -35,7 +35,20 @@ class QMouseEvent; namespace qhelpers { CUTTER_EXPORT QString formatBytecount(const uint64_t bytecount); CUTTER_EXPORT void adjustColumns(QTreeView *tv, int columnCount, int padding); +CUTTER_EXPORT void adjustColumns(QTreeView *tw, int startIndex, int endIndex, int padding); CUTTER_EXPORT void adjustColumns(QTreeWidget *tw, int padding); +/** + * @brief Resize column to contents or speicifed width + * + * Width is only applied if it's non-negative and less than the width of + * specified columns contents + * + * @param tv TreeView which contains the column + * @param columnIndex The index of column to resize + * @param width Width in pixels for resizing the column + */ +CUTTER_EXPORT void adjustColumn(QTreeView *tv, int columnIndex, int width = -1); + CUTTER_EXPORT bool selectFirstItem(QAbstractItemView *itemView); CUTTER_EXPORT QTreeWidgetItem *appendRow(QTreeWidget *tw, const QString &str, const QString &str2 = QString(), diff --git a/src/core/Cutter.cpp b/src/core/Cutter.cpp index 4cccd46c1..a595e4983 100644 --- a/src/core/Cutter.cpp +++ b/src/core/Cutter.cpp @@ -4031,6 +4031,27 @@ QList CutterCore::getAllVTables() return vtableDescs; } +QList CutterCore::getAllBacktraces() +{ + QList backtraces; + + CORE_LOCK(); + RzList *list = rz_core_debug_backtraces(core); + RzListIter *iter; + RzBacktrace *bt; + CutterRzListForeach (list, iter, RzBacktrace, bt) { + BacktraceDescription backtrace; + backtrace.functionName = bt->fcn ? bt->fcn->name : ""; + backtrace.pc = bt->frame ? bt->frame->addr : 0; + backtrace.sp = bt->frame ? bt->frame->sp : 0; + backtrace.frameSize = QString::number(bt->frame ? bt->frame->size : 0); + backtrace.description = bt->desc; + backtraces.append(backtrace); + } + rz_list_free(list); + return backtraces; +} + QList CutterCore::getAllTypes() { QList types; diff --git a/src/core/Cutter.h b/src/core/Cutter.h index c9a96eb5d..7bcc3b2c7 100644 --- a/src/core/Cutter.h +++ b/src/core/Cutter.h @@ -680,6 +680,7 @@ class CUTTER_EXPORT CutterCore : public QObject QList getAllClassesFromFlags(); QList getAllResources(); QList getAllVTables(); + QList getAllBacktraces(); /** * @return all loaded types diff --git a/src/core/CutterDescriptions.h b/src/core/CutterDescriptions.h index 408fb35e5..1d44ae909 100644 --- a/src/core/CutterDescriptions.h +++ b/src/core/CutterDescriptions.h @@ -430,6 +430,15 @@ struct MarkDescription QColor color; }; +struct BacktraceDescription +{ + QString functionName; + RVA pc; + RVA sp; + QString frameSize; + QString description; +}; + Q_DECLARE_METATYPE(FunctionDescription) Q_DECLARE_METATYPE(ImportDescription) Q_DECLARE_METATYPE(ExportDescription) @@ -472,5 +481,6 @@ Q_DECLARE_METATYPE(VariableDescription) Q_DECLARE_METATYPE(BasefindCoreStatusDescription) Q_DECLARE_METATYPE(BasefindResultDescription) Q_DECLARE_METATYPE(MarkDescription) +Q_DECLARE_METATYPE(BacktraceDescription) #endif // DESCRIPTIONS_H diff --git a/src/dialogs/preferences/InterfaceOptionsWidget.cpp b/src/dialogs/preferences/InterfaceOptionsWidget.cpp index 3f1271412..ebe10ea3c 100644 --- a/src/dialogs/preferences/InterfaceOptionsWidget.cpp +++ b/src/dialogs/preferences/InterfaceOptionsWidget.cpp @@ -10,15 +10,32 @@ InterfaceOptionsWidget::InterfaceOptionsWidget(PreferencesDialog *dialog) ui->setupUi(this); setUpQuickFilter(); + setUpFunctions(); } InterfaceOptionsWidget::~InterfaceOptionsWidget() {} +void InterfaceOptionsWidget::setUpFunctions() +{ + bool truncate = Config()->getTruncateFunctionNameCol(); + ui->fcnTruncateCheckBox->setChecked(truncate); + ui->fcnTruncateSpinBox->setEnabled(truncate); + ui->fcnTruncateSpinBox->setValue(Config()->getFunctionNameColWidth()); + + connect(ui->fcnTruncateCheckBox, &QCheckBox::toggled, this, [this](bool checked) { + ui->fcnTruncateSpinBox->setEnabled(checked); + Config()->setTruncateFunctionNameCol(checked); + }); + + connect(ui->fcnTruncateSpinBox, &QSpinBox::valueChanged, Config(), + &Configuration::setFunctionNameColWidth); +} + void InterfaceOptionsWidget::setUpQuickFilter() { ui->quickFilterCheckBox->setChecked(Config()->getShowQuickFilter()); - connect(ui->quickFilterCheckBox, &QCheckBox::toggled, this, - [](bool checked) { Config()->setShowQuickFilter(checked); }); + connect(ui->quickFilterCheckBox, &QCheckBox::toggled, Config(), + &Configuration::setShowQuickFilter); ui->itemCountCheckBox->setChecked(Config()->getItemCountVisible()); connect(ui->itemCountCheckBox, &QCheckBox::toggled, this, [this](bool checked) { @@ -26,8 +43,8 @@ void InterfaceOptionsWidget::setUpQuickFilter() ui->hideItemCountCheckBox->setEnabled(checked); }); - connect(ui->hideItemCountCheckBox, &QCheckBox::toggled, this, - [](bool checked) { Config()->setItemCountAutoHide(checked); }); + connect(ui->hideItemCountCheckBox, &QCheckBox::toggled, Config(), + &Configuration::setItemCountAutoHide); ui->hideItemCountCheckBox->setChecked(Config()->getItemCountAutoHide()); ui->hideItemCountCheckBox->setEnabled(ui->itemCountCheckBox->isChecked()); } diff --git a/src/dialogs/preferences/InterfaceOptionsWidget.h b/src/dialogs/preferences/InterfaceOptionsWidget.h index 7bc77bad0..a485672a7 100644 --- a/src/dialogs/preferences/InterfaceOptionsWidget.h +++ b/src/dialogs/preferences/InterfaceOptionsWidget.h @@ -22,9 +22,13 @@ class InterfaceOptionsWidget : public QDialog explicit InterfaceOptionsWidget(PreferencesDialog *dialog); ~InterfaceOptionsWidget(); +signals: + void interfaceOptionsChanged(); + private: std::unique_ptr ui; + void setUpFunctions(); void setUpQuickFilter(); }; diff --git a/src/dialogs/preferences/InterfaceOptionsWidget.ui b/src/dialogs/preferences/InterfaceOptionsWidget.ui index eabcec0a1..d9171fac0 100644 --- a/src/dialogs/preferences/InterfaceOptionsWidget.ui +++ b/src/dialogs/preferences/InterfaceOptionsWidget.ui @@ -45,44 +45,89 @@ - - - Quick FIlter - - - - 24 - - - - - Show Quick Filter by default - - - true - - - - - - - Show Item Count in Quick Filter - - - true - - - - - - - Hide Item Count on overflow - - - - - + + + Functions + + + + 24 + + + + + + + Sets the default width for function name columns in widgets. In Functions widget the width is only applied if in Horizontal view + + + Limit function name column width to + + + + + + + + 0 + 0 + + + + Sets the default width for function name columns in widgets. In Functions widget the width is only applied if in Horizontal view + + + px + + + 9999 + + + + + + + + + + + Quick FIlter + + + + 24 + + + + + Show Quick Filter by default + + + true + + + + + + + Show Item Count in Quick Filter + + + true + + + + + + + Hide Item Count on overflow + + + + + + diff --git a/src/widgets/BacktraceWidget.cpp b/src/widgets/BacktraceWidget.cpp index 279404f08..be86a3f5a 100644 --- a/src/widgets/BacktraceWidget.cpp +++ b/src/widgets/BacktraceWidget.cpp @@ -1,34 +1,101 @@ #include "BacktraceWidget.h" #include "ui_BacktraceWidget.h" -#include "common/JsonModel.h" -#include "QHeaderView" +#include #include "core/MainWindow.h" +BacktraceModel::BacktraceModel(QObject *parent) : QAbstractListModel(parent) {} + +int BacktraceModel::rowCount(const QModelIndex & /*parent*/) const +{ + return backtraces.size(); +} + +int BacktraceModel::columnCount(const QModelIndex & /*parent*/) const +{ + return Column::Count; +} + +QVariant BacktraceModel::data(const QModelIndex &index, int role) const +{ + + if (!index.isValid() || index.row() >= backtraces.size()) { + return QVariant(); + } + + if (role == Qt::DisplayRole) { + switch (index.column()) { + case Column::Function: + return backtraces[index.row()].functionName; + case Column::PC: + return RzAddressString(backtraces[index.row()].pc); + case Column::SP: + return RzAddressString(backtraces[index.row()].sp); + case Column::FrameSize: + return backtraces[index.row()].frameSize; + case Column::Description: + return backtraces[index.row()].description; + default: + return QVariant(); + } + } + + return QVariant(); +} + +QVariant BacktraceModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + + if (role != Qt::DisplayRole || orientation == Qt::Vertical) { + return QVariant(); + } + + switch (section) { + case Column::Function: + return tr("Function"); + case Column::PC: + return Core()->getRegisterName("PC"); + case Column::SP: + return Core()->getRegisterName("SP"); + case Column::FrameSize: + return tr("Frame Size"); + case Column::Description: + return tr("Description"); + default: + return QVariant(); + } +} + +void BacktraceModel::setBacktraces(const QList &backtraces) +{ + beginResetModel(); + this->backtraces = backtraces; + endResetModel(); +} + BacktraceWidget::BacktraceWidget(MainWindow *main) - : CutterDockWidget(main), ui(new Ui::BacktraceWidget) + : CutterDockWidget(main), + ui(new Ui::BacktraceWidget), + backtraceModel(new BacktraceModel(this)), + backtraceView(new QTreeView(this)) { ui->setupUi(this); - // setup backtrace model - QString PC = Core()->getRegisterName("PC"); - QString SP = Core()->getRegisterName("SP"); - modelBacktrace->setHorizontalHeaderItem(0, new QStandardItem(tr("Function"))); - modelBacktrace->setHorizontalHeaderItem(1, new QStandardItem(SP)); - modelBacktrace->setHorizontalHeaderItem(2, new QStandardItem(PC)); - modelBacktrace->setHorizontalHeaderItem(3, new QStandardItem(tr("Description"))); - modelBacktrace->setHorizontalHeaderItem(4, new QStandardItem(tr("Frame Size"))); - viewBacktrace->setFont(Config()->getFont()); - viewBacktrace->setModel(modelBacktrace); - viewBacktrace->verticalHeader()->setVisible(false); - viewBacktrace->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); - ui->verticalLayout->addWidget(viewBacktrace); + // setup backtrace view + backtraceView->setFont(Config()->getFont()); + backtraceView->setModel(backtraceModel); + backtraceView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); + backtraceView->setIndentation(0); + ui->verticalLayout->addWidget(backtraceView); refreshDeferrer = createRefreshDeferrer([this]() { updateContents(); }); connect(Core(), &CutterCore::refreshAll, this, &BacktraceWidget::updateContents); connect(Core(), &CutterCore::registersChanged, this, &BacktraceWidget::updateContents); connect(Config(), &Configuration::fontsUpdated, this, &BacktraceWidget::fontsUpdatedSlot); + + connect(Config(), &Configuration::functionsOptionsChanged, this, + &BacktraceWidget::adjustFunctionNameCol); } BacktraceWidget::~BacktraceWidget() {} @@ -39,42 +106,20 @@ void BacktraceWidget::updateContents() return; } - setBacktraceGrid(); + const auto &backtraces = Core()->getAllBacktraces(); + backtraceModel->setBacktraces(backtraces); + qhelpers::adjustColumns(backtraceView, 1, 3, 0); + adjustFunctionNameCol(); } -void BacktraceWidget::setBacktraceGrid() +void BacktraceWidget::adjustFunctionNameCol() { - auto core = Core()->lock(); - RzList *list = rz_core_debug_backtraces(core); - int i = 0; - RzListIter *iter; - RzBacktrace *bt; - CutterRzListForeach (list, iter, RzBacktrace, bt) { - QString funcName = bt->fcn ? bt->fcn->name : ""; - QString pc = RzAddressString(bt->frame ? bt->frame->addr : 0); - QString sp = RzAddressString(bt->frame ? bt->frame->sp : 0); - QString frameSize = QString::number(bt->frame ? bt->frame->size : 0); - QString desc = bt->desc; - - modelBacktrace->setItem(i, 0, new QStandardItem(funcName)); - modelBacktrace->setItem(i, 1, new QStandardItem(sp)); - modelBacktrace->setItem(i, 2, new QStandardItem(pc)); - modelBacktrace->setItem(i, 3, new QStandardItem(desc)); - modelBacktrace->setItem(i, 4, new QStandardItem(frameSize)); - ++i; - } - rz_list_free(list); - - // Remove irrelevant old rows - if (modelBacktrace->rowCount() > i) { - modelBacktrace->removeRows(i, modelBacktrace->rowCount() - i); - } - - viewBacktrace->setModel(modelBacktrace); - viewBacktrace->resizeColumnsToContents(); + qhelpers::adjustColumn( + backtraceView, BacktraceModel::Function, + Config()->getTruncateFunctionNameCol() ? Config()->getFunctionNameColWidth() : -1); } void BacktraceWidget::fontsUpdatedSlot() { - viewBacktrace->setFont(Config()->getFont()); + backtraceView->setFont(Config()->getFont()); } diff --git a/src/widgets/BacktraceWidget.h b/src/widgets/BacktraceWidget.h index 0adf327b0..4f5d6e5b5 100644 --- a/src/widgets/BacktraceWidget.h +++ b/src/widgets/BacktraceWidget.h @@ -14,6 +14,24 @@ namespace Ui { class BacktraceWidget; } +class BacktraceModel : public QAbstractListModel +{ +public: + explicit BacktraceModel(QObject *parent = nullptr); + + enum Column { Function = 0, PC, SP, FrameSize, Description, Count }; + + int rowCount(const QModelIndex &parent) const; + int columnCount(const QModelIndex &parent) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + + void setBacktraces(const QList &backtraces); + +private: + QList backtraces; +}; + class BacktraceWidget : public CutterDockWidget { Q_OBJECT @@ -24,12 +42,13 @@ class BacktraceWidget : public CutterDockWidget private slots: void updateContents(); - void setBacktraceGrid(); void fontsUpdatedSlot(); private: std::unique_ptr ui; - QStandardItemModel *modelBacktrace = new QStandardItemModel(1, 5, this); - QTableView *viewBacktrace = new QTableView(this); + BacktraceModel *backtraceModel; + QTreeView *backtraceView; RefreshDeferrer *refreshDeferrer; + + void adjustFunctionNameCol(); }; diff --git a/src/widgets/FunctionsWidget.cpp b/src/widgets/FunctionsWidget.cpp index 388e2bc9a..c42404824 100644 --- a/src/widgets/FunctionsWidget.cpp +++ b/src/widgets/FunctionsWidget.cpp @@ -533,7 +533,7 @@ FunctionsWidget::FunctionsWidget(MainWindow *main) ui->treeView->addActions(itemContextMenu->actions()); // Use a custom context menu on the dock title bar - if (Config()->getFunctionsWidgetLayout() == "horizontal") { + if (!functionModel->isNested()) { actionHorizontal.setChecked(true); } else { actionVertical.setChecked(true); @@ -547,6 +547,27 @@ FunctionsWidget::FunctionsWidget(MainWindow *main) connect(Core(), &CutterCore::refreshAll, this, &FunctionsWidget::refreshTree); connect(Core(), &CutterCore::commentsChanged, this, [this]() { qhelpers::emitColumnChanged(functionModel, FunctionModel::CommentColumn); }); + + // Save the width of function name column so it's preserved when + // switching from horizontal->vertical->horizontal layout + connect(ui->treeView->header(), &QHeaderView::sectionResized, this, + [this](int index, int, int newSize) { + if (index == FunctionModel::NameColumn && !functionModel->isNested()) { + maxFunctionNameWidth = newSize; + } + }); + + auto updateNameColumnWidth = [this] { + bool truncate = Config()->getTruncateFunctionNameCol(); + if (truncate) { + maxFunctionNameWidth = Config()->getFunctionNameColWidth(); + } + + qhelpers::adjustColumn(ui->treeView, FunctionModel::NameColumn, + truncate ? maxFunctionNameWidth : -1); + }; + connect(Config(), &Configuration::functionsOptionsChanged, this, updateNameColumnWidth); + maxFunctionNameWidth = Config()->getFunctionNameColWidth(); } FunctionsWidget::~FunctionsWidget() {} @@ -590,7 +611,12 @@ void FunctionsWidget::refreshTree() ui->quickFilterView->setItemCount(functionProxyModel->rowCount()); // resize offset and size columns - qhelpers::adjustColumns(ui->treeView, 3, 0); + qhelpers::adjustColumns(ui->treeView, 1, 3, 0); + + // resize name column + qhelpers::adjustColumn(ui->treeView, FunctionModel::NameColumn, + Config()->getTruncateFunctionNameCol() ? maxFunctionNameWidth + : -1); }); Core()->getAsyncTaskManager()->start(task); } @@ -646,6 +672,9 @@ void FunctionsWidget::onActionHorizontalToggled(bool enable) Config()->setFunctionsWidgetLayout("horizontal"); functionModel->setNested(false); ui->treeView->setIndentation(8); + + qhelpers::adjustColumn(ui->treeView, FunctionModel::NameColumn, + Config()->getTruncateFunctionNameCol() ? maxFunctionNameWidth : -1); } } @@ -655,6 +684,8 @@ void FunctionsWidget::onActionVerticalToggled(bool enable) Config()->setFunctionsWidgetLayout("vertical"); functionModel->setNested(true); ui->treeView->setIndentation(20); + + qhelpers::adjustColumn(ui->treeView, FunctionModel::NameColumn); } } diff --git a/src/widgets/FunctionsWidget.h b/src/widgets/FunctionsWidget.h index 0654f1762..231e9bc90 100644 --- a/src/widgets/FunctionsWidget.h +++ b/src/widgets/FunctionsWidget.h @@ -127,6 +127,8 @@ private slots: QAction actionUndefine; QAction actionHorizontal; QAction actionVertical; + + int maxFunctionNameWidth; }; #endif // FUNCTIONSWIDGET_H diff --git a/src/widgets/ItemCountLineEdit.cpp b/src/widgets/ItemCountLineEdit.cpp index 4000e7e37..eb72e763d 100644 --- a/src/widgets/ItemCountLineEdit.cpp +++ b/src/widgets/ItemCountLineEdit.cpp @@ -17,9 +17,10 @@ ItemCountLineEdit::ItemCountLineEdit(QWidget *parent) m_itemCountLabel->setStyleSheet("QLabel { background: transparent; }"); connect(this, &QLineEdit::textChanged, this, &ItemCountLineEdit::updateLabelPosition); - connect(Config(), &Configuration::itemCountToggled, this, &ItemCountLineEdit::showItemCount); - connect(Config(), &Configuration::itemCountAutoHideToggled, this, - &ItemCountLineEdit::setItemCountAutoHide); + connect(Config(), &Configuration::itemCountOptionsChanged, this, + [this] { showItemCount(Config()->getItemCountVisible()); }); + connect(Config(), &Configuration::itemCountOptionsChanged, this, + [this] { setItemCountAutoHide(Config()->getItemCountAutoHide()); }); m_itemCountAutoHide = Config()->getItemCountAutoHide(); m_itemCountVisible = Config()->getItemCountVisible(); diff --git a/src/widgets/QuickFilterView.cpp b/src/widgets/QuickFilterView.cpp index 93fdc5547..8b7462c39 100644 --- a/src/widgets/QuickFilterView.cpp +++ b/src/widgets/QuickFilterView.cpp @@ -15,8 +15,8 @@ QuickFilterView::QuickFilterView(QWidget *parent) connect(this, &QuickFilterView::customContextMenuRequested, this, &QuickFilterView::showCustomContextMenu); - connect(Config(), &Configuration::quickFilterToggled, this, [this](bool show) { - if (show) { + connect(Config(), &Configuration::quickFilterOptionsChanged, this, [this]() { + if (Config()->getShowQuickFilter()) { this->show(); } else if (ui->filterLineEdit->text().isEmpty()) { this->hide();