aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog6
-rw-r--r--calendar/gui/e-day-view.c34
2 files changed, 32 insertions, 8 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 32f28d36b3..ac1da04af4 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,3 +1,9 @@
+2002-09-05 Rodrigo Moya <rodrigo@ximian.com>
+
+ * gui/e-day-view.c (e_day_view_on_drag_data_get): added support for
+ text/x-calendar targets, in which case a VCALENDAR component, with
+ full timezone information is returned.
+
2002-09-04 JP Rosevear <jpr@ximian.com>
* gui/gnome-cal.c (gnome_calendar_destroy): don't listen to client
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index 27ae4eee4e..9965707db4 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -120,10 +120,12 @@ static guint e_day_view_signals[LAST_SIGNAL] = { 0 };
/* Drag and Drop stuff. */
enum {
- TARGET_CALENDAR_EVENT
+ TARGET_CALENDAR_EVENT,
+ TARGET_VCALENDAR
};
static GtkTargetEntry target_table[] = {
- { "application/x-e-calendar-event", 0, TARGET_CALENDAR_EVENT }
+ { "application/x-e-calendar-event", 0, TARGET_CALENDAR_EVENT },
+ { "text/x-calendar", 0, TARGET_VCALENDAR }
};
static guint n_targets = sizeof(target_table) / sizeof(target_table[0]);
@@ -7174,7 +7176,6 @@ e_day_view_on_drag_data_get (GtkWidget *widget,
{
EDayViewEvent *event;
gint day, event_num;
- const char *event_uid;
day = day_view->drag_event_day;
event_num = day_view->drag_event_num;
@@ -7190,14 +7191,31 @@ e_day_view_on_drag_data_get (GtkWidget *widget,
event = &g_array_index (day_view->events[day],
EDayViewEvent, event_num);
+ if (info == TARGET_CALENDAR_EVENT) {
+ const char *event_uid;
- cal_component_get_uid (event->comp, &event_uid);
-
- g_return_if_fail (event_uid != NULL);
+ cal_component_get_uid (event->comp, &event_uid);
+ g_return_if_fail (event_uid != NULL);
- if (info == TARGET_CALENDAR_EVENT) {
gtk_selection_data_set (selection_data, selection_data->target,
- 8, event_uid, strlen (event_uid));
+ 8, event_uid, strlen (event_uid));
+ } else if (info == TARGET_VCALENDAR) {
+ char *comp_str;
+ icalcomponent *vcal;
+
+ vcal = cal_util_new_top_level ();
+ cal_util_add_timezones_from_component (vcal, event->comp);
+ icalcomponent_add_component (
+ vcal,
+ icalcomponent_new_clone (cal_component_get_icalcomponent (event->comp)));
+
+ comp_str = icalcomponent_as_ical_string (vcal);
+ if (comp_str) {
+ gtk_selection_data_set (selection_data, selection_data->target,
+ 8, comp_str, strlen (comp_str));
+ }
+
+ icalcomponent_free (vcal);
}
}