[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdepim/korganizer
From:       Martin Koller <m.koller () surfeu ! at>
Date:       2007-10-28 17:46:25
Message-ID: 1193593585.666941.6271.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 730393 by mkoller:

forwardport of fix for #101696
Break recursive relation to avoid endless loop


 M  +14 -1     kotodoview.cpp  


--- trunk/KDE/kdepim/korganizer/kotodoview.cpp #730392:730393
@@ -813,6 +813,9 @@
     // Use dynamic_cast, because in the future the related item might also be an event
     Todo *relatedTodo = dynamic_cast<Todo *>(incidence);
 
+    // just make sure we know we have this item already to avoid endless recursion (Bug 101696)
+    mTodoMap.insert(todo,0);
+
 //    kDebug(5850) <<"  has Related";
     QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
     itemIterator = mTodoMap.find(relatedTodo);
@@ -822,7 +825,17 @@
     }
     // isn't this pretty stupid? We give one Todo  to the KOTodoViewItem
     // and one into the map. Sure finding is more easy but why? -zecke
-    KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this);
+    KOTodoViewItem *todoItem;
+
+    // in case we found a related parent, which has no KOTodoViewItem yet, this must
+    // be the case where 2 items refer to each other, therefore simply create item as root item
+    if ( *itemIterator == 0 ) {
+      todo->setRelatedTo(0);  // break the recursion, else we will have troubles later
+      return insertTodoItem(todo);
+    }
+    else
+      todoItem = new KOTodoViewItem(*itemIterator, todo, this);
+
     return mTodoMap.insert(todo,todoItem);
   } else {
 //    kDebug(5850) <<"  no Related";
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic