diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index 3108d4c2c..bd67134b6 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -259,8 +259,6 @@ class PDFPageView { } cancelRendering(keepAnnotations = false) { - const renderingState = this.renderingState; - if (this.paintTask) { this.paintTask.cancel(); this.paintTask = null; @@ -276,14 +274,6 @@ class PDFPageView { this.annotationLayer.cancel(); this.annotationLayer = null; } - - if (renderingState !== RenderingStates.INITIAL) { - this.eventBus.dispatch('pagecancelled', { - source: this, - pageNumber: this.id, - renderingState, - }); - } } cssTransform(target, redrawAnnotations = false) { diff --git a/web/text_layer_builder.js b/web/text_layer_builder.js index e09819115..6a59e5527 100644 --- a/web/text_layer_builder.js +++ b/web/text_layer_builder.js @@ -53,9 +53,7 @@ class TextLayerBuilder { this.textLayerRenderTask = null; this.enhanceTextSelection = enhanceTextSelection; - this._boundEvents = Object.create(null); - this._bindEvents(); - + this._onUpdateTextLayerMatches = null; this._bindMouse(); } @@ -109,6 +107,16 @@ class TextLayerBuilder { }, function (reason) { // Cancelled or failed to render text layer; skipping errors. }); + + if (!this._onUpdateTextLayerMatches) { + this._onUpdateTextLayerMatches = (evt) => { + if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) { + this._updateMatches(); + } + }; + this.eventBus.on('updatetextlayermatches', + this._onUpdateTextLayerMatches); + } } /** @@ -119,6 +127,11 @@ class TextLayerBuilder { this.textLayerRenderTask.cancel(); this.textLayerRenderTask = null; } + if (this._onUpdateTextLayerMatches) { + this.eventBus.off('updatetextlayermatches', + this._onUpdateTextLayerMatches); + this._onUpdateTextLayerMatches = null; + } } setTextContentStream(readableStream) { @@ -314,40 +327,6 @@ class TextLayerBuilder { this._renderMatches(this.matches); } - /** - * @private - */ - _bindEvents() { - const { eventBus, _boundEvents, } = this; - - _boundEvents.pageCancelled = (evt) => { - if (evt.pageNumber !== this.pageNumber) { - return; - } - if (this.textLayerRenderTask) { - console.error('TextLayerBuilder._bindEvents: `this.cancel()` should ' + - 'have been called when the page was reset, or rendering cancelled.'); - return; - } - // Ensure that all event listeners are cleaned up when the page is reset, - // since re-rendering will create new `TextLayerBuilder` instances and the - // number of (stale) event listeners would otherwise grow without bound. - for (const name in _boundEvents) { - eventBus.off(name.toLowerCase(), _boundEvents[name]); - delete _boundEvents[name]; - } - }; - _boundEvents.updateTextLayerMatches = (evt) => { - if (evt.pageIndex !== this.pageIdx && evt.pageIndex !== -1) { - return; - } - this._updateMatches(); - }; - - eventBus.on('pagecancelled', _boundEvents.pageCancelled); - eventBus.on('updatetextlayermatches', _boundEvents.updateTextLayerMatches); - } - /** * Improves text selection by adding an additional div where the mouse was * clicked. This reduces flickering of the content if the mouse is slowly