aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@helixcode.com>2000-11-09 05:45:19 +0800
committerFederico Mena Quintero <federico@src.gnome.org>2000-11-09 05:45:19 +0800
commitd6fade43cf3eb5fcf722b3a01342705fc312bd79 (patch)
tree8cf91ad575d639737a833ddccd056473335d0406 /calendar/gui
parenta17d3f17626d64a69acf0476ba5a69533ad57291 (diff)
downloadgsoc2013-evolution-d6fade43cf3eb5fcf722b3a01342705fc312bd79.tar
gsoc2013-evolution-d6fade43cf3eb5fcf722b3a01342705fc312bd79.tar.gz
gsoc2013-evolution-d6fade43cf3eb5fcf722b3a01342705fc312bd79.tar.bz2
gsoc2013-evolution-d6fade43cf3eb5fcf722b3a01342705fc312bd79.tar.lz
gsoc2013-evolution-d6fade43cf3eb5fcf722b3a01342705fc312bd79.tar.xz
gsoc2013-evolution-d6fade43cf3eb5fcf722b3a01342705fc312bd79.tar.zst
gsoc2013-evolution-d6fade43cf3eb5fcf722b3a01342705fc312bd79.zip
These changes fix bugzilla bugs #874 and #875.
2000-11-08 Federico Mena Quintero <federico@helixcode.com> These changes fix bugzilla bugs #874 and #875. * cal-util/cal-component.c (cal_component_get_exdate_list): Return a list of CalComponentDateTime instead of simple struct icaltimetype objects. Exception date properties *can* contain a timezone parameter, so we need to include those if they are present. (cal_component_set_exdate_list): On the input, handle a list of CalComponentDateTime structures. On the internals, handle a list of struct datetime instead of plain properties. (cal_component_free_exdate_list): Handle a list of CalComponentDateTime structures. (scan_exdate): Create a list of struct datetime structures. (free_icalcomponent): Free the exdate_list properly. * cal-util/cal-recur.c (generate_instances_for_chunk): Use the proper types for exception dates. * gui/comp-util.h: * gui/comp-util.c: New files with utilities for manipulating calendar component objects. (cal_comp_util_add_exdate): New function. * gui/Makefile.am (evolution_calendar_SOURCES): Added comp-util.[ch] to the list of sources. * gui/e-day-view.c (add_exdate): New convenience function to add an exception date to a calendar component. (e_day_view_on_unrecur_appointment): Use cal_comp_util_add_exdate(). (e_day_view_on_delete_occurrence): Likewise. * gui/e-week-view.c (e_week_view_on_delete_occurrence): Likewise. (e_week_view_on_unrecur_appointment): Likewise. * gui/event-editor.c (nth_weekday): Be paranoid about valid position values. (fill_widgets): Use the proper types for exdates. (dialog_to_comp_object): Likewise. svn path=/trunk/; revision=6517
Diffstat (limited to 'calendar/gui')
-rw-r--r--calendar/gui/Makefile.am2
-rw-r--r--calendar/gui/comp-util.c57
-rw-r--r--calendar/gui/comp-util.h29
-rw-r--r--calendar/gui/e-day-view.c42
-rw-r--r--calendar/gui/e-week-view.c27
-rw-r--r--calendar/gui/event-editor.c31
6 files changed, 124 insertions, 64 deletions
diff --git a/calendar/gui/Makefile.am b/calendar/gui/Makefile.am
index ebe73826a6..724594780d 100644
--- a/calendar/gui/Makefile.am
+++ b/calendar/gui/Makefile.am
@@ -67,6 +67,8 @@ evolution_calendar_SOURCES = \
calendar-commands.h \
calendar-model.c \
calendar-model.h \
+ comp-util.c \
+ comp-util.h \
control-factory.c \
control-factory.h \
component-factory.c \
diff --git a/calendar/gui/comp-util.c b/calendar/gui/comp-util.c
new file mode 100644
index 0000000000..d6c26e7751
--- /dev/null
+++ b/calendar/gui/comp-util.c
@@ -0,0 +1,57 @@
+/* Evolution calendar - Utilities for manipulating CalComponent objects
+ *
+ * Copyright (C) 2000 Helix Code, Inc.
+ *
+ * Author: Federico Mena-Quintero <federico@helixcode.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "comp-util.h"
+
+
+
+/**
+ * cal_comp_util_add_exdate:
+ * @comp: A calendar component object.
+ * @itt: Time for the exception.
+ *
+ * Adds an exception date to the current list of EXDATE properties in a calendar
+ * component object.
+ **/
+void
+cal_comp_util_add_exdate (CalComponent *comp, struct icaltimetype itt)
+{
+ GSList *list;
+ CalComponentDateTime *cdt;
+
+ g_return_if_fail (comp != NULL);
+ g_return_if_fail (IS_CAL_COMPONENT (comp));
+
+ cal_component_get_exdate_list (comp, &list);
+
+ cdt = g_new (CalComponentDateTime, 1);
+ cdt->value = g_new (struct icaltimetype, 1);
+ *cdt->value = itt;
+ cdt->tzid = NULL;
+
+ list = g_slist_append (list, cdt);
+ cal_component_set_exdate_list (comp, list);
+ cal_component_free_exdate_list (list);
+}
diff --git a/calendar/gui/comp-util.h b/calendar/gui/comp-util.h
new file mode 100644
index 0000000000..d08bfe993b
--- /dev/null
+++ b/calendar/gui/comp-util.h
@@ -0,0 +1,29 @@
+/* Evolution calendar - Utilities for manipulating CalComponent objects
+ *
+ * Copyright (C) 2000 Helix Code, Inc.
+ *
+ * Author: Federico Mena-Quintero <federico@helixcode.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef COMP_UTIL_H
+#define COMP_UTIL_H
+
+#include <cal-util/cal-component.h>
+
+void cal_comp_util_add_exdate (CalComponent *comp, struct icaltimetype itt);
+
+#endif
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index 50f6639f58..c1da656ccd 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -32,6 +32,7 @@
#include <gnome.h>
#include <gdk/gdkx.h>
#include <cal-util/timeutil.h>
+#include "comp-util.h"
#include "e-day-view.h"
#include "e-day-view-time-item.h"
#include "e-day-view-top-item.h"
@@ -368,12 +369,12 @@ static void e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget
guint info,
guint time,
EDayView *day_view);
-#ifndef NO_WARNINGS
+
static gboolean e_day_view_update_event_cb (EDayView *day_view,
gint day,
gint event_num,
gpointer data);
-#endif
+
static gboolean e_day_view_remove_event_cb (EDayView *day_view,
gint day,
gint event_num,
@@ -1325,9 +1326,7 @@ obj_updated_cb (CalClient *client, const char *uid, gpointer data)
else
event = &g_array_index (day_view->events[day],
EDayViewEvent, event_num);
-#ifndef NO_WARNINGS
#warning "FIXME"
-#endif
/* Do this the long way every time for now */
#if 0
@@ -1423,7 +1422,6 @@ e_day_view_set_cal_client (EDayView *day_view,
}
-#ifndef NO_WARNINGS
static gboolean
e_day_view_update_event_cb (EDayView *day_view,
gint day,
@@ -1459,7 +1457,6 @@ e_day_view_update_event_cb (EDayView *day_view,
}
return TRUE;
}
-#endif
/* This calls a given function for each event instance that matches the given
@@ -2749,8 +2746,6 @@ e_day_view_on_delete_occurrence (GtkWidget *widget, gpointer data)
EDayView *day_view;
EDayViewEvent *event;
CalComponent *comp;
- struct icaltimetype *time;
- GSList *list;
day_view = E_DAY_VIEW (data);
@@ -2761,12 +2756,7 @@ e_day_view_on_delete_occurrence (GtkWidget *widget, gpointer data)
/* We must duplicate the CalComponent, or we won't know it has changed
when we get the "update_event" callback. */
comp = cal_component_clone (event->comp);
- cal_component_get_exdate_list (comp, &list);
- time = g_new0 (struct icaltimetype, 1);
- *time = icaltime_from_timet (event->start, FALSE, FALSE);
- list = g_slist_append (list, time);
- cal_component_set_exdate_list (comp, list);
- cal_component_free_exdate_list (list);
+ cal_comp_util_add_exdate (comp, icaltime_from_timet (event->start, FALSE, FALSE));
if (!cal_client_update_object (day_view->client, comp))
g_message ("e_day_view_on_delete_occurrence(): Could not update the object!");
@@ -2808,7 +2798,6 @@ e_day_view_on_unrecur_appointment (GtkWidget *widget, gpointer data)
CalComponent *comp, *new_comp;
CalComponentDateTime date;
struct icaltimetype itt;
- GSList *list;
day_view = E_DAY_VIEW (data);
@@ -2816,17 +2805,11 @@ e_day_view_on_unrecur_appointment (GtkWidget *widget, gpointer data)
if (event == NULL)
return;
- date.value = &itt;
- date.tzid = NULL;
-
- /* For the recurring object, we add a exception to get rid of the
+ /* For the recurring object, we add an exception to get rid of the
instance. */
+
comp = cal_component_clone (event->comp);
- cal_component_get_exdate_list (comp, &list);
- *date.value = icaltime_from_timet (event->start, FALSE, FALSE);
- list = g_slist_append (list, &date);
- cal_component_set_exdate_list (comp, list);
- g_slist_free (list);
+ cal_comp_util_add_exdate (comp, icaltime_from_timet (event->start, FALSE, FALSE));
/* For the unrecurred instance we duplicate the original object,
create a new uid for it, get rid of the recurrence rules, and set
@@ -2838,6 +2821,9 @@ e_day_view_on_unrecur_appointment (GtkWidget *widget, gpointer data)
cal_component_set_exdate_list (new_comp, NULL);
cal_component_set_exrule_list (new_comp, NULL);
+ date.value = &itt;
+ date.tzid = NULL;
+
*date.value = icaltime_from_timet (event->start, FALSE, FALSE);
cal_component_set_dtstart (new_comp, &date);
*date.value = icaltime_from_timet (event->end, FALSE, FALSE);
@@ -2986,9 +2972,9 @@ e_day_view_on_top_canvas_motion (GtkWidget *widget,
day_view->pressed_event_num);
if (!(cal_component_has_recurrences (event->comp))
- && (abs (canvas_x - day_view->drag_event_x)
+ && (abs (canvas_x - day_view->drag_event_x)
> E_DAY_VIEW_DRAG_START_OFFSET
- || abs (canvas_y - day_view->drag_event_y)
+ || abs (canvas_y - day_view->drag_event_y)
> E_DAY_VIEW_DRAG_START_OFFSET)) {
day_view->drag_event_day = day_view->pressed_event_day;
day_view->drag_event_num = day_view->pressed_event_num;
@@ -3092,9 +3078,9 @@ e_day_view_on_main_canvas_motion (GtkWidget *widget,
event = &g_array_index (day_view->events[day_view->pressed_event_day], EDayViewEvent, day_view->pressed_event_num);
if (!cal_component_has_recurrences (event->comp)
- && (abs (canvas_x - day_view->drag_event_x)
+ && (abs (canvas_x - day_view->drag_event_x)
> E_DAY_VIEW_DRAG_START_OFFSET
- || abs (canvas_y - day_view->drag_event_y)
+ || abs (canvas_y - day_view->drag_event_y)
> E_DAY_VIEW_DRAG_START_OFFSET)) {
day_view->drag_event_day = day_view->pressed_event_day;
day_view->drag_event_num = day_view->pressed_event_num;
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index eadc3c9bd3..48c9f147d3 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -32,6 +32,7 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk-pixbuf/gnome-canvas-pixbuf.h>
#include "calendar-commands.h"
+#include "comp-util.h"
#include "e-week-view.h"
#include "e-week-view-event-item.h"
#include "e-week-view-main-item.h"
@@ -873,10 +874,7 @@ obj_updated_cb (CalClient *client, const char *uid, gpointer data)
update the event fairly easily without changing the events arrays
or computing a new layout. */
if (e_week_view_find_event_from_uid (week_view, uid, &event_num)) {
-#ifndef NO_WARNINGS
#warning "FIXME"
-#endif
-
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
@@ -3045,8 +3043,6 @@ e_week_view_on_delete_occurrence (GtkWidget *widget, gpointer data)
EWeekView *week_view;
EWeekViewEvent *event;
CalComponent *comp;
- CalComponentDateTime *date=NULL;
- GSList *list;
week_view = E_WEEK_VIEW (data);
@@ -3060,13 +3056,7 @@ e_week_view_on_delete_occurrence (GtkWidget *widget, gpointer data)
when we get the "update_event" callback. */
comp = cal_component_clone (event->comp);
- cal_component_get_exdate_list (comp, &list);
- list = g_slist_append (list, date);
- date = g_new0 (CalComponentDateTime, 1);
- date->value = g_new (struct icaltimetype, 1);
- *date->value = icaltime_from_timet (event->start, TRUE, FALSE);
- cal_component_set_exdate_list (comp, list);
- cal_component_free_exdate_list (list);
+ cal_comp_util_add_exdate (comp, icaltime_from_timet (event->start, TRUE, FALSE));
if (!cal_client_update_object (week_view->client, comp))
g_message ("e_week_view_on_delete_occurrence(): Could not update the object!");
@@ -3107,7 +3097,6 @@ e_week_view_on_unrecur_appointment (GtkWidget *widget, gpointer data)
CalComponent *comp, *new_comp;
CalComponentDateTime date;
struct icaltimetype itt;
- GSList *list;
week_view = E_WEEK_VIEW (data);
@@ -3117,17 +3106,10 @@ e_week_view_on_unrecur_appointment (GtkWidget *widget, gpointer data)
event = &g_array_index (week_view->events, EWeekViewEvent,
week_view->popup_event_num);
- date.value = &itt;
- date.tzid = NULL;
-
/* For the recurring object, we add a exception to get rid of the
instance. */
comp = cal_component_clone (event->comp);
- cal_component_get_exdate_list (comp, &list);
- *date.value = icaltime_from_timet (event->start, TRUE, FALSE);
- list = g_slist_append (list, &date);
- cal_component_set_exdate_list (comp, list);
- g_slist_free (list);
+ cal_comp_util_add_exdate (comp, icaltime_from_timet (event->start, TRUE, FALSE));
/* For the unrecurred instance we duplicate the original object,
create a new uid for it, get rid of the recurrence rules, and set
@@ -3139,6 +3121,9 @@ e_week_view_on_unrecur_appointment (GtkWidget *widget, gpointer data)
cal_component_set_exdate_list (new_comp, NULL);
cal_component_set_exrule_list (new_comp, NULL);
+ date.value = &itt;
+ date.tzid = NULL;
+
*date.value = icaltime_from_timet (event->start, TRUE, FALSE);
cal_component_set_dtstart (new_comp, &date);
*date.value = icaltime_from_timet (event->end, TRUE, FALSE);
diff --git a/calendar/gui/event-editor.c b/calendar/gui/event-editor.c
index 0eca5fdec9..59f08c2267 100644
--- a/calendar/gui/event-editor.c
+++ b/calendar/gui/event-editor.c
@@ -975,16 +975,12 @@ init_widgets (EventEditor *ee)
/* Recurrence units */
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (priv->recurrence_interval_unit));
- g_assert (menu != NULL);
-
gtk_signal_connect (GTK_OBJECT (menu), "selection_done",
GTK_SIGNAL_FUNC (recur_interval_selection_done_cb), ee);
/* Recurrence ending */
menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (priv->recurrence_ending_menu));
- g_assert (menu != NULL);
-
gtk_signal_connect (GTK_OBJECT (menu), "selection_done",
GTK_SIGNAL_FUNC (recur_ending_selection_done_cb), ee);
@@ -1528,11 +1524,11 @@ fill_widgets (EventEditor *ee)
cal_component_get_exdate_list (priv->comp, &list);
for (l = list; l; l = l->next) {
- struct icaltimetype *t;
+ CalComponentDateTime *cdt;
time_t ext;
-
- t = l->data;
- ext = icaltime_as_timet (*t);
+
+ cdt = l->data;
+ ext = icaltime_as_timet (*cdt->value);
append_exception (ee, ext);
}
@@ -1572,6 +1568,8 @@ classification_get (GtkWidget *widget)
static short
nth_weekday (int pos, icalrecurrencetype_weekday weekday)
{
+ g_assert (pos > 0 && pos <= 5);
+
return (pos << 3) | (int) weekday;
}
@@ -1872,18 +1870,21 @@ dialog_to_comp_object (EventEditor *ee, CalComponent *comp)
list = NULL;
exception_list = GTK_CLIST (priv->recurrence_exception_list);
for (i = 0; i < exception_list->rows; i++) {
- struct icaltimetype *tt;
+ CalComponentDateTime *cdt;
time_t *tim;
-
+
+ cdt = g_new (CalComponentDateTime, 1);
+ cdt->value = g_new (struct icaltimetype, 1);
+ cdt->tzid = NULL;
+
tim = gtk_clist_get_row_data (exception_list, i);
- tt = g_new0 (struct icaltimetype, 1);
- *tt = icaltime_from_timet (*tim, FALSE, FALSE);
+ *cdt->value = icaltime_from_timet (*tim, FALSE, FALSE);
- list = g_slist_prepend (list, tt);
+ list = g_slist_prepend (list, cdt);
}
+
cal_component_set_exdate_list (comp, list);
- if (list)
- cal_component_free_exdate_list (list);
+ cal_component_free_exdate_list (list);
cal_component_commit_sequence (comp);
}