aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Ui
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-10-26 20:11:25 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-10-26 20:11:25 +0000
commit9e2333685c1c6b576d2bee56be3b72363b0cc622 (patch)
treeca5782cfd5bfc23ac89cadc9adb85fef0380c336 /src/plugins/Ui
parent502ede40ec21cbf5d34b6b03b9c6f6e78ee8619d (diff)
downloadqmmp-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/Ui')
-rw-r--r--src/plugins/Ui/qsui/listwidget.cpp18
-rw-r--r--src/plugins/Ui/skinned/listwidget.cpp17
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)
{