зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1467537 - The delete trigger on moz_updateoriginsinsert_temp is recalculating the whole table every time. r=adw
The trigger is missing a WHERE clause, and as such it ends up doing a lot more work than necessary. The nsAutoCompleteController changes cover a bug where VK_RIGHT autofills when it's not necessary, and by doing that it will move the caret to an unexpected position (far right) even if it didn't actually complete some preselected text. MozReview-Commit-ID: 1mVbxCdqVSr --HG-- extra : rebase_source : 9a7e13cc62dfe0ae95210e7a75068d07a0b7c275
This commit is contained in:
Родитель
8235ee12de
Коммит
944f20e73f
|
@ -4,6 +4,7 @@
|
||||||
add_task(async function() {
|
add_task(async function() {
|
||||||
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
|
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
|
||||||
await promiseAutocompleteResultPopup("www.mozilla.org");
|
await promiseAutocompleteResultPopup("www.mozilla.org");
|
||||||
|
await waitForAutocompleteResultAt(0);
|
||||||
|
|
||||||
gURLBar.selectTextRange(4, 4);
|
gURLBar.selectTextRange(4, 4);
|
||||||
|
|
||||||
|
|
|
@ -574,32 +574,30 @@ nsAutoCompleteController::HandleKeyNavigation(uint32_t aKey, bool *_retval)
|
||||||
// For completeSelectedIndex autocomplete fields, if the popup shouldn't
|
// For completeSelectedIndex autocomplete fields, if the popup shouldn't
|
||||||
// close when the caret is moved, don't adjust the text value or caret
|
// close when the caret is moved, don't adjust the text value or caret
|
||||||
// position.
|
// position.
|
||||||
|
bool completeSelection;
|
||||||
|
input->GetCompleteSelectedIndex(&completeSelection);
|
||||||
if (isOpen) {
|
if (isOpen) {
|
||||||
bool noRollup;
|
bool noRollup;
|
||||||
input->GetNoRollupOnCaretMove(&noRollup);
|
input->GetNoRollupOnCaretMove(&noRollup);
|
||||||
if (noRollup) {
|
if (noRollup) {
|
||||||
bool completeSelection;
|
|
||||||
input->GetCompleteSelectedIndex(&completeSelection);
|
|
||||||
if (completeSelection) {
|
if (completeSelection) {
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t selectionEnd;
|
||||||
|
input->GetSelectionEnd(&selectionEnd);
|
||||||
|
int32_t selectionStart;
|
||||||
|
input->GetSelectionStart(&selectionStart);
|
||||||
|
bool shouldCompleteSelection =
|
||||||
|
(uint32_t)selectionEnd == mPlaceholderCompletionString.Length() &&
|
||||||
|
selectionStart < selectionEnd;
|
||||||
int32_t selectedIndex;
|
int32_t selectedIndex;
|
||||||
popup->GetSelectedIndex(&selectedIndex);
|
popup->GetSelectedIndex(&selectedIndex);
|
||||||
bool shouldComplete;
|
bool completeDefaultIndex;
|
||||||
input->GetCompleteDefaultIndex(&shouldComplete);
|
input->GetCompleteDefaultIndex(&completeDefaultIndex);
|
||||||
if (selectedIndex >= 0) {
|
if (completeDefaultIndex && shouldCompleteSelection) {
|
||||||
// The pop-up is open and has a selection, take its value
|
|
||||||
nsAutoString value;
|
|
||||||
if (NS_SUCCEEDED(GetResultValueAt(selectedIndex, false, value))) {
|
|
||||||
SetValueOfInputTo(
|
|
||||||
value, nsIAutoCompleteInput::TEXTVALUE_REASON_COMPLETESELECTED);
|
|
||||||
input->SelectTextRange(value.Length(), value.Length());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (shouldComplete) {
|
|
||||||
// We usually try to preserve the casing of what user has typed, but
|
// We usually try to preserve the casing of what user has typed, but
|
||||||
// if he wants to autocomplete, we will replace the value with the
|
// if he wants to autocomplete, we will replace the value with the
|
||||||
// actual autocomplete result. Note that the autocomplete input can also
|
// actual autocomplete result. Note that the autocomplete input can also
|
||||||
|
@ -625,6 +623,15 @@ nsAutoCompleteController::HandleKeyNavigation(uint32_t aKey, bool *_retval)
|
||||||
input->SelectTextRange(value.Length(), value.Length());
|
input->SelectTextRange(value.Length(), value.Length());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (!completeDefaultIndex && !completeSelection &&
|
||||||
|
selectedIndex >= 0) {
|
||||||
|
// The pop-up is open and has a selection, take its value
|
||||||
|
nsAutoString value;
|
||||||
|
if (NS_SUCCEEDED(GetResultValueAt(selectedIndex, false, value))) {
|
||||||
|
SetValueOfInputTo(
|
||||||
|
value, nsIAutoCompleteInput::TEXTVALUE_REASON_COMPLETESELECTED);
|
||||||
|
input->SelectTextRange(value.Length(), value.Length());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the pop-up even if nothing was selected
|
// Close the pop-up even if nothing was selected
|
||||||
|
|
|
@ -144,7 +144,8 @@
|
||||||
"SELECT IFNULL(MAX(frecency), 0) " \
|
"SELECT IFNULL(MAX(frecency), 0) " \
|
||||||
"FROM moz_places " \
|
"FROM moz_places " \
|
||||||
"WHERE moz_places.origin_id = moz_origins.id " \
|
"WHERE moz_places.origin_id = moz_origins.id " \
|
||||||
"); " \
|
") " \
|
||||||
|
"WHERE prefix = OLD.prefix AND host = OLD.host; " \
|
||||||
"END" \
|
"END" \
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче