]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistview.cpp
Merge remote-tracking branch 'origin/KDE/4.9'
[dolphin.git] / src / kitemviews / kitemlistview.cpp
index 0689b0758289ebc33188b94adf03014f3ecb2691..6a68ae79899e18c1f3127f992ab8b9276221b3ff 100644 (file)
@@ -23,6 +23,7 @@
 #include "kitemlistview.h"
 
 #include <KDebug>
+#include "kitemlistcontainer.h"
 #include "kitemlistcontroller.h"
 #include "kitemlistheader.h"
 #include "kitemlistselectionmanager.h"
@@ -54,13 +55,20 @@ namespace {
     const int RepeatingAutoScrollDelay = 1000 / 60;
 }
 
-QAccessibleInterface* accessibleViewFactory(const QString &key, QObject *object)
+#ifndef QT_NO_ACCESSIBILITY
+QAccessibleInterface* accessibleInterfaceFactory(const QString &key, QObject *object)
 {
     Q_UNUSED(key)
-    if (KItemListView *view = qobject_cast<KItemListView*>(object))
+
+    if (KItemListContainer* container = qobject_cast<KItemListContainer*>(object)) {
+        return new KItemListContainerAccessible(container);
+    } else if (KItemListView* view = qobject_cast<KItemListView*>(object)) {
         return new KItemListViewAccessible(view);
+    }
+
     return 0;
 }
+#endif
 
 KItemListView::KItemListView(QGraphicsWidget* parent) :
     QGraphicsWidget(parent),
@@ -120,9 +128,11 @@ KItemListView::KItemListView(QGraphicsWidget* parent) :
     m_headerWidget->setVisible(false);
 
     m_header = new KItemListHeader(this);
+
 #ifndef QT_NO_ACCESSIBILITY
-    QAccessible::installFactory(accessibleViewFactory);
+    QAccessible::installFactory(accessibleInterfaceFactory);
 #endif
+
 }
 
 KItemListView::~KItemListView()
@@ -138,9 +148,6 @@ KItemListView::~KItemListView()
 
     delete m_sizeHintResolver;
     m_sizeHintResolver = 0;
-#ifndef QT_NO_ACCESSIBILITY
-    QAccessible::removeFactory(accessibleViewFactory);
-#endif
 }
 
 void KItemListView::setScrollOffset(qreal offset)
@@ -1205,6 +1212,7 @@ void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges,
             doLayout(NoAnimation);
         }
     }
+    QAccessible::updateAccessibility(this, 0, QAccessible::TableModelChanged);
 }
 
 void KItemListView::slotGroupedSortingChanged(bool current)
@@ -1430,9 +1438,9 @@ void KItemListView::triggerAutoScrolling()
     const qreal newScrollOffset = qMin(scrollOffset() + m_autoScrollIncrement, maxVisibleOffset);
     setScrollOffset(newScrollOffset);
 
-   // Trigger the autoscroll timer which will periodically call
-   // triggerAutoScrolling()
-   m_autoScrollTimer->start(RepeatingAutoScrollDelay);
+    // Trigger the autoscroll timer which will periodically call
+    // triggerAutoScrolling()
+    m_autoScrollTimer->start(RepeatingAutoScrollDelay);
 }
 
 void KItemListView::slotGeometryOfGroupHeaderParentChanged()
@@ -1446,12 +1454,16 @@ void KItemListView::slotGeometryOfGroupHeaderParentChanged()
 
 void KItemListView::slotRoleEditingCanceled(int index, const QByteArray& role, const QVariant& value)
 {
+    disconnectRoleEditingSignals(index);
+
     emit roleEditingCanceled(index, role, value);
     m_editingRole = false;
 }
 
 void KItemListView::slotRoleEditingFinished(int index, const QByteArray& role, const QVariant& value)
 {
+    disconnectRoleEditingSignals(index);
+
     emit roleEditingFinished(index, role, value);
     m_editingRole = false;
 }
@@ -2522,6 +2534,17 @@ bool KItemListView::hasSiblingSuccessor(int index) const
     return hasSuccessor;
 }
 
+void KItemListView::disconnectRoleEditingSignals(int index)
+{
+    KItemListWidget* widget = m_visibleItems.value(index);
+    if (!widget) {
+        return;
+    }
+
+    widget->disconnect(SIGNAL(roleEditingCanceled(int,QByteArray,QVariant)), this);
+    widget->disconnect(SIGNAL(roleEditingFinished(int,QByteArray,QVariant)), this);
+}
+
 int KItemListView::calculateAutoScrollingIncrement(int pos, int range, int oldInc)
 {
     int inc = 0;