From d1bdd6f11dbb047f1e7c43434ccf229b07dadeab Mon Sep 17 00:00:00 2001 From: Colin Walters Date: Tue, 13 Oct 2009 14:18:47 -0400 Subject: [PATCH] [search] Finish queued search on Return If we had a pending search processing, finish it when the user activates the entry. This is a small conceptual change; the large diff is simply moving the search implementation (unedited otherwise) from an anonymous inline to a named function so it can be called sanely in _activate. https://bugzilla.gnome.org/show_bug.cgi?id=598111 --- js/ui/dash.js | 92 +++++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/js/ui/dash.js b/js/ui/dash.js index 28cd70065..2f367753a 100644 --- a/js/ui/dash.js +++ b/js/ui/dash.js @@ -641,51 +641,13 @@ Dash.prototype = { } if (this._searchTimeoutId > 0) return; - this._searchTimeoutId = Mainloop.timeout_add(150, Lang.bind(this, function() { - this._searchTimeoutId = 0; - let text = this._searchEntry.getText(); - text = text.replace(/^\s+/g, "").replace(/\s+$/g, ""); - - let selectionSet = false; - - for (var i = 0; i < this._searchSections.length; i++) { - let section = this._searchSections[i]; - section.resultArea.display.setSearch(text); - let itemCount = section.resultArea.display.getMatchedItemsCount(); - let itemCountText = itemCount + ""; - section.header.countText.text = itemCountText; - - if (this._searchResultsSingleShownSection == section.type) { - this._searchResultsSection.header.setCountText(itemCountText); - if (itemCount == 0) { - section.resultArea.actor.hide(); - } else { - section.resultArea.actor.show(); - } - } else if (this._searchResultsSingleShownSection == null) { - // Don't show the section if it has no results - if (itemCount == 0) { - section.header.actor.hide(); - section.resultArea.actor.hide(); - } else { - section.header.actor.show(); - section.resultArea.actor.show(); - } - } - - // Refresh the selection when a new search is applied. - section.resultArea.display.unsetSelected(); - if (!selectionSet && section.resultArea.display.hasItems() && - (this._searchResultsSingleShownSection == null || this._searchResultsSingleShownSection == section.type)) { - section.resultArea.display.selectFirstItem(); - selectionSet = true; - } - } - - return false; - })); + this._searchTimeoutId = Mainloop.timeout_add(150, Lang.bind(this, this._doSearch)); })); this._searchEntry.entry.connect('activate', Lang.bind(this, function (se) { + if (this._searchTimeoutId > 0) { + Mainloop.source_remove(this._searchTimeoutId); + this._doSearch(); + } // Only one of the displays will have an item selected, so it's ok to // call activateSelected() on all of them. for (var i = 0; i < this._searchSections.length; i++) { @@ -856,6 +818,50 @@ Dash.prototype = { this._searchResultsSection.actor.hide(); }, + _doSearch: function () { + this._searchTimeoutId = 0; + let text = this._searchEntry.getText(); + text = text.replace(/^\s+/g, "").replace(/\s+$/g, ""); + + let selectionSet = false; + + for (var i = 0; i < this._searchSections.length; i++) { + let section = this._searchSections[i]; + section.resultArea.display.setSearch(text); + let itemCount = section.resultArea.display.getMatchedItemsCount(); + let itemCountText = itemCount + ""; + section.header.countText.text = itemCountText; + + if (this._searchResultsSingleShownSection == section.type) { + this._searchResultsSection.header.setCountText(itemCountText); + if (itemCount == 0) { + section.resultArea.actor.hide(); + } else { + section.resultArea.actor.show(); + } + } else if (this._searchResultsSingleShownSection == null) { + // Don't show the section if it has no results + if (itemCount == 0) { + section.header.actor.hide(); + section.resultArea.actor.hide(); + } else { + section.header.actor.show(); + section.resultArea.actor.show(); + } + } + + // Refresh the selection when a new search is applied. + section.resultArea.display.unsetSelected(); + if (!selectionSet && section.resultArea.display.hasItems() && + (this._searchResultsSingleShownSection == null || this._searchResultsSingleShownSection == section.type)) { + section.resultArea.display.selectFirstItem(); + selectionSet = true; + } + } + + return false; + }, + show: function() { global.stage.set_key_focus(this._searchEntry.entry); },