зеркало из 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) {
|
if (!aToken) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DebuggerView.editor.find(aToken);
|
DebuggerView.editor.find(aToken);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1000,6 +999,9 @@ FilterView.prototype = {
|
||||||
} else if (targetView.hidden) {
|
} else if (targetView.hidden) {
|
||||||
targetView.scheduleSearch(args[0], 0);
|
targetView.scheduleSearch(args[0], 0);
|
||||||
} else {
|
} else {
|
||||||
|
if (!targetView.selectedItem) {
|
||||||
|
targetView.selectedIndex = 0;
|
||||||
|
}
|
||||||
this.clearSearch();
|
this.clearSearch();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -1023,6 +1025,9 @@ FilterView.prototype = {
|
||||||
} else if (targetView.hidden) {
|
} else if (targetView.hidden) {
|
||||||
targetView.scheduleSearch(args[0], 0);
|
targetView.scheduleSearch(args[0], 0);
|
||||||
} else {
|
} else {
|
||||||
|
if (!targetView.selectedItem) {
|
||||||
|
targetView.selectedIndex = 0;
|
||||||
|
}
|
||||||
this.clearSearch();
|
this.clearSearch();
|
||||||
}
|
}
|
||||||
return;
|
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
|
||||||
this.selectedIndex = 0;
|
// automatically if not forced (by tests) or in tandem with an operator.
|
||||||
|
if (this._autoSelectFirstItem || DebuggerView.Filtering.searchOperator) {
|
||||||
|
this.selectedIndex = 0;
|
||||||
|
}
|
||||||
this.hidden = false;
|
this.hidden = false;
|
||||||
|
|
||||||
// Signal that file search matches were found and displayed.
|
// 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
|
||||||
this.selectedIndex = 0;
|
// automatically if not forced (by tests).
|
||||||
|
if (this._autoSelectFirstItem) {
|
||||||
|
this.selectedIndex = 0;
|
||||||
|
}
|
||||||
this.hidden = false;
|
this.hidden = false;
|
||||||
|
|
||||||
// Signal that function search matches were found and displayed.
|
// Signal that function search matches were found and displayed.
|
||||||
|
|
|
@ -690,6 +690,8 @@ ResultsPanelContainer.prototype = Heritage.extend(WidgetMethods, {
|
||||||
}
|
}
|
||||||
if (!this.widget) {
|
if (!this.widget) {
|
||||||
this.widget = new SimpleListWidget(this._panel);
|
this.widget = new SimpleListWidget(this._panel);
|
||||||
|
this.autoFocusOnFirstItem = false;
|
||||||
|
this.autoFocusOnSelection = false;
|
||||||
this.maintainSelectionVisible = false;
|
this.maintainSelectionVisible = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -175,6 +175,7 @@ support-files =
|
||||||
[browser_dbg_search-global-04.js]
|
[browser_dbg_search-global-04.js]
|
||||||
[browser_dbg_search-global-05.js]
|
[browser_dbg_search-global-05.js]
|
||||||
[browser_dbg_search-global-06.js]
|
[browser_dbg_search-global-06.js]
|
||||||
|
[browser_dbg_search-popup-jank.js]
|
||||||
[browser_dbg_search-sources-01.js]
|
[browser_dbg_search-sources-01.js]
|
||||||
[browser_dbg_search-sources-02.js]
|
[browser_dbg_search-sources-02.js]
|
||||||
[browser_dbg_search-sources-03.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) {
|
function prepareDebugger(aDebugger) {
|
||||||
if ("target" in aDebugger) {
|
if ("target" in aDebugger) {
|
||||||
let variables = aDebugger.panelWin.DebuggerView.Variables;
|
let view = aDebugger.panelWin.DebuggerView;
|
||||||
variables.lazyEmpty = false;
|
view.Variables.lazyEmpty = false;
|
||||||
variables.lazySearch = false;
|
view.Variables.lazySearch = false;
|
||||||
|
view.FilteredSources._autoSelectFirstItem = true;
|
||||||
|
view.FilteredFunctions._autoSelectFirstItem = true;
|
||||||
} else {
|
} else {
|
||||||
// Nothing to do here yet.
|
// Nothing to do here yet.
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче