Clear all find highlights when the findbar is closed (issue 7468)

Please note that this will require a `mozilla-central` follow-up patch, in order for this to work in the built-in Firefox PDF viewer as well.
This commit is contained in:
Jonas Jenwald 2018-09-22 15:31:33 +02:00
parent 1eaa3b8a08
commit f29b4d1116
4 changed files with 39 additions and 11 deletions

View File

@ -169,20 +169,27 @@ class MozL10n {
'findhighlightallchange', 'findhighlightallchange',
'findcasesensitivitychange', 'findcasesensitivitychange',
'findentirewordchange', 'findentirewordchange',
'findbarclose',
]; ];
let handleEvent = function(evt) { let handleEvent = function({ type, detail, }) {
if (!PDFViewerApplication.initialized) { if (!PDFViewerApplication.initialized) {
return; return;
} }
if (type === 'findbarclose') {
PDFViewerApplication.eventBus.dispatch('findbarclose', {
source: window,
});
return;
}
PDFViewerApplication.eventBus.dispatch('find', { PDFViewerApplication.eventBus.dispatch('find', {
source: window, source: window,
type: evt.type.substring('find'.length), type: type.substring('find'.length),
query: evt.detail.query, query: detail.query,
phraseSearch: true, phraseSearch: true,
caseSensitive: !!evt.detail.caseSensitive, caseSensitive: !!detail.caseSensitive,
entireWord: !!evt.detail.entireWord, entireWord: !!detail.entireWord,
highlightAll: !!evt.detail.highlightAll, highlightAll: !!detail.highlightAll,
findPrevious: !!evt.detail.findPrevious, findPrevious: !!detail.findPrevious,
}); });
}; };

View File

@ -216,7 +216,8 @@ class PDFFindBar {
this.opened = false; this.opened = false;
this.toggleButton.classList.remove('toggled'); this.toggleButton.classList.remove('toggled');
this.bar.classList.add('hidden'); this.bar.classList.add('hidden');
this.findController.active = false;
this.eventBus.dispatch('findbarclose', { source: this, });
} }
toggle() { toggle() {

View File

@ -53,11 +53,24 @@ class PDFFindController {
this.reset(); this.reset();
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('');
this._normalizationRegex = new RegExp(`[${replace}]`, 'g'); this._normalizationRegex = new RegExp(`[${replace}]`, 'g');
} }
get highlightMatches() {
return this._highlightMatches;
}
get pageMatches() { get pageMatches() {
return this._pageMatches; return this._pageMatches;
} }
@ -75,7 +88,7 @@ class PDFFindController {
} }
reset() { reset() {
this.active = false; // If active, find results will be highlighted. this._highlightMatches = false;
this._pageMatches = []; this._pageMatches = [];
this._pageMatchesLength = null; this._pageMatchesLength = null;
this._state = null; this._state = null;
@ -353,7 +366,7 @@ class PDFFindController {
const currentPageIndex = this._pdfViewer.currentPageNumber - 1; const currentPageIndex = this._pdfViewer.currentPageNumber - 1;
const numPages = this._pdfViewer.pagesCount; const numPages = this._pdfViewer.pagesCount;
this.active = true; this._highlightMatches = true;
if (this._dirtyMatch) { if (this._dirtyMatch) {
// Need to recalculate the matches, reset everything. // Need to recalculate the matches, reset everything.

View File

@ -317,7 +317,7 @@ class TextLayerBuilder {
clearedUntilDivIdx = match.end.divIdx + 1; clearedUntilDivIdx = match.end.divIdx + 1;
} }
if (this.findController === null || !this.findController.active) { if (!this.findController || !this.findController.highlightMatches) {
return; return;
} }
@ -357,8 +357,15 @@ class TextLayerBuilder {
delete _boundEvents[name]; delete _boundEvents[name];
} }
}; };
_boundEvents.updateTextLayerMatches = (evt) => {
if (evt.pageIndex !== -1) {
return;
}
this.updateMatches();
};
eventBus.on('pagecancelled', _boundEvents.pageCancelled); eventBus.on('pagecancelled', _boundEvents.pageCancelled);
eventBus.on('updatetextlayermatches', _boundEvents.updateTextLayerMatches);
} }
/** /**