dash: Clean up search pane creation

There was some weirdness relating to when the search pane is shown
in a timeout, and how that relates to setSearch.  Instead of doing
this in the timeout, just call setSearch() in the timeout.  The
pane hide/show state is directly controlled from the handler.
This commit is contained in:
Colin Walters 2009-08-12 17:07:00 -04:00
parent 1636e6c187
commit 619066780f

View File

@ -447,11 +447,19 @@ Dash.prototype = {
this._searchAreaApps = null; this._searchAreaApps = null;
this._searchAreaDocs = null; this._searchAreaDocs = null;
this._searchQueued = false; this._searchId = 0;
this._searchEntry.entry.connect('text-changed', Lang.bind(this, function (se, prop) { this._searchEntry.entry.connect('text-changed', Lang.bind(this, function (se, prop) {
let text = this._searchEntry.getText(); let text = this._searchEntry.getText();
text = text.replace(/^\s+/g, "").replace(/\s+$/g, "")
this._searchActive = text != ''; this._searchActive = text != '';
if (this._searchQueued) if (!this._searchActive) {
if (this._searchPane != null)
this._searchPane.close();
if (this._searchId > 0)
Mainloop.source_remove(this._searchId);
return;
}
if (this._searchId > 0)
return; return;
if (this._searchPane == null) { if (this._searchPane == null) {
this._searchPane = new ResultPane(this); this._searchPane = new ResultPane(this);
@ -468,18 +476,13 @@ Dash.prototype = {
this._addPane(this._searchPane); this._addPane(this._searchPane);
this._searchEntry.setPane(this._searchPane); this._searchEntry.setPane(this._searchPane);
} }
this._searchQueued = true; this._searchPane.open();
Mainloop.timeout_add(250, Lang.bind(this, function() { this._searchId = Mainloop.timeout_add(150, Lang.bind(this, function() {
this._searchId = 0;
let text = this._searchEntry.getText(); let text = this._searchEntry.getText();
// Strip leading and trailing whitespace
text = text.replace(/^\s+/g, "").replace(/\s+$/g, ""); text = text.replace(/^\s+/g, "").replace(/\s+$/g, "");
this._searchQueued = false;
this._searchAreaApps.setSearch(text); this._searchAreaApps.setSearch(text);
this._searchAreaDocs.setSearch(text); this._searchAreaDocs.setSearch(text);
if (text == '')
this._searchPane.close();
else
this._searchPane.open();
return false; return false;
})); }));
})); }));