gdm: Clean up pending messages handling

Introduce a new doAfterPendingMessages helper to wait until
we have no more pending messages before doing an action.
This commit is contained in:
Jasper St. Pierre 2014-03-07 15:59:21 -05:00
parent 82b8b32355
commit ebef4ff174

View File

@ -205,18 +205,23 @@ const ShellUserVerifier = new Lang.Class({
this._clearMessageQueue(); this._clearMessageQueue();
}, },
answerQuery: function(serviceName, answer) { _doAfterPendingMessages: function(func) {
if (!this.hasPendingMessages) { if (this.hasPendingMessages) {
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null); let signalId = this.connect('no-more-messages', Lang.bind(this, function() {
this.disconnect(signalId);
func();
}));
} else { } else {
let signalId = this.connect('no-more-messages', func();
Lang.bind(this, function() {
this.disconnect(signalId);
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
}));
} }
}, },
answerQuery: function(serviceName, answer) {
this._doAfterPendingMessages(Lang.bind(this, function() {
this._userVerifier.call_answer_query(serviceName, answer, this._cancellable, null);
}));
},
_getIntervalForMessage: function(message) { _getIntervalForMessage: function(message) {
// We probably could be smarter here // We probably could be smarter here
return message.length * USER_READ_TIME; return message.length * USER_READ_TIME;
@ -503,27 +508,12 @@ const ShellUserVerifier = new Lang.Class({
this.emit('verification-failed'); this.emit('verification-failed');
if (canRetry) { this._doAfterPendingMessages(Lang.bind(this, function() {
if (!this.hasPendingMessages) { if (canRetry)
this._retry(); this._retry();
} else { else
let signalId = this.connect('no-more-messages',
Lang.bind(this, function() {
this.disconnect(signalId);
this._retry();
}));
}
} else {
if (!this.hasPendingMessages) {
this.cancel(); this.cancel();
} else { }));
let signalId = this.connect('no-more-messages',
Lang.bind(this, function() {
this.disconnect(signalId);
this.cancel();
}));
}
}
}, },
_onConversationStopped: function(client, serviceName) { _onConversationStopped: function(client, serviceName) {