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._eventBus = eventBus;
|
||||||
|
|
||||||
this._reset();
|
this._reset();
|
||||||
|
eventBus.on('findbarclose', this._onFindBarClose.bind(this));
|
||||||
eventBus.on('findbarclose', () => {
|
|
||||||
this._highlightMatches = false;
|
|
||||||
|
|
||||||
eventBus.dispatch('updatetextlayermatches', {
|
|
||||||
source: this,
|
|
||||||
pageIndex: -1,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Compile the regular expression for text normalization once.
|
// Compile the regular expression for text normalization once.
|
||||||
const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join('');
|
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() {
|
_requestMatchesCount() {
|
||||||
const { pageIdx, matchIdx, } = this._selected;
|
const { pageIdx, matchIdx, } = this._selected;
|
||||||
let current = 0, total = this._matchesCountTotal;
|
let current = 0, total = this._matchesCountTotal;
|
||||||
|
Loading…
Reference in New Issue
Block a user