Bug 885294 - Immediate script selection from debugger search box is really janky and loses selection if you don't find anything, r=past

This commit is contained in:
Victor Porof 2014-01-08 10:48:32 +02:00
parent a42a2e6ccb
commit fe909407a1
5 changed files with 142 additions and 8 deletions

View File

@ -868,7 +868,6 @@ FilterView.prototype = {
if (!aToken) {
return;
}
DebuggerView.editor.find(aToken);
},
@ -1000,6 +999,9 @@ FilterView.prototype = {
} else if (targetView.hidden) {
targetView.scheduleSearch(args[0], 0);
} else {
if (!targetView.selectedItem) {
targetView.selectedIndex = 0;
}
this.clearSearch();
}
return;
@ -1023,6 +1025,9 @@ FilterView.prototype = {
} else if (targetView.hidden) {
targetView.scheduleSearch(args[0], 0);
} else {
if (!targetView.selectedItem) {
targetView.selectedIndex = 0;
}
this.clearSearch();
}
return;
@ -1258,8 +1263,11 @@ FilteredSourcesView.prototype = Heritage.extend(ResultsPanelContainer.prototype,
});
}
// Select the first entry in this container.
this.selectedIndex = 0;
// There's at least one item displayed in this container. Don't select it
// automatically if not forced (by tests) or in tandem with an operator.
if (this._autoSelectFirstItem || DebuggerView.Filtering.searchOperator) {
this.selectedIndex = 0;
}
this.hidden = false;
// Signal that file search matches were found and displayed.
@ -1459,8 +1467,11 @@ FilteredFunctionsView.prototype = Heritage.extend(ResultsPanelContainer.prototyp
});
}
// Select the first entry in this container.
this.selectedIndex = 0;
// There's at least one item displayed in this container. Don't select it
// automatically if not forced (by tests).
if (this._autoSelectFirstItem) {
this.selectedIndex = 0;
}
this.hidden = false;
// Signal that function search matches were found and displayed.

View File

@ -690,6 +690,8 @@ ResultsPanelContainer.prototype = Heritage.extend(WidgetMethods, {
}
if (!this.widget) {
this.widget = new SimpleListWidget(this._panel);
this.autoFocusOnFirstItem = false;
this.autoFocusOnSelection = false;
this.maintainSelectionVisible = false;
}
}

View File

@ -175,6 +175,7 @@ support-files =
[browser_dbg_search-global-04.js]
[browser_dbg_search-global-05.js]
[browser_dbg_search-global-06.js]
[browser_dbg_search-popup-jank.js]
[browser_dbg_search-sources-01.js]
[browser_dbg_search-sources-02.js]
[browser_dbg_search-sources-03.js]

View File

@ -0,0 +1,118 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Tests that sources aren't selected by default when finding a match.
*/
const TAB_URL = EXAMPLE_URL + "doc_editor-mode.html";
let gTab, gDebuggee, gPanel, gDebugger;
let gSearchBox;
function test() {
initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => {
gTab = aTab;
gDebuggee = aDebuggee;
gPanel = aPanel;
gDebugger = gPanel.panelWin;
gSearchBox = gDebugger.DebuggerView.Filtering._searchbox;
gDebugger.DebuggerView.FilteredSources._autoSelectFirstItem = false;
gDebugger.DebuggerView.FilteredFunctions._autoSelectFirstItem = false;
waitForSourceShown(gPanel, "-01.js")
.then(superGenericFileSearch)
.then(() => ensureSourceIs(aPanel, "-01.js"))
.then(() => ensureCaretAt(aPanel, 1))
.then(superAccurateFileSearch)
.then(() => ensureSourceIs(aPanel, "-01.js"))
.then(() => ensureCaretAt(aPanel, 1))
.then(() => pressKeyToHide("RETURN"))
.then(() => ensureSourceIs(aPanel, "code_test-editor-mode", true))
.then(() => ensureCaretAt(aPanel, 1))
.then(superGenericFileSearch)
.then(() => ensureSourceIs(aPanel, "code_test-editor-mode"))
.then(() => ensureCaretAt(aPanel, 1))
.then(() => pressKey("UP"))
.then(() => ensureSourceIs(aPanel, "doc_editor-mode", true))
.then(() => ensureCaretAt(aPanel, 1))
.then(() => pressKeyToHide("RETURN"))
.then(() => ensureSourceIs(aPanel, "doc_editor-mode"))
.then(() => ensureCaretAt(aPanel, 1))
.then(superAccurateFileSearch)
.then(() => ensureSourceIs(aPanel, "doc_editor-mode"))
.then(() => ensureCaretAt(aPanel, 1))
.then(() => typeText(gSearchBox, ":"))
.then(() => ensureSourceIs(aPanel, "code_test-editor-mode", true))
.then(() => ensureCaretAt(aPanel, 1))
.then(() => typeText(gSearchBox, "5"))
.then(() => ensureSourceIs(aPanel, "code_test-editor-mode"))
.then(() => ensureCaretAt(aPanel, 5))
.then(() => pressKey("DOWN"))
.then(() => ensureSourceIs(aPanel, "code_test-editor-mode"))
.then(() => ensureCaretAt(aPanel, 6))
.then(superGenericFunctionSearch)
.then(() => ensureSourceIs(aPanel, "code_test-editor-mode"))
.then(() => ensureCaretAt(aPanel, 6))
.then(() => pressKey("RETURN"))
.then(() => ensureSourceIs(aPanel, "code_test-editor-mode"))
.then(() => ensureCaretAt(aPanel, 4, 10))
.then(() => closeDebuggerAndFinish(gPanel))
.then(null, aError => {
ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
});
});
}
function waitForMatchFoundAndResultsShown(aName) {
return promise.all([
once(gDebugger, "popupshown"),
waitForDebuggerEvents(gPanel, gDebugger.EVENTS[aName])
]);
}
function waitForResultsHidden() {
return once(gDebugger, "popuphidden");
}
function superGenericFunctionSearch() {
let finished = waitForMatchFoundAndResultsShown("FUNCTION_SEARCH_MATCH_FOUND");
setText(gSearchBox, "@");
return finished;
}
function superGenericFileSearch() {
let finished = waitForMatchFoundAndResultsShown("FILE_SEARCH_MATCH_FOUND");
setText(gSearchBox, ".");
return finished;
}
function superAccurateFileSearch() {
let finished = waitForMatchFoundAndResultsShown("FILE_SEARCH_MATCH_FOUND");
setText(gSearchBox, "editor");
return finished;
}
function pressKey(aKey) {
EventUtils.sendKey(aKey, gDebugger);
}
function pressKeyToHide(aKey) {
let finished = waitForResultsHidden();
EventUtils.sendKey(aKey, gDebugger);
return finished;
}
registerCleanupFunction(function() {
gTab = null;
gDebuggee = null;
gPanel = null;
gDebugger = null;
gSearchBox = null;
});

View File

@ -506,9 +506,11 @@ function initChromeDebugger(aOnClose) {
function prepareDebugger(aDebugger) {
if ("target" in aDebugger) {
let variables = aDebugger.panelWin.DebuggerView.Variables;
variables.lazyEmpty = false;
variables.lazySearch = false;
let view = aDebugger.panelWin.DebuggerView;
view.Variables.lazyEmpty = false;
view.Variables.lazySearch = false;
view.FilteredSources._autoSelectFirstItem = true;
view.FilteredFunctions._autoSelectFirstItem = true;
} else {
// Nothing to do here yet.
}