From 424e2e68f9a3f556ad2d06e2fbceac0d48c060be Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Tue, 7 Jul 2009 16:42:20 +0200
Subject: ItemViews: _q_fetchMore now uses a timer instead of invokeMethod

---
 src/gui/itemviews/qabstractitemview.cpp | 11 +++++++----
 src/gui/itemviews/qabstractitemview.h   |  1 -
 src/gui/itemviews/qabstractitemview_p.h |  3 ++-
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp
index cefe8a5..dd84304 100644
--- a/src/gui/itemviews/qabstractitemview.cpp
+++ b/src/gui/itemviews/qabstractitemview.cpp
@@ -2200,6 +2200,8 @@ void QAbstractItemView::resizeEvent(QResizeEvent *event)
 void QAbstractItemView::timerEvent(QTimerEvent *event)
 {
     Q_D(QAbstractItemView);
+    if (event->timerId() == d->fetchMoreTimer.timerId())
+        d->fetchMore();
     if (event->timerId() == d->autoScrollTimer.timerId())
         doAutoScroll();
     else if (event->timerId() == d->updateTimer.timerId())
@@ -2415,7 +2417,7 @@ void QAbstractItemView::updateEditorGeometries()
 void QAbstractItemView::updateGeometries()
 {
     updateEditorGeometries();
-    QMetaObject::invokeMethod(this, "_q_fetchMore", Qt::QueuedConnection);
+    d_func()->fetchMoreTimer.start(0, this); //fetch more later
 }
 
 /*!
@@ -2960,7 +2962,7 @@ void QAbstractItemView::dataChanged(const QModelIndex &topLeft, const QModelInde
 void QAbstractItemView::rowsInserted(const QModelIndex &, int, int)
 {
     if (!isVisible())
-        QMetaObject::invokeMethod(this, "_q_fetchMore", Qt::QueuedConnection);
+        d_func()->fetchMoreTimer.start(0, this); //fetch more later
     else
         updateEditorGeometries();
 }
@@ -3183,7 +3185,7 @@ void QAbstractItemView::currentChanged(const QModelIndex &current, const QModelI
             update(current);
             edit(current, CurrentChanged, 0);
             if (current.row() == (d->model->rowCount(d->root) - 1))
-                d->_q_fetchMore();
+                d->fetchMore();
         } else {
             d->shouldScrollToCurrentOnShow = d->autoScroll;
         }
@@ -3604,8 +3606,9 @@ QAbstractItemViewPrivate::contiguousSelectionCommand(const QModelIndex &index,
     }
 }
 
-void QAbstractItemViewPrivate::_q_fetchMore()
+void QAbstractItemViewPrivate::fetchMore()
 {
+    fetchMoreTimer.stop();
     if (!model->canFetchMore(root))
         return;
     int last = model->rowCount(root) - 1;
diff --git a/src/gui/itemviews/qabstractitemview.h b/src/gui/itemviews/qabstractitemview.h
index f98dd16..da6f0ea 100644
--- a/src/gui/itemviews/qabstractitemview.h
+++ b/src/gui/itemviews/qabstractitemview.h
@@ -353,7 +353,6 @@ private:
     Q_PRIVATE_SLOT(d_func(), void _q_rowsRemoved(const QModelIndex&, int, int))
     Q_PRIVATE_SLOT(d_func(), void _q_modelDestroyed())
     Q_PRIVATE_SLOT(d_func(), void _q_layoutChanged())
-    Q_PRIVATE_SLOT(d_func(), void _q_fetchMore())
 
     friend class QTreeViewPrivate; // needed to compile with MSVC
     friend class QAccessibleItemRow;
diff --git a/src/gui/itemviews/qabstractitemview_p.h b/src/gui/itemviews/qabstractitemview_p.h
index 026912a..2950bcd 100644
--- a/src/gui/itemviews/qabstractitemview_p.h
+++ b/src/gui/itemviews/qabstractitemview_p.h
@@ -116,7 +116,7 @@ public:
     virtual void _q_modelDestroyed();
     virtual void _q_layoutChanged();
     
-    void _q_fetchMore();
+    void fetchMore();
 
     bool shouldEdit(QAbstractItemView::EditTrigger trigger, const QModelIndex &index) const;
     bool shouldForwardEvent(QAbstractItemView::EditTrigger trigger, const QEvent *event) const;
@@ -388,6 +388,7 @@ public:
 
 private:
     mutable QBasicTimer delayedLayout;
+    mutable QBasicTimer fetchMoreTimer;
 };
 
 QT_BEGIN_INCLUDE_NAMESPACE
-- 
cgit v0.12