[california] Better responsiveness when performing I/O: Bug #725769
- From: Jim Nelson <jnelson src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [california] Better responsiveness when performing I/O: Bug #725769
- Date: Thu, 26 Jun 2014 00:44:01 +0000 (UTC)
commit c5d3b5c49e2d61066e83007adca057902ffd273d
Author: Jim Nelson <jim yorba org>
Date: Wed Jun 25 17:43:20 2014 -0700
Better responsiveness when performing I/O: Bug #725769
Now using EDS async variants wherever possible and a busy cursor over
the window while the async operation is at work.
.../activator-google-calendar-list-pane.vala | 15 ++++++--
src/activator/webcal/activator-webcal-pane.vala | 14 ++++++-
.../backing-eds-calendar-source-subscription.vala | 7 ++--
src/backing/eds/backing-eds-calendar-source.vala | 32 +++++++++-------
src/backing/eds/backing-eds-store.vala | 4 +-
src/host/host-create-update-event.vala | 26 +++++++++++--
src/host/host-main-window.vala | 11 ------
src/host/host-quick-create-event.vala | 13 ++++++-
src/host/host-show-event.vala | 23 ++++++++++--
src/toolkit/toolkit.vala | 38 ++++++++++++++++++++
src/util/util-scheduled.vala | 18 +++++++++
vapi/libecal-1.2.vapi | 23 +++++++-----
vapi/libecal-1.2/libecal-1.2.metadata | 33 +++++++++++++----
13 files changed, 193 insertions(+), 64 deletions(-)
---
diff --git a/src/activator/google/activator-google-calendar-list-pane.vala
b/src/activator/google/activator-google-calendar-list-pane.vala
index 4e47b00..8d37d7a 100644
--- a/src/activator/google/activator-google-calendar-list-pane.vala
+++ b/src/activator/google/activator-google-calendar-list-pane.vala
@@ -169,16 +169,23 @@ public class GoogleCalendarListPane : Gtk.Grid, Toolkit.Card {
}
debug("Subscribing to %s", uri.to_string(false));
+
+ Gdk.Cursor? cursor = Toolkit.set_busy(this);
+
+ Error? subscribe_err = null;
try {
yield store.subscribe_caldav_async(calendar.title, uri, username,
calendar.color.to_hexadecimal(), null);
} catch (Error err) {
- notify_failure(_("Unable to subscribe to %s: %s").printf(calendar.title, err.message));
-
- return;
+ subscribe_err = err;
}
- notify_success();
+ Toolkit.set_unbusy(this, cursor);
+
+ if (subscribe_err == null)
+ notify_success();
+ else
+ notify_failure(_("Unable to subscribe to %s: %s").printf(calendar.title, subscribe_err.message));
}
}
diff --git a/src/activator/webcal/activator-webcal-pane.vala b/src/activator/webcal/activator-webcal-pane.vala
index 047304f..c66dc91 100644
--- a/src/activator/webcal/activator-webcal-pane.vala
+++ b/src/activator/webcal/activator-webcal-pane.vala
@@ -71,13 +71,23 @@ internal class WebCalActivatorPane : Gtk.Grid, Toolkit.Card {
}
private async void subscribe_async() {
+ Gdk.Cursor? cursor = Toolkit.set_busy(this);
+
+ Error? subscribe_err = null;
try {
yield store.subscribe_webcal_async(name_entry.text, URI.parse(url_entry.text),
null, Gfx.rgba_to_uint8_rgb_string(color_button.rgba), null);
- notify_success();
} catch (Error err) {
+ subscribe_err = err;
+ }
+
+ Toolkit.set_unbusy(this, cursor);
+
+ if (subscribe_err == null) {
+ notify_success();
+ } else {
notify_failure(_("Unable to subscribe to Web calendar at %s: %s").printf(url_entry.text,
- err.message));
+ subscribe_err.message));
}
}
}
diff --git a/src/backing/eds/backing-eds-calendar-source-subscription.vala
b/src/backing/eds/backing-eds-calendar-source-subscription.vala
index ff02d70..f38932d 100644
--- a/src/backing/eds/backing-eds-calendar-source-subscription.vala
+++ b/src/backing/eds/backing-eds-calendar-source-subscription.vala
@@ -112,12 +112,13 @@ internal class EdsCalendarSourceSubscription : CalendarSourceSubscription {
private void on_objects_added(SList<weak iCal.icalcomponent> objects) {
foreach (weak iCal.icalcomponent ical_component in objects) {
- // TODO: Either use the async variant or run this in a background thread
- view.client.generate_instances_for_object_sync(
+ view.client.generate_instances_for_object(
ical_component,
window.start_exact_time.to_time_t(),
window.end_exact_time.to_time_t(),
- on_instance_added);
+ null,
+ on_instance_added,
+ null);
}
}
diff --git a/src/backing/eds/backing-eds-calendar-source.vala
b/src/backing/eds/backing-eds-calendar-source.vala
index 246023f..984f778 100644
--- a/src/backing/eds/backing-eds-calendar-source.vala
+++ b/src/backing/eds/backing-eds-calendar-source.vala
@@ -40,6 +40,11 @@ internal class EdsCalendarSource : CalendarSource {
notify[PROP_COLOR].connect(on_color_changed);
}
+ ~EdsCalendarSource() {
+ if (scheduled_source_write != null)
+ scheduled_source_write.wait();
+ }
+
private void on_title_changed() {
// on schedule write if something changed
if (eds_source.display_name == title)
@@ -69,14 +74,17 @@ internal class EdsCalendarSource : CalendarSource {
private void schedule_source_write(string reason) {
debug("Scheduling update of %s due to %s...", to_string(), reason);
+
+ // cancel an outstanding write
+ if (source_write_cancellable != null)
+ source_write_cancellable.cancel();
source_write_cancellable = new Cancellable();
+
scheduled_source_write = new Scheduled.once_after_msec(UPDATE_DELAY_MSEC,
- on_background_write_source, Priority.LOW);
+ () => on_background_write_source_async.begin(), Priority.LOW);
}
- private void on_background_write_source() {
- // in essence, say this is no longer scheduled ... for now, allow another write to be
- // scheduled while this one is occurring
+ private async void on_background_write_source_async() {
Cancellable? cancellable = source_write_cancellable;
source_write_cancellable = null;
@@ -85,8 +93,8 @@ internal class EdsCalendarSource : CalendarSource {
try {
debug("Updating EDS source %s...", to_string());
- // TODO: Fix bindings to use async variant
- eds_source.write_sync(cancellable);
+ yield eds_source.write(cancellable);
+ debug("Updated EDS source %s", to_string());
} catch (Error err) {
debug("Error updating EDS source %s: %s", to_string(), err.message);
}
@@ -134,9 +142,8 @@ internal class EdsCalendarSource : CalendarSource {
Cancellable? cancellable = null) throws Error {
check_open();
- // TODO: Fix create_object() bindings so async is possible
string? uid;
- client.create_object_sync(instance.ical_component, out uid, cancellable);
+ yield client.create_object(instance.ical_component, cancellable, out uid);
return !String.is_empty(uid) ? new Component.UID(uid) : null;
}
@@ -145,24 +152,21 @@ internal class EdsCalendarSource : CalendarSource {
Cancellable? cancellable = null) throws Error {
check_open();
- // TODO: Fix modify_object() bindings so async is possible
- client.modify_object_sync(instance.ical_component, E.CalObjModType.THIS, cancellable);
+ yield client.modify_object(instance.ical_component, E.CalObjModType.THIS, cancellable);
}
public override async void remove_component_async(Component.UID uid,
Cancellable? cancellable = null) throws Error {
check_open();
- // TODO: Fix remove_object() bindings so async is possible
- client.remove_object_sync(uid.value, null, E.CalObjModType.THIS, cancellable);
+ yield client.remove_object(uid.value, null, E.CalObjModType.THIS, cancellable);
}
public override async void import_icalendar_async(Component.iCalendar ical, Cancellable? cancellable =
null)
throws Error {
check_open();
- // TODO: Fix receive_objects() bindings so async is possible
- client.receive_objects_sync(ical.ical_component, cancellable);
+ yield client.receive_objects(ical.ical_component, cancellable);
}
}
diff --git a/src/backing/eds/backing-eds-store.vala b/src/backing/eds/backing-eds-store.vala
index 2b6efaf..70f8b71 100644
--- a/src/backing/eds/backing-eds-store.vala
+++ b/src/backing/eds/backing-eds-store.vala
@@ -110,8 +110,8 @@ internal class EdsStore : Store, WebCalSubscribable, CalDAVSubscribable {
List<E.Source> sources = new List<E.Source>();
sources.append(scratch);
- // TODO: Properly bind async version of this call
- registry.create_sources_sync(sources, cancellable);
+
+ yield registry.create_sources(sources, cancellable);
}
public override Gee.List<Source> get_sources() {
diff --git a/src/host/host-create-update-event.vala b/src/host/host-create-update-event.vala
index 468ce89..77694f7 100644
--- a/src/host/host-create-update-event.vala
+++ b/src/host/host-create-update-event.vala
@@ -275,12 +275,21 @@ public class CreateUpdateEvent : Gtk.Grid, Toolkit.Card {
return;
}
+ Gdk.Cursor? cursor = Toolkit.set_busy(this);
+
+ Error? create_err = null;
try {
yield event.calendar_source.create_component_async(event, cancellable);
- notify_success();
} catch (Error err) {
- notify_failure(_("Unable to create event: %s").printf(err.message));
+ create_err = err;
}
+
+ Toolkit.set_unbusy(this, cursor);
+
+ if (create_err == null)
+ notify_success();
+ else
+ notify_failure(_("Unable to create event: %s").printf(create_err.message));
}
// TODO: Delete from original source if not the same as the new source
@@ -291,12 +300,21 @@ public class CreateUpdateEvent : Gtk.Grid, Toolkit.Card {
return;
}
+ Gdk.Cursor? cursor = Toolkit.set_busy(this);
+
+ Error? update_err = null;
try {
yield event.calendar_source.update_component_async(event, cancellable);
- notify_success();
} catch (Error err) {
- notify_failure(_("Unable to update event: %s").printf(err.message));
+ update_err = err;
}
+
+ Toolkit.set_unbusy(this, cursor);
+
+ if (update_err == null)
+ notify_success();
+ else
+ notify_failure(_("Unable to update event: %s").printf(update_err.message));
}
}
diff --git a/src/host/host-main-window.vala b/src/host/host-main-window.vala
index d1c0874..71a2cac 100644
--- a/src/host/host-main-window.vala
+++ b/src/host/host-main-window.vala
@@ -437,9 +437,6 @@ public class MainWindow : Gtk.ApplicationWindow {
private void on_request_display_event(Component.Event event, Gtk.Widget relative_to,
Gdk.Point? for_location) {
ShowEvent show_event = new ShowEvent();
- show_event.remove_event.connect(() => {
- remove_event_async.begin(event, null);
- });
CreateUpdateEvent create_update_event = new CreateUpdateEvent();
create_update_event.is_update = true;
@@ -451,14 +448,6 @@ public class MainWindow : Gtk.ApplicationWindow {
show_deck(relative_to, for_location, deck);
}
-
- private async void remove_event_async(Component.Event event, Cancellable? cancellable) {
- try {
- yield event.calendar_source.remove_component_async(event.uid, cancellable);
- } catch (Error err) {
- debug("Unable to destroy event: %s", err.message);
- }
- }
}
}
diff --git a/src/host/host-quick-create-event.vala b/src/host/host-quick-create-event.vala
index e0b33b1..9cdea9c 100644
--- a/src/host/host-quick-create-event.vala
+++ b/src/host/host-quick-create-event.vala
@@ -127,12 +127,21 @@ public class QuickCreateEvent : Gtk.Grid, Toolkit.Card {
return;
}
+ Gdk.Cursor? cursor = Toolkit.set_busy(this);
+
+ Error? create_err = null;
try {
yield event.calendar_source.create_component_async(event, cancellable);
- notify_success();
} catch (Error err) {
- notify_failure(_("Unable to create event: %s").printf(err.message));
+ create_err = err;
}
+
+ Toolkit.set_unbusy(this, cursor);
+
+ if (create_err == null)
+ notify_success();
+ else
+ notify_failure(_("Unable to create event: %s").printf(create_err.message));
}
}
diff --git a/src/host/host-show-event.vala b/src/host/host-show-event.vala
index 18d5200..9f0cf08 100644
--- a/src/host/host-show-event.vala
+++ b/src/host/host-show-event.vala
@@ -47,8 +47,6 @@ public class ShowEvent : Gtk.Grid, Toolkit.Card {
private new Component.Event event;
- public signal void remove_event(Component.Event event);
-
public ShowEvent() {
Calendar.System.instance.is_24hr_changed.connect(build_display);
Calendar.System.instance.today_changed.connect(build_display);
@@ -132,8 +130,7 @@ public class ShowEvent : Gtk.Grid, Toolkit.Card {
[GtkCallback]
private void on_remove_button_clicked() {
- remove_event(event);
- notify_success();
+ remove_event_async.begin();
}
[GtkCallback]
@@ -145,6 +142,24 @@ public class ShowEvent : Gtk.Grid, Toolkit.Card {
private void on_close_button_clicked() {
notify_user_closed();
}
+
+ private async void remove_event_async() {
+ Gdk.Cursor? cursor = Toolkit.set_busy(this);
+
+ Error? remove_err = null;
+ try {
+ yield event.calendar_source.remove_component_async(event.uid, null);
+ } catch (Error err) {
+ remove_err = err;
+ }
+
+ Toolkit.set_unbusy(this, cursor);
+
+ if (remove_err == null)
+ notify_success();
+ else
+ notify_failure(_("Unable to remove event: %s").printf(remove_err.message));
+ }
}
}
diff --git a/src/toolkit/toolkit.vala b/src/toolkit/toolkit.vala
index 41c3030..2630ed5 100644
--- a/src/toolkit/toolkit.vala
+++ b/src/toolkit/toolkit.vala
@@ -56,4 +56,42 @@ public void spin_event_loop() {
Gtk.main_iteration();
}
+/**
+ * Sets the window as "busy" by changing the cursor.
+ *
+ * @returns the window's current Gdk.Cursor. This will need to be passed to
+ * { link set_window_unbusy}.
+ */
+public Gdk.Cursor? set_busy(Gtk.Widget widget) {
+ Gtk.Widget toplevel = widget.get_toplevel();
+ if (!toplevel.is_toplevel()) {
+ debug("Unable to set busy: widget has no toplevel window");
+
+ return null;
+ }
+
+ Gdk.Window gdk_window = toplevel.get_window();
+ Gdk.Cursor? unbusy_cursor = gdk_window.get_cursor();
+ gdk_window.set_cursor(new Gdk.Cursor.for_display(toplevel.get_display(), Gdk.CursorType.WATCH));
+
+ return unbusy_cursor;
+}
+
+/**
+ * Sets the window as "unbusy".
+ *
+ * Pass the Gdk.Cursor returned by { link set_window_busy}.
+ */
+public void set_unbusy(Gtk.Widget widget, Gdk.Cursor? unbusy_cursor) {
+ Gtk.Widget toplevel = widget.get_toplevel();
+ if (!toplevel.is_toplevel()) {
+ if (unbusy_cursor != null)
+ debug("Unable to set unbusy: widget has no toplevel window");
+
+ return;
+ }
+
+ toplevel.get_window().set_cursor(unbusy_cursor);
+}
+
}
diff --git a/src/util/util-scheduled.vala b/src/util/util-scheduled.vala
index 1fd0dc2..507cc58 100644
--- a/src/util/util-scheduled.vala
+++ b/src/util/util-scheduled.vala
@@ -139,6 +139,24 @@ public class Scheduled : BaseObject {
source_id = 0;
}
+ /**
+ * Wait for the scheduled code to execute.
+ *
+ * This waits for execution by spinning the event loop, which can cause reentrancy. There is
+ * also the danger of waiting for continuously executing code that never returns
+ * { link Reschedule.HALT}. In that case, wait() will never return.
+ *
+ * If the scheduled code has been cancelled, is executing, or has already executed, wait()
+ * immediately returns.
+ */
+ public void wait(MainContext main_context = MainContext.default()) {
+ if (!is_scheduled || is_executing)
+ return;
+
+ while (main_context.pending())
+ main_context.iteration(false);
+ }
+
private bool on_once() {
is_executing = true;
schedule_once();
diff --git a/vapi/libecal-1.2.vapi b/vapi/libecal-1.2.vapi
index 1a97eff..e414c46 100644
--- a/vapi/libecal-1.2.vapi
+++ b/vapi/libecal-1.2.vapi
@@ -18,7 +18,7 @@ namespace E {
public static async unowned E.Client connect (E.Source source, E.CalClientSourceType
source_type, GLib.Cancellable cancellable) throws GLib.Error;
public static unowned E.Client connect_sync (E.Source source, E.CalClientSourceType
source_type, GLib.Cancellable cancellable) throws GLib.Error;
[CCode (finish_name = "e_cal_client_create_object_finish")]
- public async bool create_object (iCal.icalcomponent icalcomp, GLib.Cancellable? cancellable)
throws GLib.Error;
+ public async void create_object (iCal.icalcomponent icalcomp, GLib.Cancellable? cancellable,
out string out_uid) throws GLib.Error;
public bool create_object_sync (iCal.icalcomponent icalcomp, out string out_uid,
GLib.Cancellable? cancellable) throws GLib.Error;
public void create_objects (GLib.SList icalcomps, GLib.Cancellable cancellable,
GLib.AsyncReadyCallback callback);
public bool create_objects_finish (GLib.AsyncResult _result, GLib.SList out_uids) throws
GLib.Error;
@@ -31,7 +31,7 @@ namespace E {
public static void free_ecalcomp_slist (GLib.SList<E.CalComponent> ecalcomps);
public static void free_icalcomp_slist (GLib.SList icalcomps);
public void generate_instances (time_t start, time_t end, GLib.Cancellable? cancellable,
[CCode (delegate_target_pos = 4.9)] E.CalRecurInstanceFn cb, [CCode (delegate_target_pos = 4.9)] owned
GLib.DestroyNotify? destroy_cb_data);
- public void generate_instances_for_object (iCal.icalcomponent icalcomp, time_t start, time_t
end, GLib.Cancellable? cancellable, [CCode (delegate_target_pos = 6.9)] E.CalRecurInstanceFn cb, owned
GLib.DestroyNotify? destroy_cb_data);
+ public void generate_instances_for_object (iCal.icalcomponent icalcomp, time_t start, time_t
end, GLib.Cancellable? cancellable, [CCode (delegate_target_pos = 5.9)] E.CalRecurInstanceFn cb, [CCode
(delegate_target_pos = 5.9)] owned GLib.DestroyNotify? destroy_cb_data);
public void generate_instances_for_object_sync (iCal.icalcomponent icalcomp, time_t start,
time_t end, [CCode (delegate_target_pos = 6.9)] E.CalRecurInstanceFn cb);
public void generate_instances_sync (time_t start, time_t end, [CCode (delegate_target_pos =
3.9)] E.CalRecurInstanceFn cb);
public async bool get_attachment_uris (string uid, string rid, GLib.Cancellable? cancellable)
throws GLib.Error;
@@ -55,17 +55,20 @@ namespace E {
public async bool get_timezone (string tzid, GLib.Cancellable? cancellable, out unowned
iCal.icaltimezone out_zone) throws GLib.Error;
public bool get_timezone_sync (string tzid, out unowned iCal.icaltimezone out_zone,
GLib.Cancellable? cancellable) throws GLib.Error;
[CCode (finish_name = "e_cal_client_get_view_finish")]
- public async bool get_view (string sexp, GLib.Cancellable? cancellable, out unowned
E.CalClientView out_view) throws GLib.Error;
- public bool get_view_sync (string sexp, out unowned E.CalClientView out_view,
GLib.Cancellable? cancellable) throws GLib.Error;
- public async bool modify_object (iCal.icalcomponent icalcomp, E.CalObjModType mod,
GLib.Cancellable? cancellable) throws GLib.Error;
- public bool modify_object_sync (iCal.icalcomponent icalcomp, E.CalObjModType mod,
GLib.Cancellable? cancellable) throws GLib.Error;
+ public async void get_view (string sexp, GLib.Cancellable? cancellable, out E.CalClientView
out_view) throws GLib.Error;
+ public void get_view_sync (string sexp, out E.CalClientView out_view, GLib.Cancellable?
cancellable) throws GLib.Error;
+ [CCode (finish_name = "e_cal_client_modify_object_finish")]
+ public async void modify_object (iCal.icalcomponent icalcomp, E.CalObjModType mod,
GLib.Cancellable? cancellable) throws GLib.Error;
+ public void modify_object_sync (iCal.icalcomponent icalcomp, E.CalObjModType mod,
GLib.Cancellable? cancellable) throws GLib.Error;
public void modify_objects (GLib.SList comps, E.CalObjModType mod, GLib.Cancellable
cancellable, GLib.AsyncReadyCallback callback);
public bool modify_objects_finish (GLib.AsyncResult _result) throws GLib.Error;
public bool modify_objects_sync (GLib.SList comps, E.CalObjModType mod, GLib.Cancellable
cancellable) throws GLib.Error;
- public async bool receive_objects (iCal.icalcomponent icalcomp, GLib.Cancellable?
cancellable) throws GLib.Error;
- public bool receive_objects_sync (iCal.icalcomponent icalcomp, GLib.Cancellable? cancellable)
throws GLib.Error;
- public async bool remove_object (string uid, string rid, E.CalObjModType mod,
GLib.Cancellable? cancellable) throws GLib.Error;
- public bool remove_object_sync (string uid, string? rid, E.CalObjModType mod,
GLib.Cancellable? cancellable) throws GLib.Error;
+ [CCode (finish_name = "e_cal_client_receive_objects_finish")]
+ public async void receive_objects (iCal.icalcomponent icalcomp, GLib.Cancellable?
cancellable) throws GLib.Error;
+ public void receive_objects_sync (iCal.icalcomponent icalcomp, GLib.Cancellable? cancellable)
throws GLib.Error;
+ [CCode (finish_name = "e_cal_client_remove_object_finish")]
+ public async void remove_object (string uid, string? rid, E.CalObjModType mod,
GLib.Cancellable? cancellable) throws GLib.Error;
+ public void remove_object_sync (string uid, string? rid, E.CalObjModType mod,
GLib.Cancellable? cancellable) throws GLib.Error;
public void remove_objects (GLib.SList ids, E.CalObjModType mod, GLib.Cancellable
cancellable, GLib.AsyncReadyCallback callback);
public bool remove_objects_finish (GLib.AsyncResult _result) throws GLib.Error;
public bool remove_objects_sync (GLib.SList ids, E.CalObjModType mod, GLib.Cancellable
cancellable) throws GLib.Error;
diff --git a/vapi/libecal-1.2/libecal-1.2.metadata b/vapi/libecal-1.2/libecal-1.2.metadata
index b67f77e..0d82150 100644
--- a/vapi/libecal-1.2/libecal-1.2.metadata
+++ b/vapi/libecal-1.2/libecal-1.2.metadata
@@ -26,7 +26,9 @@ e_cal_client_add_timezone async="1"
e_cal_client_create_object async="1" finish_name="e_cal_client_create_object_finish"
e_cal_client_create_object.cancellable nullable="1"
-e_cal_client_create_object_finish.uid is_out="1" value_owned="1"
+
+e_cal_client_create_object_finish type_name="void"
+e_cal_client_create_object_finish.out_uid is_out="1" value_owned="1"
e_cal_client_create_object_sync.out_uid is_out="1" transfer_ownership="1" is_nullable="1"
e_cal_client_create_object_sync.cancellable nullable="1"
@@ -57,9 +59,9 @@ e_cal_client_generate_instances_sync.cb_data hidden="1"
e_cal_client_generate_instances_for_object.start type_name="time_t"
e_cal_client_generate_instances_for_object.end type_name="time_t"
e_cal_client_generate_instances_for_object.cancellable nullable="1"
-e_cal_client_generate_instances_for_object.cb delegate_target_pos="6.9"
+e_cal_client_generate_instances_for_object.cb delegate_target_pos="5.9"
e_cal_client_generate_instances_for_object.cb_data hidden="1"
-e_cal_client_generate_instances_for_object.destroy_cb_data value_owned="1" nullable="1"
+e_cal_client_generate_instances_for_object.destroy_cb_data value_owned="1" nullable="1"
delegate_target_pos="5.9"
e_cal_client_generate_instances_for_object_sync.start type_name="time_t"
e_cal_client_generate_instances_for_object_sync.end type_name="time_t"
@@ -118,22 +120,37 @@ e_cal_client_get_timezone_sync.zone is_out="1" value_owned="1"
e_cal_client_get_view async="1" finish_name="e_cal_client_get_view_finish"
e_cal_client_get_view.cancellable nullable="1"
-e_cal_client_get_view_finish.view is_out="1" value_owned="0"
+e_cal_client_get_view_finish type_name="void"
+e_cal_client_get_view_finish.out_view is_out="1" value_owned="1"
+
+e_cal_client_get_view_sync type_name="void"
e_cal_client_get_view_sync.cancellable nullable="1"
-e_cal_client_get_view_sync.view is_out="1" value_owned="1"
+e_cal_client_get_view_sync.out_view is_out="1" value_owned="1"
-e_cal_client_modify_object async="1"
+e_cal_client_modify_object async="1" finish_name="e_cal_client_modify_object_finish"
e_cal_client_modify_object.cancellable nullable="1"
+
+e_cal_client_modify_object_finish type_name="void"
+
+e_cal_client_modify_object_sync type_name="void"
e_cal_client_modify_object_sync.cancellable nullable="1"
-e_cal_client_receive_objects async="1"
+e_cal_client_receive_objects async="1" finish_name="e_cal_client_receive_objects_finish"
e_cal_client_receive_objects.cancellable nullable="1"
+
+e_cal_client_receive_objects_finish type_name="void"
+
+e_cal_client_receive_objects_sync type_name="void"
e_cal_client_receive_objects_sync.cancellable nullable="1"
-e_cal_client_remove_object async="1"
+e_cal_client_remove_object async="1" finish_name="e_cal_client_remove_object_finish"
+e_cal_client_remove_object.rid nullable="1"
e_cal_client_remove_object.cancellable nullable="1"
+e_cal_client_remove_object_finish type_name="void"
+
+e_cal_client_remove_object_sync type_name="void"
e_cal_client_remove_object_sync.rid nullable="1"
e_cal_client_remove_object_sync.cancellable nullable="1"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]