diff options
author | Milan Crha <mcrha@redhat.com> | 2011-08-02 21:23:52 +0800 |
---|---|---|
committer | Rodrigo Moya <rodrigo@gnome-db.org> | 2011-09-14 20:08:42 +0800 |
commit | cbe678c4c58efdb0b0d7960a9c6d33c30a95ce8c (patch) | |
tree | f0c3d5d4443eceff47a6f43c0daafdaac840143f /calendar/gui/tag-calendar.c | |
parent | 86f37c46dd2f61e86a82938c956490c37ed6f2ce (diff) | |
download | gsoc2013-evolution-cbe678c4c58efdb0b0d7960a9c6d33c30a95ce8c.tar gsoc2013-evolution-cbe678c4c58efdb0b0d7960a9c6d33c30a95ce8c.tar.gz gsoc2013-evolution-cbe678c4c58efdb0b0d7960a9c6d33c30a95ce8c.tar.bz2 gsoc2013-evolution-cbe678c4c58efdb0b0d7960a9c6d33c30a95ce8c.tar.lz gsoc2013-evolution-cbe678c4c58efdb0b0d7960a9c6d33c30a95ce8c.tar.xz gsoc2013-evolution-cbe678c4c58efdb0b0d7960a9c6d33c30a95ce8c.tar.zst gsoc2013-evolution-cbe678c4c58efdb0b0d7960a9c6d33c30a95ce8c.zip |
Bug #655190 - Sluggish performance interacting with calendar/tasks
Diffstat (limited to 'calendar/gui/tag-calendar.c')
-rw-r--r-- | calendar/gui/tag-calendar.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/calendar/gui/tag-calendar.c b/calendar/gui/tag-calendar.c index dff1285587..affe2a3633 100644 --- a/calendar/gui/tag-calendar.c +++ b/calendar/gui/tag-calendar.c @@ -145,15 +145,17 @@ get_recur_events_italic (void) * tag_calendar_by_client: * @ecal: Calendar widget to tag. * @client: A calendar client object. + * @cancellable: A #GCancellable; can be %NULL * * Tags an #ECalendar widget with the events that occur in its current time * range. The occurrences are extracted from the specified calendar @client. **/ void tag_calendar_by_client (ECalendar *ecal, - ECalClient *client) + ECalClient *client, + GCancellable *cancellable) { - struct calendar_tag_closure c; + struct calendar_tag_closure *c; g_return_if_fail (E_IS_CALENDAR (ecal)); g_return_if_fail (E_IS_CAL_CLIENT (client)); @@ -165,14 +167,18 @@ tag_calendar_by_client (ECalendar *ecal, if (!e_client_is_opened (E_CLIENT (client))) return; - if (!prepare_tag (ecal, &c, NULL, TRUE)) + c = g_new0 (struct calendar_tag_closure, 1); + + if (!prepare_tag (ecal, c, NULL, TRUE)) { + g_free (c); return; + } - c.skip_transparent_events = TRUE; - c.recur_events_italic = get_recur_events_italic (); + c->skip_transparent_events = TRUE; + c->recur_events_italic = get_recur_events_italic (); e_cal_client_generate_instances ( - client, c.start_time, c.end_time, tag_calendar_cb, &c); + client, c->start_time, c->end_time, cancellable, tag_calendar_cb, c, g_free); } /* Resolves TZIDs for the recurrence generator, for when the comp is not on @@ -227,7 +233,8 @@ tag_calendar_by_comp (ECalendar *ecal, icaltimezone *display_zone, gboolean clear_first, gboolean comp_is_on_server, - gboolean can_recur_events_italic) + gboolean can_recur_events_italic, + GCancellable *cancellable) { struct calendar_tag_closure c; @@ -244,11 +251,15 @@ tag_calendar_by_comp (ECalendar *ecal, c.skip_transparent_events = FALSE; c.recur_events_italic = can_recur_events_italic && get_recur_events_italic (); - if (comp_is_on_server) + if (comp_is_on_server) { + struct calendar_tag_closure *closure = g_new0 (struct calendar_tag_closure, 1); + + *closure = c; + e_cal_client_generate_instances_for_object ( client, e_cal_component_get_icalcomponent (comp), - c.start_time, c.end_time, tag_calendar_cb, &c); - else + c.start_time, c.end_time, cancellable, tag_calendar_cb, closure, g_free); + } else e_cal_recur_generate_instances ( comp, c.start_time, c.end_time, tag_calendar_cb, &c, resolve_tzid_cb, |