From 19749bb37fda75b2b021ec802e66c394de1a4b04 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 8 Feb 2013 17:45:53 -0500 Subject: [PATCH] searchDisplay: Make the results display in charge of updating the actor While this is a very simple translation right now, soon enough it will be so that it will have a less crazy "public" API and can do things like cache result metas. https://bugzilla.gnome.org/show_bug.cgi?id=693836 --- js/ui/searchDisplay.js | 75 +++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 33 deletions(-) diff --git a/js/ui/searchDisplay.js b/js/ui/searchDisplay.js index 8dbd00e63..8f8ccd49b 100644 --- a/js/ui/searchDisplay.js +++ b/js/ui/searchDisplay.js @@ -202,6 +202,41 @@ const SearchResultsBase = new Lang.Class({ // copy the lists this._notDisplayedResult = results.slice(0); this._terms = terms.slice(0); + }, + + _setMoreIconVisible: function(visible) { + }, + + updateSearch: function(providerResults, terms, callback) { + this.setResults(providerResults, terms); + if (providerResults.length == 0) { + this.clear(); + callback(); + } else { + let results = this.getResultsForDisplay(); + + this.provider.getResultMetas(results, Lang.bind(this, function(metas) { + this.clear(); + + // Hiding drops the key focus if we have it + let focus = global.stage.get_key_focus(); + + // To avoid CSS transitions causing flickering when + // the first search result stays the same, we hide the + // content while filling in the results. + this.actor.hide(); + + this.renderResults(metas); + + this._setMoreIconVisible(this.hasMoreResults() && this.provider.canLaunchSearch); + + this.actor.show(); + if (this.actor.contains(focus)) + global.stage.set_key_focus(focus); + + callback(); + })); + } } }); @@ -230,6 +265,10 @@ const ListSearchResults = new Lang.Class({ this.actor.add(this._content, { expand: true }); }, + _setMoreIconVisible: function(visible) { + this.providerIcon.moreIcon.visible = true; + }, + getResultsForDisplay: function() { let canDisplay = MAX_LIST_SEARCH_RESULTS_ROWS; let newResults = this._notDisplayedResult.splice(0, canDisplay); @@ -482,41 +521,11 @@ const SearchResults = new Lang.Class({ let [provider, providerResults] = results; let meta = this._metaForProvider(provider); - if (providerResults.length == 0) { - meta.resultDisplay.clear(); - meta.actor.hide(); - meta.resultDisplay.setResults([], []); + meta.actor.visible = providerResults.length > 0; + meta.resultDisplay.updateSearch(providerResults, terms, Lang.bind(this, function() { this._maybeSetInitialSelection(); this._updateStatusText(); - } else { - meta.resultDisplay.setResults(providerResults, terms); - let results = meta.resultDisplay.getResultsForDisplay(); - - if (meta.icon) - meta.icon.moreIcon.visible = - meta.resultDisplay.hasMoreResults() && - provider.canLaunchSearch; - - provider.getResultMetas(results, Lang.bind(this, function(metas) { - meta.resultDisplay.clear(); - meta.actor.show(); - - // Hiding drops the key focus if we have it - let focus = global.stage.get_key_focus(); - // To avoid CSS transitions causing flickering when - // the first search result stays the same, we hide the - // content while filling in the results. - this._content.hide(); - - meta.resultDisplay.renderResults(metas); - this._maybeSetInitialSelection(); - this._updateStatusText(); - - this._content.show(); - if (this._content.contains(focus)) - global.stage.set_key_focus(focus); - })); - } + })); }, activateDefault: function() {