Make the clearing of find highlights, when closing the findbar, asynchronous
Since searching itself is an asynchronous operation, removal of highlights needs to be asynchronous too since otherwise there's a risk that the events happen in the wrong order and find highlights thus remain visible. Also, this patch will now ensure that only 'findbarclose' events for the *current* document is handled since other ones doesn't really matter. Note in particular that when no document is loaded text-layers are, obviously, not present and subsequently it's unnecessary to attempt to hide non-existent find highlights.
This commit is contained in:
parent
236871c68b
commit
6be4921eaf
@ -58,15 +58,7 @@ class PDFFindController {
|
||||
this._eventBus = eventBus;
|
||||
|
||||
this._reset();
|
||||
|
||||
eventBus.on('findbarclose', () => {
|
||||
this._highlightMatches = false;
|
||||
|
||||
eventBus.dispatch('updatetextlayermatches', {
|
||||
source: this,
|
||||
pageIndex: -1,
|
||||
});
|
||||
});
|
||||
eventBus.on('findbarclose', this._onFindBarClose.bind(this));
|
||||
|
||||
// Compile the regular expression for text normalization once.
|
||||
const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join('');
|
||||
@ -556,6 +548,32 @@ class PDFFindController {
|
||||
}
|
||||
}
|
||||
|
||||
_onFindBarClose(evt) {
|
||||
const pdfDocument = this._pdfDocument;
|
||||
// Since searching is asynchronous, ensure that the removal of highlighted
|
||||
// matches (from the UI) is async too such that the 'updatetextlayermatches'
|
||||
// events will always be dispatched in the expected order.
|
||||
this._firstPagePromise.then(() => {
|
||||
if (!this._pdfDocument ||
|
||||
(pdfDocument && this._pdfDocument !== pdfDocument)) {
|
||||
// Only update the UI if the document is open, and is the current one.
|
||||
return;
|
||||
}
|
||||
if (this._findTimeout) {
|
||||
clearTimeout(this._findTimeout);
|
||||
this._findTimeout = null;
|
||||
// Avoid the UI being in a pending state if the findbar is re-opened.
|
||||
this._updateUIState(FindState.FOUND);
|
||||
}
|
||||
this._highlightMatches = false;
|
||||
|
||||
this._eventBus.dispatch('updatetextlayermatches', {
|
||||
source: this,
|
||||
pageIndex: -1,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
_requestMatchesCount() {
|
||||
const { pageIdx, matchIdx, } = this._selected;
|
||||
let current = 0, total = this._matchesCountTotal;
|
||||
|
Loading…
Reference in New Issue
Block a user