1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
/*
* Evolution calendar - Send calendar component dialog
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
*
* Authors:
* JP Rosevear <jpr@ximian.com>
*
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
*
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "cancel-comp.h"
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include "e-util/e-util.h"
/* is_past_event:
*
* returns TRUE if @comp is in the past, FALSE otherwise.
* Comparision is based only on date part, time part is ignored.
*/
static gboolean
is_past_event (ECalComponent *comp)
{
ECalComponentDateTime end_date;
gboolean res;
if (!comp) return TRUE;
e_cal_component_get_dtend (comp, &end_date);
res = icaltime_compare_date_only (
*end_date.value,
icaltime_current_time_with_zone (
icaltime_get_timezone (*end_date.value))) == -1;
e_cal_component_free_datetime (&end_date);
return res;
}
/**
* cancel_component_dialog:
*
* Pops up a dialog box asking the user whether he wants to send a
* cancel and delete an iTip/iMip message
*
* Return value: TRUE if the user clicked Yes, FALSE otherwise.
**/
gboolean
cancel_component_dialog (GtkWindow *parent,
ECalClient *cal_client,
ECalComponent *comp,
gboolean deleting)
{
ECalComponentVType vtype;
const gchar *id;
if (deleting && e_cal_client_check_save_schedules (cal_client))
return TRUE;
vtype = e_cal_component_get_vtype (comp);
switch (vtype) {
case E_CAL_COMPONENT_EVENT:
if (is_past_event (comp)) {
/* don't ask neither send notification to others on past events */
return FALSE;
}
if (deleting)
id = "calendar:prompt-cancel-meeting";
else
id = "calendar:prompt-delete-meeting";
break;
case E_CAL_COMPONENT_TODO:
if (deleting)
id = "calendar:prompt-cancel-task";
else
id = "calendar:prompt-delete-task";
break;
case E_CAL_COMPONENT_JOURNAL:
if (deleting)
id = "calendar:prompt-cancel-memo";
else
id = "calendar:prompt-delete-memo";
break;
default:
g_message (G_STRLOC ": Cannot handle object of type %d", vtype);
return FALSE;
}
if (e_alert_run_dialog_for_args (parent, id, NULL) == GTK_RESPONSE_YES)
return TRUE;
else
return FALSE;
}
|