115 lines
2.8 KiB
C
115 lines
2.8 KiB
C
/*
|
|
* 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; either
|
|
* version 2 of the License, or (at your option) version 3.
|
|
*
|
|
* 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with the 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 <gtk/gtk.h>
|
|
#include <glib/gi18n.h>
|
|
#include "libevolution-utils/e-alert-dialog.h"
|
|
#include "cancel-comp.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;
|
|
}
|