[gnome-shell] RemoteSearch: don't complete a search that was cancelled
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] RemoteSearch: don't complete a search that was cancelled
- Date: Wed, 11 Mar 2015 20:48:28 +0000 (UTC)
commit b0be6b867859cecd6d51a03a3ad92e4ca4d00ef5
Author: Giovanni Campagna <gcampagna gnome org>
Date: Sun Mar 8 15:32:22 2015 -0700
RemoteSearch: don't complete a search that was cancelled
This closes a race between setTerms and a slow GetInitialResultSet.
The bug manifests as follows:
- initial search for a short string
- previous results === undefined, call GetInitialResultSet
- user types more, cancel previous search in setTerms()
- mainloop, then _gotResults([])
- previous results === [], !!previous results === true
- therefore call GetSubsearchResultSet with an empty list of results
- _gotResults() from GetSubsearchResultSet is empty
- much later, return from GetInitialResultSet is discarded by
cancellable
- user unhappy because what he searched for is not there
After this fix, the flow is:
- initial search for a short string
- previous results === undefined, call GetInitialResultSet
- user types more, cancel previous search in setTerms()
- mainloop, but no _gotResults
- previous results === undefined, call GetInitialResultSet again with
longer string
- some time later, return from first GetInitialResultSet is discarded
by cancellable
- soon after, return from second GetInitialResultSet comes with good
results
- user happy
https://bugzilla.gnome.org/show_bug.cgi?id=745861
js/ui/remoteSearch.js | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
---
diff --git a/js/ui/remoteSearch.js b/js/ui/remoteSearch.js
index 9ab413e..4fc5000 100644
--- a/js/ui/remoteSearch.js
+++ b/js/ui/remoteSearch.js
@@ -236,8 +236,10 @@ const RemoteSearchProvider = new Lang.Class({
_getResultsFinished: function(results, error, callback) {
if (error) {
- if (!error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
- log('Received error from DBus search provider %s: %s'.format(this.id, String(error)));
+ if (error.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED))
+ return;
+
+ log('Received error from DBus search provider %s: %s'.format(this.id, String(error)));
callback([]);
return;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]