From aa74f11ad3972547af6865e97d8f7ea5372cc394 Mon Sep 17 00:00:00 2001 From: Simon Lydell Date: Sun, 8 May 2016 11:24:16 +0200 Subject: [PATCH] Fix devtools detection in newer Firefox versions --- extension/lib/hints.coffee | 4 ++-- extension/lib/modes.coffee | 2 +- extension/lib/utils.coffee | 14 +++++++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/extension/lib/hints.coffee b/extension/lib/hints.coffee index 8f7b1a5..e678538 100644 --- a/extension/lib/hints.coffee +++ b/extension/lib/hints.coffee @@ -291,8 +291,8 @@ getFirstNonCoveredPoint = (window, viewport, element, elementRect, parents) -> currentWindow = window for parent in parents by -1 # If leaving the devtools container take the devtools zoom into account. - if currentWindow.DevTools and not parent.window.DevTools - toolbox = window.gDevTools.getToolbox( + if utils.isDevtoolsWindow(currentWindow) + toolbox = window.top.gDevTools.getToolbox( devtools.TargetFactory.forTab(window.top.gBrowser.selectedTab) ) if toolbox diff --git a/extension/lib/modes.coffee b/extension/lib/modes.coffee index 9046dcd..5aa9b77 100644 --- a/extension/lib/modes.coffee +++ b/extension/lib/modes.coffee @@ -100,7 +100,7 @@ mode('normal', { # dialog (). However, an exception is made for the devtools (). # There, trying to unfocus the devtools using Escape would annoyingly # open the split console. - return uiEvent.originalTarget.ownerGlobal.DevTools? + return utils.isDevtoolsElement(uiEvent.originalTarget) else # In web pages content, an exception is made if an element that VimFx # cares about is focused. That allows for blurring an input in a custom diff --git a/extension/lib/utils.coffee b/extension/lib/utils.coffee index 6195beb..d12a841 100644 --- a/extension/lib/utils.coffee +++ b/extension/lib/utils.coffee @@ -76,7 +76,7 @@ isAdjustable = (element) -> element.classList?.contains('ytp-button') or # Allow navigating object inspection trees in th devtools with the # arrow keys, even if the arrow keys are used as VimFx shortcuts. - element.ownerGlobal?.DevTools + isDevtoolsElement(element) isContentEditable = (element) -> return element.isContentEditable or @@ -87,6 +87,16 @@ isContentEditable = (element) -> # Codeacademy terminals. element.classList?.contains('real-terminal') +isDevtoolsElement = (element) -> + return false unless element.ownerGlobal + return Array.some(element.ownerGlobal.top.frames, isDevtoolsWindow) + +isDevtoolsWindow = (window) -> + return window.location?.href in [ + 'about:devtools-toolbox' + 'chrome://devtools/content/framework/toolbox.xul' + ] + isFocusable = (element) -> return element.tabIndex > -1 and not (element.localName?.endsWith?('box') and @@ -556,6 +566,8 @@ module.exports = { isActivatable isAdjustable isContentEditable + isDevtoolsElement + isDevtoolsWindow isFocusable isIframeEditor isIgnoreModeFocusType -- 2.39.3