diff --git a/qrenderdoc/Windows/EventBrowser.cpp b/qrenderdoc/Windows/EventBrowser.cpp index dcb4aca4e..d777ad815 100644 --- a/qrenderdoc/Windows/EventBrowser.cpp +++ b/qrenderdoc/Windows/EventBrowser.cpp @@ -2166,8 +2166,17 @@ void EventBrowser::filter_apply() ui->events->clearSelection(); ui->events->setCurrentIndex(QModelIndex()); + ExpansionKeyGen keygen = [](QModelIndex idx, uint) { return idx.data(ROLE_SELECTED_EID).toUInt(); }; + + // update the expansion with the current state. Any rows that were hidden won't have their + // collapsed/expanded state lost by this. We use the EID as a key because it will be the same even + // if the model index changes (e.g. if some events are shown or hidden) + ui->events->updateExpansion(m_EventsExpansion, keygen); + QString parseError = m_FilterModel->ParseExpression(ui->filterExpression->text()); + ui->events->applyExpansion(m_EventsExpansion, keygen); + ui->events->setCurrentIndex(m_FilterModel->mapFromSource(m_Model->GetIndexForEID(curSelEvent))); if(!parseError.isEmpty()) diff --git a/qrenderdoc/Windows/EventBrowser.h b/qrenderdoc/Windows/EventBrowser.h index 5c4759362..cc66dde6e 100644 --- a/qrenderdoc/Windows/EventBrowser.h +++ b/qrenderdoc/Windows/EventBrowser.h @@ -26,6 +26,7 @@ #include #include +#include #include "Code/Interface/QRDInterface.h" namespace Ui @@ -40,6 +41,8 @@ class QTextStream; class FlowLayout; struct EventItemTag; +typedef QSet RDTreeViewExpansionState; + class RichTextViewDelegate; struct EventItemModel; struct EventFilterModel; @@ -137,6 +140,8 @@ private: TimeUnit m_TimeUnit = TimeUnit::Count; + RDTreeViewExpansionState m_EventsExpansion; + QTimer *m_FindHighlight, *m_FilterTimeout; FlowLayout *m_BookmarkStripLayout;