зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
2b61a6e620
Коммит
b51f9b38ae
|
@ -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.
|
||||
// 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.
|
||||
// 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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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;
|
||||
});
|
|
@ -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.
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче