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