From d5232f5b5a24efb1fa90a3f41ebd68d513661d6b Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 23 Jul 2015 12:04:49 +0200 Subject: [PATCH 1/2] Ensure that the viewer always receives focus when the HOME/END keys are pressed (bug 1186842) It appears that I broke this with PR 4941. Fixes https://bugzilla.mozilla.org/show_bug.cgi?id=1186842. --- web/viewer.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/web/viewer.js b/web/viewer.js index fc6e8f3ba..9bbe8d878 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1993,6 +1993,9 @@ window.addEventListener('keydown', function keydown(evt) { if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { PDFViewerApplication.page = 1; handled = true; + if (!pdfViewer.containsElement(curElement)) { + pdfViewer.focus(); + } } break; case 35: // end @@ -2000,6 +2003,9 @@ window.addEventListener('keydown', function keydown(evt) { PDFViewerApplication.page < PDFViewerApplication.pagesCount)) { PDFViewerApplication.page = PDFViewerApplication.pagesCount; handled = true; + if (!pdfViewer.containsElement(curElement)) { + pdfViewer.focus(); + } } break; From 8275dff1b1ff7e4756b1e24ad6173bd283094bfe Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 23 Jul 2015 12:25:19 +0200 Subject: [PATCH 2/2] Reduce code duplication in the 'keydown' event handler in `viewer.js`, by re-factoring the code which ensures that the `viewerContainer` is focused --- web/viewer.js | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/web/viewer.js b/web/viewer.js index 9bbe8d878..e6270977d 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1935,6 +1935,7 @@ window.addEventListener('keydown', function keydown(evt) { return; } } + var ensureViewerFocused = false; if (cmd === 0) { // no control key pressed at all. switch (evt.keyCode) { @@ -1993,9 +1994,7 @@ window.addEventListener('keydown', function keydown(evt) { if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { PDFViewerApplication.page = 1; handled = true; - if (!pdfViewer.containsElement(curElement)) { - pdfViewer.focus(); - } + ensureViewerFocused = true; } break; case 35: // end @@ -2003,9 +2002,7 @@ window.addEventListener('keydown', function keydown(evt) { PDFViewerApplication.page < PDFViewerApplication.pagesCount)) { PDFViewerApplication.page = PDFViewerApplication.pagesCount; handled = true; - if (!pdfViewer.containsElement(curElement)) { - pdfViewer.focus(); - } + ensureViewerFocused = true; } break; @@ -2040,17 +2037,10 @@ window.addEventListener('keydown', function keydown(evt) { if (!handled && !isViewerInPresentationMode) { // 33=Page Up 34=Page Down 35=End 36=Home // 37=Left 38=Up 39=Right 40=Down - if (evt.keyCode >= 33 && evt.keyCode <= 40 && - !pdfViewer.containsElement(curElement)) { - // The page container is not focused, but a page navigation key has been - // pressed. Change the focus to the viewer container to make sure that - // navigation by keyboard works as expected. - pdfViewer.focus(); - } // 32=Spacebar - if (evt.keyCode === 32 && curElementTagName !== 'BUTTON' && - !pdfViewer.containsElement(curElement)) { - pdfViewer.focus(); + if ((evt.keyCode >= 33 && evt.keyCode <= 40) || + (evt.keyCode === 32 && curElementTagName !== 'BUTTON')) { + ensureViewerFocused = true; } } @@ -2071,6 +2061,13 @@ window.addEventListener('keydown', function keydown(evt) { } } + if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) { + // The page container is not focused, but a page navigation key has been + // pressed. Change the focus to the viewer container to make sure that + // navigation by keyboard works as expected. + pdfViewer.focus(); + } + if (handled) { evt.preventDefault(); }