diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-10-26 20:11:25 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-10-26 20:11:25 +0000 |
| commit | 9e2333685c1c6b576d2bee56be3b72363b0cc622 (patch) | |
| tree | ca5782cfd5bfc23ac89cadc9adb85fef0380c336 /src/plugins | |
| parent | 502ede40ec21cbf5d34b6b03b9c6f6e78ee8619d (diff) | |
| download | qmmp-9e2333685c1c6b576d2bee56be3b72363b0cc622.tar.gz qmmp-9e2333685c1c6b576d2bee56be3b72363b0cc622.tar.bz2 qmmp-9e2333685c1c6b576d2bee56be3b72363b0cc622.zip | |
fixed regression
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8403 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/Ui/qsui/listwidget.cpp | 18 | ||||
| -rw-r--r-- | src/plugins/Ui/skinned/listwidget.cpp | 17 |
2 files changed, 27 insertions, 8 deletions
diff --git a/src/plugins/Ui/qsui/listwidget.cpp b/src/plugins/Ui/qsui/listwidget.cpp index 524563fb1..ac28992da 100644 --- a/src/plugins/Ui/qsui/listwidget.cpp +++ b/src/plugins/Ui/qsui/listwidget.cpp @@ -406,7 +406,14 @@ void ListWidget::updateList(int flags) } else if(m_first + m_row_count >= count) { - m_first = qMax(0, count - m_row_count); + //try to restore first visible first + if(!m_filterMode && (m_count > 0) && + (m_count != m_model->count()) && m_firstItem) + { + restoreFirstVisible(); + } + if(m_first + m_row_count >= count) + m_first = qMax(0, count - m_row_count); m_scrollBar->setMaximum(count - m_row_count); m_scrollBar->setValue(m_first); emit positionChanged(m_first, m_first); @@ -673,14 +680,16 @@ bool ListWidget::updateRowCount() void ListWidget::restoreFirstVisible() { - if(m_first >= m_model->count() || m_firstItem == m_model->item(m_first)) + if(m_first < m_model->count() && m_firstItem == m_model->item(m_first)) return; int delta = m_model->count() - m_count; + //try to find and restore first visible index if(delta > 0) { - for(int i = m_first + 1; i <= qMin(m_model->count() - 1, m_first + delta); ++i) + int from = qMin(m_model->count() - 1, m_first + 1); + for(int i = from; i <= qMin(m_model->count() - 1, m_first + delta); ++i) { if(m_model->item(i) == m_firstItem) { @@ -691,7 +700,8 @@ void ListWidget::restoreFirstVisible() } else { - for(int i = m_first - 1; i >= qMax(0, m_first + delta); --i) + int from = qMin(m_model->count() - 1, m_first - 1); + for(int i = from; i >= qMax(0, m_first + delta); --i) { if(m_model->item(i) == m_firstItem) { diff --git a/src/plugins/Ui/skinned/listwidget.cpp b/src/plugins/Ui/skinned/listwidget.cpp index 2a469e12d..264273568 100644 --- a/src/plugins/Ui/skinned/listwidget.cpp +++ b/src/plugins/Ui/skinned/listwidget.cpp @@ -320,7 +320,13 @@ void ListWidget::updateList(int flags) } else if(m_first + m_row_count >= m_model->count()) { - m_first = qMax(0, m_model->count() - m_row_count); + //try to restore first visible first + if((m_count > 0) && (m_count != m_model->count()) && m_firstItem) + { + restoreFirstVisible(); + } + if(m_first + m_row_count >= m_model->count()) + m_first = qMax(0, m_model->count() - m_row_count); emit positionChanged(m_first, m_first); } else if((m_count > 0) && (m_count != m_model->count()) && @@ -580,14 +586,16 @@ bool ListWidget::updateRowCount() void ListWidget::restoreFirstVisible() { - if(m_first >= m_model->count() || m_firstItem == m_model->item(m_first)) + if(m_first < m_model->count() && m_firstItem == m_model->item(m_first)) return; int delta = m_model->count() - m_count; + //try to find and restore first visible index if(delta > 0) { - for(int i = m_first + 1; i <= qMin(m_model->count() - 1, m_first + delta); ++i) + int from = qMin(m_model->count() - 1, m_first + 1); + for(int i = from; i <= qMin(m_model->count() - 1, m_first + delta); ++i) { if(m_model->item(i) == m_firstItem) { @@ -598,7 +606,8 @@ void ListWidget::restoreFirstVisible() } else { - for(int i = m_first - 1; i >= qMax(0, m_first + delta); --i) + int from = qMin(m_model->count() - 1, m_first - 1); + for(int i = from; i >= qMax(0, m_first + delta); --i) { if(m_model->item(i) == m_firstItem) { |
