diff options
-rw-r--r-- | calendar/ChangeLog | 38 | ||||
-rw-r--r-- | calendar/gui/calendar-commands.c | 14 | ||||
-rw-r--r-- | calendar/gui/dialogs/recurrence-page.glade | 8 | ||||
-rw-r--r-- | calendar/gui/e-day-view.c | 63 | ||||
-rw-r--r-- | calendar/gui/e-day-view.h | 3 | ||||
-rw-r--r-- | calendar/gui/e-week-view.c | 74 | ||||
-rw-r--r-- | calendar/gui/e-week-view.h | 3 | ||||
-rw-r--r-- | calendar/gui/print.c | 4 | ||||
-rw-r--r-- | calendar/pcs/cal-backend-file.c | 25 | ||||
-rw-r--r-- | calendar/pcs/cal-backend.c | 27 | ||||
-rw-r--r-- | calendar/pcs/cal-backend.h | 3 | ||||
-rw-r--r-- | calendar/pcs/query.c | 17 |
12 files changed, 231 insertions, 48 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 56fe484855..f443f2c029 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,41 @@ +2001-08-09 Damon Chaplin <damon@ximian.com> + + * pcs/cal-backend.c (cal_backend_get_object_component): added new + backend method to get the component given a UID. + + * pcs/cal-backend-file.c (cal_backend_file_get_object_component): + added implementation of above virtual method. + + * pcs/query.c (match_component): use the new backend function to get + the CalComponent rather than the string. This avoids converting all + the calendar components to strings and parsing them back into + components for every query! (That wasn't a good idea, was it ;) + + * gui/e-week-view.c: + * gui/e-day-view.c: use a timeout handler to layout the events, + to avoid doing a layout for each event we get from a query. + + * gui/print.c (print_day_add_event): + * gui/e-day-view.c (e_day_view_add_event): set start_row_or_col and + num_columns to 0. They are guint8's. + + * gui/e-week-view.c (e_week_view_free_events): hide all the jump + buttons. Fixes bug #5946. + + * gui/calendar-commands.c (calendar_set_folder_bar_label): added the + day numbers for the month view. + + * gui/dialogs/recurrence-page.glade: changed "_Delete" to "_Remove", + since it clashed with "_Add". Also added underlined accelerators for + the recurrence radio buttons. Note that none of these accelerators + actually work at present, due to the way we are using .glade files + for each notebook page. I need to add a bug about this. + Also, the "_Action" menu doesn't popup when I press Alt+A, even though + the "_File" menu does popup when I press Alt+F. Strange. + + * pcs/cal-backend-file.c (cal_backend_file_get_timezone_object): + removed debug msgs. + 2001-08-09 Rodrigo Moya <rodrigo@ximian.com> * gui/e-day-view-top-item.c (e_day_view_top_item_draw_long_event): diff --git a/calendar/gui/calendar-commands.c b/calendar/gui/calendar-commands.c index 8fd3bb038e..12fe653619 100644 --- a/calendar/gui/calendar-commands.c +++ b/calendar/gui/calendar-commands.c @@ -423,20 +423,24 @@ calendar_set_folder_bar_label (GnomeCalendar *gcal, BonoboControl *control) if (start_tm.tm_year == end_tm.tm_year) { if (start_tm.tm_mon == end_tm.tm_mon) { strftime (buffer, sizeof (buffer), - _("%B %Y"), &start_tm); + _("%d"), &start_tm); + strftime (end_buffer, sizeof (end_buffer), + _("%d %B %Y"), &end_tm); + strcat (buffer, " - "); + strcat (buffer, end_buffer); } else { strftime (buffer, sizeof (buffer), - _("%B"), &start_tm); + _("%d %B"), &start_tm); strftime (end_buffer, sizeof (end_buffer), - _("%B %Y"), &end_tm); + _("%d %B %Y"), &end_tm); strcat (buffer, " - "); strcat (buffer, end_buffer); } } else { strftime (buffer, sizeof (buffer), - _("%B %Y"), &start_tm); + _("%d %B %Y"), &start_tm); strftime (end_buffer, sizeof (end_buffer), - _("%B %Y"), &end_tm); + _("%d %B %Y"), &end_tm); strcat (buffer, " - "); strcat (buffer, end_buffer); } diff --git a/calendar/gui/dialogs/recurrence-page.glade b/calendar/gui/dialogs/recurrence-page.glade index aaf3f7e05a..747f89bccb 100644 --- a/calendar/gui/dialogs/recurrence-page.glade +++ b/calendar/gui/dialogs/recurrence-page.glade @@ -207,7 +207,7 @@ <class>GtkRadioButton</class> <name>none</name> <can_focus>True</can_focus> - <label>No recurrence</label> + <label>_No recurrence</label> <active>False</active> <draw_indicator>True</draw_indicator> <group>recurrence-radio</group> @@ -222,7 +222,7 @@ <class>GtkRadioButton</class> <name>simple</name> <can_focus>True</can_focus> - <label>Simple recurrence</label> + <label>_Simple recurrence</label> <active>False</active> <draw_indicator>True</draw_indicator> <group>recurrence-radio</group> @@ -237,7 +237,7 @@ <class>GtkRadioButton</class> <name>custom</name> <can_focus>True</can_focus> - <label>Custom recurrence</label> + <label>_Custom recurrence</label> <active>False</active> <draw_indicator>True</draw_indicator> <group>recurrence-radio</group> @@ -471,7 +471,7 @@ forever <class>GtkButton</class> <name>exception-delete</name> <can_focus>True</can_focus> - <label>_Delete</label> + <label>_Remove</label> <child> <padding>0</padding> <expand>False</expand> diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c index 7c3879fc13..7fbe482772 100644 --- a/calendar/gui/e-day-view.c +++ b/calendar/gui/e-day-view.c @@ -92,6 +92,10 @@ pressed, as a fraction of the page size. */ #define E_DAY_VIEW_WHEEL_MOUSE_STEP_SIZE 0.25 +/* The timeout before we do a layout, so we don't do a layout for each event + we get from the server. */ +#define E_DAY_VIEW_LAYOUT_TIMEOUT 100 + /* Drag and Drop stuff. */ enum { @@ -422,6 +426,10 @@ static void selection_get (GtkWidget *invisible, EDayView *day_view); static void invisible_destroyed (GtkWidget *invisible, EDayView *day_view); +static void e_day_view_queue_layout (EDayView *day_view); +static void e_day_view_cancel_layout (EDayView *day_view); +static gboolean e_day_view_layout_timeout_cb (gpointer data); + static GtkTableClass *parent_class; static GdkAtom clipboard_atom = GDK_NONE; @@ -498,6 +506,8 @@ e_day_view_init (EDayView *day_view) day_view->long_events_need_layout = FALSE; day_view->long_events_need_reshape = FALSE; + day_view->layout_timeout_id = 0; + for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++) { day_view->events[day] = g_array_new (FALSE, FALSE, sizeof (EDayViewEvent)); @@ -879,6 +889,8 @@ e_day_view_destroy (GtkObject *object) day_view = E_DAY_VIEW (object); + e_day_view_cancel_layout (day_view); + e_day_view_stop_auto_scroll (day_view); if (day_view->client) { @@ -915,8 +927,11 @@ e_day_view_destroy (GtkObject *object) e_day_view_free_events (day_view); g_array_free (day_view->long_events, TRUE); - for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++) + day_view->long_events = NULL; + for (day = 0; day < E_DAY_VIEW_MAX_DAYS; day++) { g_array_free (day_view->events[day], TRUE); + day_view->events[day] = NULL; + } if (day_view->invisible) gtk_widget_destroy (day_view->invisible); @@ -1510,10 +1525,7 @@ query_obj_updated_cb (CalQuery *query, const char *uid, cal_client_resolve_tzid_cb, day_view->client); gtk_object_unref (GTK_OBJECT (comp)); - e_day_view_check_layout (day_view); - - gtk_widget_queue_draw (day_view->top_canvas); - gtk_widget_queue_draw (day_view->main_canvas); + e_day_view_queue_layout (day_view); } /* Callback used when a component is removed from the live query */ @@ -1599,9 +1611,10 @@ update_query (EDayView *day_view) e_day_view_stop_editing_event (day_view); - e_day_view_free_events (day_view); gtk_widget_queue_draw (day_view->top_canvas); gtk_widget_queue_draw (day_view->main_canvas); + e_day_view_free_events (day_view); + e_day_view_queue_layout (day_view); if (!(day_view->client && cal_client_get_load_state (day_view->client) == CAL_CLIENT_LOAD_LOADED)) @@ -4376,8 +4389,8 @@ e_day_view_add_event (CalComponent *comp, event.start_minute = start_tt.hour * 60 + start_tt.minute - offset; event.end_minute = end_tt.hour * 60 + end_tt.minute - offset; - event.start_row_or_col = -1; - event.num_columns = -1; + event.start_row_or_col = 0; + event.num_columns = 0; event.different_timezone = FALSE; if (!cal_comp_util_compare_event_timezones (comp, day_view->client, @@ -6834,3 +6847,37 @@ e_day_view_get_visible_time_range (EDayView *day_view, return TRUE; } + +/* Queues a layout, unless one is already queued. */ +static void +e_day_view_queue_layout (EDayView *day_view) +{ + if (day_view->layout_timeout_id == 0) { + day_view->layout_timeout_id = g_timeout_add (E_DAY_VIEW_LAYOUT_TIMEOUT, e_day_view_layout_timeout_cb, day_view); + } +} + + +/* Removes any queued layout. */ +static void +e_day_view_cancel_layout (EDayView *day_view) +{ + if (day_view->layout_timeout_id != 0) { + gtk_timeout_remove (day_view->layout_timeout_id); + day_view->layout_timeout_id = 0; + } +} + + +static gboolean +e_day_view_layout_timeout_cb (gpointer data) +{ + EDayView *day_view = E_DAY_VIEW (data); + + gtk_widget_queue_draw (day_view->top_canvas); + gtk_widget_queue_draw (day_view->main_canvas); + e_day_view_check_layout (day_view); + + day_view->layout_timeout_id = 0; + return FALSE; +} diff --git a/calendar/gui/e-day-view.h b/calendar/gui/e-day-view.h index d8a5372c8c..d260f33980 100644 --- a/calendar/gui/e-day-view.h +++ b/calendar/gui/e-day-view.h @@ -280,6 +280,9 @@ struct _EDayView gboolean long_events_need_reshape; gboolean need_reshape[E_DAY_VIEW_MAX_DAYS]; + /* The ID of the timeout function for doing a new layout. */ + gint layout_timeout_id; + /* The number of minutes per row. 5, 10, 15, 30 or 60. */ gint mins_per_row; diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c index 0fa54c75b5..094e0b4776 100644 --- a/calendar/gui/e-week-view.c +++ b/calendar/gui/e-week-view.c @@ -39,6 +39,7 @@ #include <gtk/gtksignal.h> #include <gtk/gtkvscrollbar.h> #include <gtk/gtkwindow.h> +#include <gtk/gtkmain.h> #include <libgnome/gnome-defs.h> #include <libgnome/gnome-i18n.h> #include <gdk-pixbuf/gdk-pixbuf.h> @@ -74,6 +75,11 @@ #define E_WEEK_VIEW_JUMP_BUTTON_X_PAD 3 #define E_WEEK_VIEW_JUMP_BUTTON_Y_PAD 3 +/* The timeout before we do a layout, so we don't do a layout for each event + we get from the server. */ +#define E_WEEK_VIEW_LAYOUT_TIMEOUT 100 + + static void e_week_view_class_init (EWeekViewClass *class); static void e_week_view_init (EWeekView *week_view); static void e_week_view_destroy (GtkObject *object); @@ -192,6 +198,11 @@ static void selection_received (GtkWidget *invisible, guint time, EWeekView *week_view); +static void e_week_view_queue_layout (EWeekView *week_view); +static void e_week_view_cancel_layout (EWeekView *week_view); +static gboolean e_week_view_layout_timeout_cb (gpointer data); + + static GtkTableClass *parent_class; static GdkAtom clipboard_atom = GDK_NONE; @@ -271,6 +282,8 @@ e_week_view_init (EWeekView *week_view) week_view->events_need_layout = FALSE; week_view->events_need_reshape = FALSE; + week_view->layout_timeout_id = 0; + week_view->spans = NULL; week_view->zone = NULL; @@ -446,7 +459,11 @@ e_week_view_destroy (GtkObject *object) week_view = E_WEEK_VIEW (object); + e_week_view_cancel_layout (week_view); + e_week_view_free_events (week_view); + g_array_free (week_view->events, TRUE); + week_view->events = NULL; if (week_view->client) { gtk_signal_disconnect_by_data (GTK_OBJECT (week_view->client), week_view); @@ -1006,9 +1023,7 @@ query_obj_updated_cb (CalQuery *query, const char *uid, gtk_object_unref (GTK_OBJECT (comp)); - e_week_view_check_layout (week_view); - - gtk_widget_queue_draw (week_view->main_canvas); + e_week_view_queue_layout (week_view); } /* Callback used when a component is removed from the live query */ @@ -1022,8 +1037,8 @@ query_obj_removed_cb (CalClient *client, const char *uid, gpointer data) e_week_view_foreach_event_with_uid (week_view, uid, e_week_view_remove_event_cb, NULL); - e_week_view_check_layout (week_view); gtk_widget_queue_draw (week_view->main_canvas); + e_week_view_check_layout (week_view); } /* Callback used when a query ends */ @@ -1038,6 +1053,8 @@ query_query_done_cb (CalQuery *query, CalQueryDoneStatus status, const char *err if (status != CAL_QUERY_DONE_SUCCESS) fprintf (stderr, "query done: %s\n", error_str); + + gtk_widget_queue_draw (week_view->main_canvas); } /* Callback used when an evaluation error occurs when running a query */ @@ -1051,6 +1068,8 @@ query_eval_error_cb (CalQuery *query, const char *error_str, gpointer data) /* FIXME */ fprintf (stderr, "eval error: %s\n", error_str); + + gtk_widget_queue_draw (week_view->main_canvas); } /* Builds a complete query sexp for the week view by adding the predicates to @@ -1092,8 +1111,9 @@ update_query (EWeekView *week_view) CalQuery *old_query; char *real_sexp; - e_week_view_free_events (week_view); gtk_widget_queue_draw (week_view->main_canvas); + e_week_view_free_events (week_view); + e_week_view_queue_layout (week_view); if (!(week_view->client && cal_client_get_load_state (week_view->client) == CAL_CLIENT_LOAD_LOADED)) @@ -1110,8 +1130,9 @@ update_query (EWeekView *week_view) g_assert (week_view->sexp != NULL); real_sexp = adjust_query_sexp (week_view, week_view->sexp); - if (!real_sexp) + if (!real_sexp) { return; /* No time range is set, so don't start a query */ + } week_view->query = cal_client_get_query (week_view->client, real_sexp); g_free (real_sexp); @@ -2265,6 +2286,11 @@ e_week_view_free_events (EWeekView *week_view) for (day = 0; day <= num_days; day++) { week_view->rows_per_day[day] = 0; } + + /* Hide all the jump buttons. */ + for (day = 0; day < E_WEEK_VIEW_MAX_WEEKS * 7; day++) { + gnome_canvas_item_hide (week_view->jump_buttons[day]); + } } @@ -2726,8 +2752,6 @@ e_week_view_on_adjustment_changed (GtkAdjustment *adjustment, if (week_view->calendar) gnome_calendar_set_selected_time_range (week_view->calendar, start, end); } - - gtk_widget_queue_draw (week_view->main_canvas); } @@ -3747,3 +3771,37 @@ e_week_view_get_visible_time_range (EWeekView *week_view, return TRUE; } + + +/* Queues a layout, unless one is already queued. */ +static void +e_week_view_queue_layout (EWeekView *week_view) +{ + if (week_view->layout_timeout_id == 0) { + week_view->layout_timeout_id = g_timeout_add (E_WEEK_VIEW_LAYOUT_TIMEOUT, e_week_view_layout_timeout_cb, week_view); + } +} + + +/* Removes any queued layout. */ +static void +e_week_view_cancel_layout (EWeekView *week_view) +{ + if (week_view->layout_timeout_id != 0) { + gtk_timeout_remove (week_view->layout_timeout_id); + week_view->layout_timeout_id = 0; + } +} + + +static gboolean +e_week_view_layout_timeout_cb (gpointer data) +{ + EWeekView *week_view = E_WEEK_VIEW (data); + + gtk_widget_queue_draw (week_view->main_canvas); + e_week_view_check_layout (week_view); + + week_view->layout_timeout_id = 0; + return FALSE; +} diff --git a/calendar/gui/e-week-view.h b/calendar/gui/e-week-view.h index 7060d97bf7..84e113b1b5 100644 --- a/calendar/gui/e-week-view.h +++ b/calendar/gui/e-week-view.h @@ -205,6 +205,9 @@ struct _EWeekView gboolean events_need_layout; gboolean events_need_reshape; + /* The ID of the timeout function for doing a new layout. */ + gint layout_timeout_id; + /* An array of EWeekViewEventSpan elements. Each event has its own space within this array, and uses the spans_index and num_spans fields of the EWeekViewEvent struct to access it. */ diff --git a/calendar/gui/print.c b/calendar/gui/print.c index aa8fb92432..e1bae904ff 100644 --- a/calendar/gui/print.c +++ b/calendar/gui/print.c @@ -839,8 +839,8 @@ print_day_add_event (CalComponent *comp, event.start_minute = start_tt.hour * 60 + start_tt.minute - offset; event.end_minute = end_tt.hour * 60 + end_tt.minute - offset; - event.start_row_or_col = -1; - event.num_columns = -1; + event.start_row_or_col = 0; + event.num_columns = 0; /* Find out which array to add the event to. */ for (day = 0; day < days_shown; day++) { diff --git a/calendar/pcs/cal-backend-file.c b/calendar/pcs/cal-backend-file.c index bda5f5f825..9e090a6781 100644 --- a/calendar/pcs/cal-backend-file.c +++ b/calendar/pcs/cal-backend-file.c @@ -86,6 +86,7 @@ static gboolean cal_backend_file_is_loaded (CalBackend *backend); static int cal_backend_file_get_n_objects (CalBackend *backend, CalObjType type); static char *cal_backend_file_get_object (CalBackend *backend, const char *uid); +static CalComponent *cal_backend_file_get_object_component (CalBackend *backend, const char *uid); static char *cal_backend_file_get_timezone_object (CalBackend *backend, const char *tzid); static CalObjType cal_backend_file_get_type_by_uid (CalBackend *backend, const char *uid); static GList *cal_backend_file_get_uids (CalBackend *backend, CalObjType type); @@ -163,6 +164,7 @@ cal_backend_file_class_init (CalBackendFileClass *class) backend_class->is_loaded = cal_backend_file_is_loaded; backend_class->get_n_objects = cal_backend_file_get_n_objects; backend_class->get_object = cal_backend_file_get_object; + backend_class->get_object_component = cal_backend_file_get_object_component; backend_class->get_timezone_object = cal_backend_file_get_timezone_object; backend_class->get_type_by_uid = cal_backend_file_get_type_by_uid; backend_class->get_uids = cal_backend_file_get_uids; @@ -941,6 +943,24 @@ cal_backend_file_get_object (CalBackend *backend, const char *uid) } /* Get_object handler for the file backend */ +static CalComponent * +cal_backend_file_get_object_component (CalBackend *backend, const char *uid) +{ + CalBackendFile *cbfile; + CalBackendFilePrivate *priv; + + cbfile = CAL_BACKEND_FILE (backend); + priv = cbfile->priv; + + g_return_val_if_fail (uid != NULL, NULL); + + g_return_val_if_fail (priv->icalcomp != NULL, NULL); + g_assert (priv->comp_uid_hash != NULL); + + return lookup_component (cbfile, uid); +} + +/* Get_object handler for the file backend */ static char * cal_backend_file_get_timezone_object (CalBackend *backend, const char *tzid) { @@ -953,24 +973,19 @@ cal_backend_file_get_timezone_object (CalBackend *backend, const char *tzid) cbfile = CAL_BACKEND_FILE (backend); priv = cbfile->priv; - g_print ("In cal_backend_file_get_timezone_object: %s\n", tzid); - g_return_val_if_fail (tzid != NULL, NULL); g_return_val_if_fail (priv->icalcomp != NULL, NULL); g_assert (priv->comp_uid_hash != NULL); - g_print (" getting icaltz\n"); icaltz = icalcomponent_get_timezone (priv->icalcomp, tzid); if (!icaltz) return NULL; - g_print (" getting icalcomp\n"); icalcomp = icaltimezone_get_component (icaltz); if (!icalcomp) return NULL; - g_print (" getting ical_string\n"); ical_string = icalcomponent_as_ical_string (icalcomp); /* We dup the string; libical owns that memory. */ if (ical_string) diff --git a/calendar/pcs/cal-backend.c b/calendar/pcs/cal-backend.c index ad56462565..b67fce3b9a 100644 --- a/calendar/pcs/cal-backend.c +++ b/calendar/pcs/cal-backend.c @@ -138,6 +138,7 @@ cal_backend_class_init (CalBackendClass *class) class->is_loaded = NULL; class->get_n_objects = NULL; class->get_object = NULL; + class->get_object_component = NULL; class->get_timezone_object = NULL; class->get_type_by_uid = NULL; class->get_uids = NULL; @@ -267,8 +268,7 @@ cal_backend_get_n_objects (CalBackend *backend, CalObjType type) * identifier. * * Return value: The string representation of a complete calendar wrapping the - * the sought object, or NULL if no object had the specified UID. A complete - * calendar is returned because you also need the timezone data. + * the sought object, or NULL if no object had the specified UID. **/ char * cal_backend_get_object (CalBackend *backend, const char *uid) @@ -282,6 +282,29 @@ cal_backend_get_object (CalBackend *backend, const char *uid) } /** + * cal_backend_get_object_component: + * @backend: A calendar backend. + * @uid: Unique identifier for a calendar object. + * + * Queries a calendar backend for a calendar object based on its unique + * identifier. It returns the CalComponent rather than the string + * representation. + * + * Return value: The CalComponent of the sought object, or NULL if no object + * had the specified UID. + **/ +CalComponent * +cal_backend_get_object_component (CalBackend *backend, const char *uid) +{ + g_return_val_if_fail (backend != NULL, NULL); + g_return_val_if_fail (IS_CAL_BACKEND (backend), NULL); + g_return_val_if_fail (uid != NULL, NULL); + + g_assert (CLASS (backend)->get_object_component != NULL); + return (* CLASS (backend)->get_object_component) (backend, uid); +} + +/** * cal_backend_get_timezone_object: * @backend: A calendar backend. * @tzid: Unique identifier for a calendar VTIMEZONE object. diff --git a/calendar/pcs/cal-backend.h b/calendar/pcs/cal-backend.h index a1ba2af4c2..4af8befa84 100644 --- a/calendar/pcs/cal-backend.h +++ b/calendar/pcs/cal-backend.h @@ -84,6 +84,7 @@ struct _CalBackendClass { /* General object acquirement and information related virtual methods */ int (* get_n_objects) (CalBackend *backend, CalObjType type); char *(* get_object) (CalBackend *backend, const char *uid); + CalComponent *(* get_object_component) (CalBackend *backend, const char *uid); char *(* get_timezone_object) (CalBackend *backend, const char *tzid); CalObjType(* get_type_by_uid) (CalBackend *backend, const char *uid); GList *(* get_uids) (CalBackend *backend, CalObjType type); @@ -126,6 +127,8 @@ int cal_backend_get_n_objects (CalBackend *backend, CalObjType type); char *cal_backend_get_object (CalBackend *backend, const char *uid); +CalComponent *cal_backend_get_object_component (CalBackend *backend, const char *uid); + char *cal_backend_get_timezone_object (CalBackend *backend, const char *tzid); GList *cal_backend_get_uids (CalBackend *backend, CalObjType type); diff --git a/calendar/pcs/query.c b/calendar/pcs/query.c index 94a998aa44..7e9a712825 100644 --- a/calendar/pcs/query.c +++ b/calendar/pcs/query.c @@ -921,25 +921,14 @@ match_component (Query *query, const char *uid, gboolean query_in_progress, int n_scanned, int total) { QueryPrivate *priv; - char *comp_str; CalComponent *comp; - icalcomponent *icalcomp; - gboolean set_succeeded; ESExpResult *result; priv = query->priv; - comp_str = cal_backend_get_object (priv->backend, uid); - g_assert (comp_str != NULL); - - icalcomp = icalparser_parse_string (comp_str); - g_assert (icalcomp != NULL); - - g_free (comp_str); - - comp = cal_component_new (); - set_succeeded = cal_component_set_icalcomponent (comp, icalcomp); - g_assert (set_succeeded); + comp = cal_backend_get_object_component (priv->backend, uid); + g_assert (comp != NULL); + gtk_object_ref (GTK_OBJECT (comp)); /* Eval the sexp */ |