Calendar: don't initialize the event source synchronously

We don't want to block the shell start to load evolution-data-server
and open all calendars (which can involve network connections)

https://bugzilla.gnome.org/show_bug.cgi?id=694030
This commit is contained in:
Giovanni Campagna 2013-02-17 15:52:53 +01:00
parent b45a2d7335
commit 0aa26e9134

View File

@ -2,6 +2,7 @@
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const Lang = imports.lang;
const St = imports.gi.St;
const Signals = imports.signals;
@ -196,15 +197,12 @@ const CalendarServerIface = <interface name="org.gnome.Shell.CalendarServer">
const CalendarServerInfo = Gio.DBusInterfaceInfo.new_for_xml(CalendarServerIface);
function CalendarServer() {
var self = new Gio.DBusProxy({ g_connection: Gio.DBus.session,
return new Gio.DBusProxy({ g_connection: Gio.DBus.session,
g_interface_name: CalendarServerInfo.name,
g_interface_info: CalendarServerInfo,
g_name: 'org.gnome.Shell.CalendarServer',
g_object_path: '/org/gnome/Shell/CalendarServer',
g_flags: Gio.DBusProxyFlags.DO_NOT_LOAD_PROPERTIES });
self.init(null);
return self;
}
function _datesEqual(a, b) {
@ -232,7 +230,16 @@ const DBusEventSource = new Lang.Class({
_init: function() {
this._resetCache();
this._initialized = false;
this._dbusProxy = new CalendarServer();
this._dbusProxy.init_async(GLib.PRIORITY_DEFAULT, null, Lang.bind(this, function(object, result) {
try {
this._dbusProxy.init_finish(result);
} catch(e) {
log('Error loading calendars: ' + e.message);
return;
}
this._dbusProxy.connectSignal('Changed', Lang.bind(this, this._onChanged));
this._dbusProxy.connect('notify::g-name-owner', Lang.bind(this, function() {
@ -241,6 +248,10 @@ const DBusEventSource = new Lang.Class({
else
this._onNameVanished();
}));
this._initialized = true;
this._onNameAppeared();
}));
},
_resetCache: function() {
@ -286,6 +297,10 @@ const DBusEventSource = new Lang.Class({
},
_loadEvents: function(forceReload) {
// Ignore while loading
if (!this._initialized)
return;
if (this._curRequestBegin && this._curRequestEnd){
let callFlags = Gio.DBusCallFlags.NO_AUTO_START;
if (forceReload)