From b40645d109f976df2c54ecaf3851f3d90138bb8b Mon Sep 17 00:00:00 2001
From: tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>
Date: Wed, 18 Aug 2010 18:48:46 +0000
Subject: Fixed a number of issues, including * event modification and view
 refresh when GroupWare communication is disabled * Deletion (delay) of first
 recurring event

git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1165287 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
---
 korganizer/calendarview.cpp     | 13 ++++++++++++-
 korganizer/incidencechanger.cpp | 13 +++++++------
 libkcal/resourcecached.cpp      |  4 ++++
 3 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 340c6dab7..ae4a5b6e2 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -832,6 +832,7 @@ void CalendarView::updateView()
 void CalendarView::updateUnmanagedViews()
 {
   mDateNavigator->updateDayMatrix();
+  updateView();
 }
 
 int CalendarView::msgItemDelete( Incidence *incidence )
@@ -2062,7 +2063,15 @@ void CalendarView::deleteIncidence(Incidence *incidence, bool force)
           Incidence *oldIncidence = incidence->clone();
           if (incidence->recurrence()->startDate() == itemDate) {
               // Moving the first in a series...don't bother with the nonstandard exclusion list
-              incidence->recurrence()->setStartDateTime( incidence->recurrence()->getNextDateTime( incidence->recurrence()->startDateTime() ) );
+              Recurrence *recur = incidence->recurrence();
+              Event* thisevent = static_cast<Event*>(incidence);
+              QDateTime newEnd;
+              QDateTime newRecurEnd;
+              newRecurEnd = recur->endDateTime();
+              newEnd.setTime_t( incidence->dtEnd().toTime_t() + ( recur->getNextDateTime( recur->startDateTime() ).toTime_t() - recur->startDateTime().toTime_t()  ) );
+              thisevent->setDtEnd( newEnd  );
+              incidence->setDtStart( recur->getNextDateTime( recur->startDateTime() ) );
+              recur->setEndDateTime(newRecurEnd);
           }
           else {
               // No choice but to use the exclusion list
@@ -2094,6 +2103,8 @@ void CalendarView::deleteIncidence(Incidence *incidence, bool force)
       processIncidenceSelection( 0 );
     }
   }
+
+  updateView();
 }
 
 void CalendarView::connectIncidenceEditor( KOIncidenceEditor *editor )
diff --git a/korganizer/incidencechanger.cpp b/korganizer/incidencechanger.cpp
index 92332578c..46be25ba7 100644
--- a/korganizer/incidencechanger.cpp
+++ b/korganizer/incidencechanger.cpp
@@ -118,8 +118,8 @@ kdDebug(5850)<<"IncidenceChanger::deleteIncidence for incidence \""<<incidence->
           scheduler.performTransaction( tmp, Scheduler::Reply );
       }
     }
-    emit incidenceDeleted( incidence );
   }
+  emit incidenceDeleted( incidence );
   return doDelete;
 }
 
@@ -298,14 +298,15 @@ kdDebug(5850)<<"IncidenceChanger::changeIncidence for incidence \""<<newinc->sum
                                                   KCal::Scheduler::Request,
                                                   newinc, false, statusChanged ) ) {
       // Accept the event changes
-      if ( action<0 ) {
-        emit incidenceChanged( oldinc, newinc );
-      } else {
-        emit incidenceChanged( oldinc, newinc, action );
-      }
       revert = false;
     }
 
+    if ( action<0 ) {
+      emit incidenceChanged( oldinc, newinc );
+    } else {
+      emit incidenceChanged( oldinc, newinc, action );
+    }
+
     if ( revert ) {
       assignIncidence( newinc, oldinc );
       return false;
diff --git a/libkcal/resourcecached.cpp b/libkcal/resourcecached.cpp
index 22fa79bb9..2fecbb50f 100644
--- a/libkcal/resourcecached.cpp
+++ b/libkcal/resourcecached.cpp
@@ -19,6 +19,10 @@
     Boston, MA 02110-1301, USA.
 */
 
+// TODO [FIXME] IMPORTANT
+// If a cached resource initiates a reload while an event editor is active, or an event is locked for editing,
+// a big fat crash will ensue.  The reload subroutine must ABORT if ANY korganizer events are locked for editing!!!
+
 #include <tqdatastream.h>
 #include <tqdatetime.h>
 #include <tqfile.h>
-- 
cgit v1.2.1