File r905619.diff of Package kdepim4

Subject: korganizer: fix performance problems with month switching
From: wstephenson@suse.de
Bug: kde#166771
Patch-upstream: 905619
--- korganizer/views/monthview/monthview.cpp	(revision 905618)
+++ korganizer/views/monthview/monthview.cpp	(revision 905619)
@@ -315,14 +315,38 @@ void MonthView::reloadIncidences()
     if ( ( event = dynamic_cast<Event *>( incidence ) ) ) {
       offset = event->dtStart().daysTo( event->dtEnd() );
     }
-    for ( QDate d = mStartDate.addDays( -offset ); d <= mEndDate; d = d.addDays( 1 ) ) {
-      if ( incidence->recursOn( d, timeSpec ) ) {
-        MonthItem *manager = new IncidenceMonthItem( mScene, incidence, d );
-        mScene->mManagerList << manager;
-        if ( incidenceSelected == incidence ) {
-          // If there was an item selected before, reselect it.
-          mScene->selectItem( manager );
+    
+    KDateTime startDateTime( mStartDate.addDays( - offset ), timeSpec );
+    KDateTime endDateTime( mEndDate, timeSpec );
+
+    DateTimeList dateTimeList;
+
+    if ( incidence->recurs() ) {
+      // Get a list of all dates that the recurring event will happen
+      dateTimeList = incidence->recurrence()->timesInInterval( startDateTime, endDateTime );
+    } else {
+      KDateTime dateToAdd;
+
+      if ( incidence->type() == "Todo" ) {
+        Todo *todo = dynamic_cast<Todo *>( incidence );
+        if ( todo->hasDueDate() ) {
+          dateToAdd = todo->dtDue();
         }
+      } else {
+        dateToAdd = incidence->dtStart();
+      }
+    
+      if ( dateToAdd >= startDateTime && dateToAdd <= endDateTime ) {
+        dateTimeList += dateToAdd;
+      }
+    }
+    DateTimeList::iterator t;
+    for ( t = dateTimeList.begin(); t != dateTimeList.end(); ++t ) {
+      MonthItem *manager = new IncidenceMonthItem( mScene, incidence, t->date() );
+      mScene->mManagerList << manager;
+      if ( incidenceSelected == incidence ) {
+        // If there was an item selected before, reselect it.
+        mScene->selectItem( manager );
       }
     }
   }
Index: korganizer/views/monthview/monthview.cpp
===================================================================
openSUSE Build Service is sponsored by