remote-search: initialize the DBus proxy asynchronously

Initializing this synchronously means that we will possibly wait for the
process to be auto-activated and answering to our call.
If the process is already running it also might not answer immediately
our request, as it might be doing sync I/O.
The right thing to do is to initialize the proxy asynchronously; there
are try/catch blocks in place for when the object is not available, or
not properly initialized.

https://bugzilla.gnome.org/show_bug.cgi?id=687491
This commit is contained in:
Cosimo Cecchi 2012-11-01 17:28:46 -04:00
parent cbc8ec6508
commit 10c104529f

View File

@ -113,12 +113,16 @@ const RemoteSearchProvider = new Lang.Class({
_init: function(title, icon, dbusName, dbusPath) { _init: function(title, icon, dbusName, dbusPath) {
this._proxy = new SearchProviderProxy(Gio.DBus.session, this._proxy = new SearchProviderProxy(Gio.DBus.session,
dbusName, dbusPath); dbusName, dbusPath, Lang.bind(this, this._onProxyConstructed));
this.parent(title.toUpperCase()); this.parent(title.toUpperCase());
this._cancellable = new Gio.Cancellable(); this._cancellable = new Gio.Cancellable();
}, },
_onProxyConstructed: function(proxy) {
// Do nothing
},
createIcon: function(size, meta) { createIcon: function(size, meta) {
if (meta['gicon']) { if (meta['gicon']) {
return new St.Icon({ gicon: Gio.icon_new_for_string(meta['gicon']), return new St.Icon({ gicon: Gio.icon_new_for_string(meta['gicon']),