diff --git a/addons/symbolviewer/plugin_katesymbolviewer.h b/addons/symbolviewer/plugin_katesymbolviewer.h --- a/addons/symbolviewer/plugin_katesymbolviewer.h +++ b/addons/symbolviewer/plugin_katesymbolviewer.h @@ -128,6 +128,7 @@ QTimer m_updateTimer; QTimer m_currItemTimer; + int m_oldCursorLine; void updatePixmapScroll(); diff --git a/addons/symbolviewer/plugin_katesymbolviewer.cpp b/addons/symbolviewer/plugin_katesymbolviewer.cpp --- a/addons/symbolviewer/plugin_katesymbolviewer.cpp +++ b/addons/symbolviewer/plugin_katesymbolviewer.cpp @@ -177,9 +177,6 @@ void KatePluginSymbolViewerView::slotRefreshSymbol() { - if (!m_symbols) - return; - parseSymbols(); } @@ -214,11 +211,16 @@ void KatePluginSymbolViewerView::slotDocEdited() { + m_currItemTimer.stop(); // Avoid unneeded update m_updateTimer.start(500); } void KatePluginSymbolViewerView::cursorPositionChanged() { + if (m_updateTimer.isActive()) { + // No need for update, will come anyway + return; + } m_currItemTimer.start(100); } @@ -235,7 +237,13 @@ if (!doc) { return; } + int currLine = editView->cursorPositionVirtual().line(); + if (currLine == m_oldCursorLine) { + // Nothing to do + return; + } + m_oldCursorLine = currLine; int newItemLine = 0; QTreeWidgetItem *newItem = nullptr; @@ -291,6 +299,9 @@ void KatePluginSymbolViewerView::parseSymbols(void) { + if (!m_symbols) + return; + m_symbols->clear(); // Qt docu recommends to populate view with disabled sorting // https://doc.qt.io/qt-5/qtreeview.html#sortingEnabled-prop @@ -335,6 +346,7 @@ else new QTreeWidgetItem(m_symbols, QStringList(i18n("Sorry. Language not supported yet") ) ); + m_oldCursorLine = -1; updateCurrTreeItem(); if (m_sort->isChecked()) m_symbols->sortItems(0, Qt::AscendingOrder);