From b35cd0e8350babc091667a5070f8ff6e359e5750 Mon Sep 17 00:00:00 2001 From: tpearson Date: Fri, 3 Sep 2010 02:40:06 +0000 Subject: [PATCH] Hacked in a temporary fix for three GroupWare popups showing up when a single instance of a recurring meeting is resized in the agenda view git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1171222 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- korganizer/incidencechanger.cpp | 19 +- korganizer/incidencechanger.h | 5 + .../korganizer/incidencechangerbase.h | 6 + korganizer/koagenda.cpp | 9 +- korganizer/kogroupware.cpp | 197 +++++++++--------- korganizer/kogroupware.h | 3 +- 6 files changed, 140 insertions(+), 99 deletions(-) diff --git a/korganizer/incidencechanger.cpp b/korganizer/incidencechanger.cpp index 1c41c5cd..f0dcb7b1 100644 --- a/korganizer/incidencechanger.cpp +++ b/korganizer/incidencechanger.cpp @@ -328,6 +328,14 @@ bool IncidenceChanger::myAttendeeStatusChanged( Incidence *oldInc, Incidence *ne bool IncidenceChanger::changeIncidence( Incidence *oldinc, Incidence *newinc, KOGlobals::WhatChanged action, TQWidget *parent ) +{ + return changeIncidence( oldinc, newinc, action, parent, 0 ); +} + +bool IncidenceChanger::changeIncidence( Incidence *oldinc, Incidence *newinc, + KOGlobals::WhatChanged action, + TQWidget *parent, + int dontAskForGroupware ) { kdDebug(5850)<<"IncidenceChanger::changeIncidence for incidence \""<summary()<<"\" ( old one was \""<summary()<<"\")"<sum success = KOGroupware::instance()->sendICalMessage( parent, KCal::Scheduler::Request, - newinc, KOGlobals::INCIDENCEEDITED, attendeeStatusChanged ); + newinc, KOGlobals::INCIDENCEEDITED, attendeeStatusChanged, dontAskForGroupware ); } if ( success ) { @@ -365,6 +373,13 @@ kdDebug(5850)<<"IncidenceChanger::changeIncidence for incidence \""<sum bool IncidenceChanger::addIncidence( Incidence *incidence, ResourceCalendar *res, const TQString &subRes, TQWidget *parent ) +{ + return addIncidence( incidence, res, subRes, parent, 0 ); +} + +bool IncidenceChanger::addIncidence( Incidence *incidence, + ResourceCalendar *res, const TQString &subRes, + TQWidget *parent, int dontAskForGroupware ) { CalendarResources *stdcal = dynamic_cast( mCalendar ); if( stdcal && !stdcal->hasCalendarResources() ) { @@ -440,7 +455,7 @@ bool IncidenceChanger::addIncidence( Incidence *incidence, if ( !KOGroupware::instance()->sendICalMessage( parent, KCal::Scheduler::Request, - incidence, KOGlobals::INCIDENCEADDED, false ) ) { + incidence, KOGlobals::INCIDENCEADDED, false, dontAskForGroupware ) ) { KMessageBox::sorry( parent, i18n( "Attempt to send the scheduling message failed. " diff --git a/korganizer/incidencechanger.h b/korganizer/incidencechanger.h index afa55064..5e559509 100644 --- a/korganizer/incidencechanger.h +++ b/korganizer/incidencechanger.h @@ -52,9 +52,14 @@ class IncidenceChanger : public KOrg::IncidenceChangerBase bool addIncidence( Incidence *incidence, ResourceCalendar *res, const TQString &subRes, TQWidget *parent ); + bool addIncidence( Incidence *incidence, + ResourceCalendar *res, const TQString &subRes, + TQWidget *parent, int dontAskForGroupware ); bool changeIncidence( Incidence *oldinc, Incidence *newinc, KOGlobals::WhatChanged, TQWidget *parent ); + bool changeIncidence( Incidence *oldinc, Incidence *newinc, + KOGlobals::WhatChanged, TQWidget *parent, int dontAskForGroupware ); bool deleteIncidence( Incidence *incidence, TQWidget *parent ); diff --git a/korganizer/interfaces/korganizer/incidencechangerbase.h b/korganizer/interfaces/korganizer/incidencechangerbase.h index e7c13305..ec0288aa 100644 --- a/korganizer/interfaces/korganizer/incidencechangerbase.h +++ b/korganizer/interfaces/korganizer/incidencechangerbase.h @@ -57,9 +57,15 @@ public: virtual bool addIncidence( Incidence *incidence, ResourceCalendar *res, const TQString &subRes, TQWidget *parent ) = 0; + virtual bool addIncidence( Incidence *incidence, + ResourceCalendar *res, const TQString &subRes, + TQWidget *parent, int dontAskForGroupware) = 0; virtual bool changeIncidence( Incidence *oldinc, Incidence *newinc, KOGlobals::WhatChanged, TQWidget *parent ) = 0; + virtual bool changeIncidence( Incidence *oldinc, Incidence *newinc, + KOGlobals::WhatChanged, TQWidget *parent, int dontAskForGroupware ) = 0; + virtual bool deleteIncidence( Incidence *incidence, TQWidget *parent ) = 0; virtual bool cutIncidences( const Incidence::List &incidences, TQWidget *parent ) = 0; diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp index 8329d161..bc456a78 100644 --- a/korganizer/koagenda.cpp +++ b/korganizer/koagenda.cpp @@ -1109,6 +1109,10 @@ void KOAgenda::endItemAction() if ( chosenOption == KOGlobals::ONLY_THIS_ONE || chosenOption == KOGlobals::ONLY_FUTURE ) { + // FIXME Prompt for this...it is quite possible that the user does not want to broadcast the change + // That prompting dialog will require the ability to suppress/override the mChanger->endChange GroupWare communication though. + int autoAnswerGroupWare = 1; // Send all possible GroupWare messages without prompting + // Store modification information in case it is needed to recreate the changes with a new actionitem... int mai_xl = mActionItem->cellXLeft(); int mai_xr = mActionItem->cellXRight(); @@ -1116,15 +1120,16 @@ void KOAgenda::endItemAction() int mai_yb = mActionItem->cellYBottom(); multiModify = true; + emit startMultiModify( i18n("Dissociate event from recurrence") ); enableAgendaUpdate( false ); - mChanger->addIncidence( incToChange, mResPair.first, mResPair.second, this ); + mChanger->addIncidence( incToChange, mResPair.first, mResPair.second, this, autoAnswerGroupWare ); enableAgendaUpdate( true ); KOGlobals::WhatChanged wc = chosenOption == KOGlobals::ONLY_THIS_ONE ? KOGlobals::RECURRENCE_MODIFIED_ONE_ONLY : KOGlobals::RECURRENCE_MODIFIED_ALL_FUTURE; - mChanger->changeIncidence( oldIncSaved, inc, wc, this ); + mChanger->changeIncidence( oldIncSaved, inc, wc, this, autoAnswerGroupWare ); // mActionItem does not exist any more, seeing as we just got done deleting it // (by deleting/replacing the original incidence it was created from through diff --git a/korganizer/kogroupware.cpp b/korganizer/kogroupware.cpp index 0edcdc9c..7b799eed 100644 --- a/korganizer/kogroupware.cpp +++ b/korganizer/kogroupware.cpp @@ -242,7 +242,8 @@ bool KOGroupware::sendICalMessage( TQWidget* parent, KCal::Scheduler::Method method, Incidence* incidence, KOGlobals::HowChanged action, - bool attendeeStatusChanged ) + bool attendeeStatusChanged, + int dontAskForGroupware ) { // If there are no attendees, don't bother if( incidence->attendees().isEmpty() ) @@ -264,108 +265,116 @@ bool KOGroupware::sendICalMessage( TQWidget* parent, * insists on applying them. */ - if ( isOrganizer ) { - /* We are the organizer. If there is more than one attendee, or if there is - * only one, and it's not the same as the organizer, ask the user to send - * mail. */ - if ( incidence->attendees().count() > 1 - || incidence->attendees().first()->email() != incidence->organizer().email() ) { - - TQString txt; - switch( action ) { - case KOGlobals::INCIDENCEEDITED: - txt = i18n( "You changed the invitation \"%1\".\n" - "Do you want to email the attendees an update message?" ). - arg( incidence->summary() ); - break; - case KOGlobals::INCIDENCEDELETED: - Q_ASSERT( incidence->type() == "Event" || incidence->type() == "Todo" ); - if ( incidence->type() == "Event" ) { - txt = i18n( "You removed the invitation \"%1\".\n" - "Do you want to email the attendees that the event is canceled?" ). - arg( incidence->summary() ); - } else if ( incidence->type() == "Todo" ) { - txt = i18n( "You removed the invitation \"%1\".\n" - "Do you want to email the attendees that the todo is canceled?" ). - arg( incidence->summary() ); - } - break; - case KOGlobals::INCIDENCEADDED: - if ( incidence->type() == "Event" ) { - txt = i18n( "The event \"%1\" includes other people.\n" - "Do you want to email the invitation to the attendees?" ). - arg( incidence->summary() ); - } else if ( incidence->type() == "Todo" ) { - txt = i18n( "The todo \"%1\" includes other people.\n" - "Do you want to email the invitation to the attendees?" ). + if ( dontAskForGroupware == 1 ) { + rc = KMessageBox::Yes; + } + else if ( dontAskForGroupware == 2 ) { + rc = KMessageBox::No; + } + else { + if ( isOrganizer ) { + /* We are the organizer. If there is more than one attendee, or if there is + * only one, and it's not the same as the organizer, ask the user to send + * mail. */ + if ( incidence->attendees().count() > 1 + || incidence->attendees().first()->email() != incidence->organizer().email() ) { + + TQString txt; + switch( action ) { + case KOGlobals::INCIDENCEEDITED: + txt = i18n( "You changed the invitation \"%1\".\n" + "Do you want to email the attendees an update message?" ). arg( incidence->summary() ); - } else { - txt = i18n( "This incidence includes other people. " - "Should an email be sent to the attendees?" ); + break; + case KOGlobals::INCIDENCEDELETED: + Q_ASSERT( incidence->type() == "Event" || incidence->type() == "Todo" ); + if ( incidence->type() == "Event" ) { + txt = i18n( "You removed the invitation \"%1\".\n" + "Do you want to email the attendees that the event is canceled?" ). + arg( incidence->summary() ); + } else if ( incidence->type() == "Todo" ) { + txt = i18n( "You removed the invitation \"%1\".\n" + "Do you want to email the attendees that the todo is canceled?" ). + arg( incidence->summary() ); + } + break; + case KOGlobals::INCIDENCEADDED: + if ( incidence->type() == "Event" ) { + txt = i18n( "The event \"%1\" includes other people.\n" + "Do you want to email the invitation to the attendees?" ). + arg( incidence->summary() ); + } else if ( incidence->type() == "Todo" ) { + txt = i18n( "The todo \"%1\" includes other people.\n" + "Do you want to email the invitation to the attendees?" ). + arg( incidence->summary() ); + } else { + txt = i18n( "This incidence includes other people. " + "Should an email be sent to the attendees?" ); + } + break; + default: + kdError() << "Unsupported HowChanged action" << int( action ) << endl; + break; } - break; - default: - kdError() << "Unsupported HowChanged action" << int( action ) << endl; - break; - } - rc = KMessageBox::questionYesNo( - parent, txt, i18n( "Group Scheduling Email" ), - KGuiItem( i18n( "Send Email" ) ), KGuiItem( i18n( "Do Not Send" ) ) ); - } else { - return true; - } - } else if( incidence->type() == "Todo" ) { - if( method == Scheduler::Request ) - // This is an update to be sent to the organizer - method = Scheduler::Reply; - - // Ask if the user wants to tell the organizer about the current status - TQString txt = i18n( "Do you want to send a status update to the " - "organizer of this task?"); - rc = KMessageBox::questionYesNo( parent, txt, TQString::null, i18n("Send Update"), i18n("Do Not Send") ); - } else if( incidence->type() == "Event" ) { - TQString txt; - if ( attendeeStatusChanged && method == Scheduler::Request ) { - txt = i18n( "Your status as an attendee of this event changed. " - "Do you want to send a status update to the event organizer?" ); - method = Scheduler::Reply; + rc = KMessageBox::questionYesNo( + parent, txt, i18n( "Group Scheduling Email" ), + KGuiItem( i18n( "Send Email" ) ), KGuiItem( i18n( "Do Not Send" ) ) ); + } else { + return true; + } + } else if( incidence->type() == "Todo" ) { + if( method == Scheduler::Request ) + // This is an update to be sent to the organizer + method = Scheduler::Reply; + + // Ask if the user wants to tell the organizer about the current status + TQString txt = i18n( "Do you want to send a status update to the " + "organizer of this task?"); rc = KMessageBox::questionYesNo( parent, txt, TQString::null, i18n("Send Update"), i18n("Do Not Send") ); - } else { - if( action == KOGlobals::INCIDENCEDELETED ) { - const TQStringList myEmails = KOPrefs::instance()->allEmails(); - bool askConfirmation = false; - for ( TQStringList::ConstIterator it = myEmails.begin(); it != myEmails.end(); ++it ) { - TQString email = *it; - Attendee *me = incidence->attendeeByMail(email); - if (me && (me->status()==KCal::Attendee::Accepted || me->status()==KCal::Attendee::Delegated)) { - askConfirmation = true; - break; + } else if( incidence->type() == "Event" ) { + TQString txt; + if ( attendeeStatusChanged && method == Scheduler::Request ) { + txt = i18n( "Your status as an attendee of this event changed. " + "Do you want to send a status update to the event organizer?" ); + method = Scheduler::Reply; + rc = KMessageBox::questionYesNo( parent, txt, TQString::null, i18n("Send Update"), i18n("Do Not Send") ); + } else { + if( action == KOGlobals::INCIDENCEDELETED ) { + const TQStringList myEmails = KOPrefs::instance()->allEmails(); + bool askConfirmation = false; + for ( TQStringList::ConstIterator it = myEmails.begin(); it != myEmails.end(); ++it ) { + TQString email = *it; + Attendee *me = incidence->attendeeByMail(email); + if (me && (me->status()==KCal::Attendee::Accepted || me->status()==KCal::Attendee::Delegated)) { + askConfirmation = true; + break; + } } - } - if ( !askConfirmation ) { - return true; - } + if ( !askConfirmation ) { + return true; + } - txt = i18n( "You had previously accepted an invitation to this event. " - "Do you want to send an updated response to the organizer " - "declining the invitation?" ); - rc = KMessageBox::questionYesNo( - parent, txt, i18n( "Group Scheduling Email" ), - KGuiItem( i18n( "Send Update" ) ), KGuiItem( i18n( "Do Not Send" ) ) ); - setDoNotNotify( rc == KMessageBox::No ); - } else { - txt = i18n( "You are not the organizer of this event. Editing it will " - "bring your calendar out of sync with the organizer's calendar. " - "Do you really want to edit it?" ); - rc = KMessageBox::warningYesNo( parent, txt ); - return ( rc == KMessageBox::Yes ); + txt = i18n( "You had previously accepted an invitation to this event. " + "Do you want to send an updated response to the organizer " + "declining the invitation?" ); + rc = KMessageBox::questionYesNo( + parent, txt, i18n( "Group Scheduling Email" ), + KGuiItem( i18n( "Send Update" ) ), KGuiItem( i18n( "Do Not Send" ) ) ); + setDoNotNotify( rc == KMessageBox::No ); + } else { + txt = i18n( "You are not the organizer of this event. Editing it will " + "bring your calendar out of sync with the organizer's calendar. " + "Do you really want to edit it?" ); + rc = KMessageBox::warningYesNo( parent, txt ); + return ( rc == KMessageBox::Yes ); + } } + } else { + kdWarning(5850) << "Groupware messages for Journals are not implemented yet!" << endl; + return true; } - } else { - kdWarning(5850) << "Groupware messages for Journals are not implemented yet!" << endl; - return true; } if ( rc == KMessageBox::Yes ) { diff --git a/korganizer/kogroupware.h b/korganizer/kogroupware.h index f6695de0..5df80a6a 100644 --- a/korganizer/kogroupware.h +++ b/korganizer/kogroupware.h @@ -78,7 +78,8 @@ class KOGroupware : public QObject bool sendICalMessage( TQWidget *parent, KCal::Scheduler::Method method, Incidence* incidence, KOGlobals::HowChanged action, - bool attendeeStatusChanged ); + bool attendeeStatusChanged, + int dontAskForGroupware = 0 ); /** Send counter proposal message.