aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog9
-rw-r--r--calendar/gui/e-itip-control.c46
2 files changed, 52 insertions, 3 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index 1158441ea3..4c1ad87a0c 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,3 +1,12 @@
+2001-07-17 JP Rosevear <jpr@ximian.com>
+
+ * gui/e-itip-control.c (get_next): find the next displayable
+ component
+ (get_prev): find the previous displayable component
+ (e_itip_control_set_data): use above
+ (prev_clicked_cb): ditto
+ (next_clicked_cb): ditto
+
2001-07-17 Federico Mena Quintero <federico@ximian.com>
Really fixes #4380. The previous fix was necessary but not
diff --git a/calendar/gui/e-itip-control.c b/calendar/gui/e-itip-control.c
index 8a919cb97c..7872536f11 100644
--- a/calendar/gui/e-itip-control.c
+++ b/calendar/gui/e-itip-control.c
@@ -736,6 +736,40 @@ show_current_freebusy (EItipControl *itip)
}
}
+static icalcomponent *
+get_next (icalcompiter *iter)
+{
+ icalcomponent *ret = NULL;
+ icalcomponent_kind kind = ICAL_NO_COMPONENT;
+
+ while (kind != ICAL_VEVENT_COMPONENT
+ && kind != ICAL_VTODO_COMPONENT
+ && kind != ICAL_VFREEBUSY_COMPONENT) {
+ icalcompiter_next (iter);
+ ret = icalcompiter_deref (iter);
+ kind = icalcomponent_isa (ret);
+ }
+
+ return ret;
+}
+
+static icalcomponent *
+get_prev (icalcompiter *iter)
+{
+ icalcomponent *ret = NULL;
+ icalcomponent_kind kind = ICAL_NO_COMPONENT;
+
+ while (kind != ICAL_VEVENT_COMPONENT
+ && kind != ICAL_VTODO_COMPONENT
+ && kind != ICAL_VFREEBUSY_COMPONENT) {
+ icalcompiter_prior (iter);
+ ret = icalcompiter_deref (iter);
+ kind = icalcomponent_isa (ret);
+ }
+
+ return ret;
+}
+
static void
show_current (EItipControl *itip)
{
@@ -782,7 +816,8 @@ e_itip_control_set_data (EItipControl *itip, const gchar *text)
{
EItipControlPrivate *priv;
icalproperty *prop;
-
+ icalcomponent_kind kind = ICAL_NO_COMPONENT;
+
priv = itip->priv;
priv->vcalendar = g_strdup (text);
@@ -802,6 +837,11 @@ e_itip_control_set_data (EItipControl *itip, const gchar *text)
priv->iter = icalcomponent_begin_component (priv->main_comp, ICAL_ANY_COMPONENT);
priv->ical_comp = icalcompiter_deref (&priv->iter);
+ kind = icalcomponent_isa (priv->ical_comp);
+ if (kind != ICAL_VEVENT_COMPONENT
+ && kind != ICAL_VTODO_COMPONENT
+ && kind != ICAL_VFREEBUSY_COMPONENT)
+ priv->ical_comp = get_next (&priv->iter);
priv->total = icalcomponent_count_components (priv->main_comp, ICAL_VEVENT_COMPONENT);
priv->total += icalcomponent_count_components (priv->main_comp, ICAL_VTODO_COMPONENT);
@@ -958,7 +998,7 @@ prev_clicked_cb (GtkWidget *widget, gpointer data)
priv = itip->priv;
priv->current--;
- priv->ical_comp = icalcompiter_prior (&priv->iter);
+ priv->ical_comp = get_prev (&priv->iter);
show_current (itip);
}
@@ -972,7 +1012,7 @@ next_clicked_cb (GtkWidget *widget, gpointer data)
priv = itip->priv;
priv->current++;
- priv->ical_comp = icalcompiter_next (&priv->iter);
+ priv->ical_comp = get_next (&priv->iter);
show_current (itip);
}