From 1c7ea026d3c7add53098e0f463a00582bb821c01 Mon Sep 17 00:00:00 2001 From: Simon Lydell Date: Mon, 16 Nov 2015 21:54:21 +0100 Subject: [PATCH] Fix broken notifications I got it wrong in commit 340584c8 and believed that only one `` was needed per window, but one is actually needed for every _tab._ Luckily, the code became a lot simpler. --- extension/lib/main.coffee | 2 -- extension/lib/status-panel.coffee | 26 +++----------------------- extension/lib/vim.coffee | 10 ++++++++++ 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/extension/lib/main.coffee b/extension/lib/main.coffee index 5f48d6d..1647c4f 100644 --- a/extension/lib/main.coffee +++ b/extension/lib/main.coffee @@ -30,7 +30,6 @@ modes = require('./modes') options = require('./options') parsePref = require('./parse-prefs') prefs = require('./prefs') -statusPanel = require('./status-panel') utils = require('./utils') VimFx = require('./vimfx') test = try require('../test/index') @@ -121,7 +120,6 @@ module.exports = (data, reason) -> eventManager = new UIEventManager(vimfx, window) eventManager.addListeners(vimfx, window) window.document.documentElement.setAttribute('vimfx-mode', 'normal') - statusPanel.injectStatusPanel(browser, vimfx) return [__SCRIPT_URI_SPEC__, MULTI_PROCESS_ENABLED] ) diff --git a/extension/lib/status-panel.coffee b/extension/lib/status-panel.coffee index f575b3b..fa27fac 100644 --- a/extension/lib/status-panel.coffee +++ b/extension/lib/status-panel.coffee @@ -22,7 +22,7 @@ utils = require('./utils') -injectStatusPanel = (browser, vimfx) -> +injectStatusPanel = (browser) -> window = browser.ownerGlobal statusPanel = window.document.createElement('statuspanel') @@ -31,32 +31,12 @@ injectStatusPanel = (browser, vimfx) -> layer: 'true' mirror: 'true' }) + statusPanel.style.pointerEvents = 'auto' - # The current browser can usually be retrieved from `window`. However, this - # runs too early. Instead a browser known to exist is passed in. (_Which_ - # browser is passed doesn’t matter since only their common container is used.) window.gBrowser.getBrowserContainer(browser).appendChild(statusPanel) module.onShutdown(-> statusPanel.remove()) - shouldHandleNotification = (vim) -> - return vimfx.options.notifications_enabled and - vim.window == window and vim == vimfx.getCurrentVim(window) - - vimfx.on('notification', ({vim, message}) -> - return unless shouldHandleNotification(vim) - statusPanel.setAttribute('label', message) - statusPanel.removeAttribute('inactive') - ) - - vimfx.on('hideNotification', ({vim}) -> - return unless shouldHandleNotification(vim) - statusPanel.setAttribute('inactive', 'true') - ) - - statusPanel.style.pointerEvents = 'auto' - utils.listen(statusPanel, 'click', -> - vimfx.emit('hideNotification') - ) + return statusPanel module.exports = { injectStatusPanel diff --git a/extension/lib/vim.coffee b/extension/lib/vim.coffee index e75346e..55f0f04 100644 --- a/extension/lib/vim.coffee +++ b/extension/lib/vim.coffee @@ -25,6 +25,7 @@ # should not be used by API consumers. messageManager = require('./message-manager') +statusPanel = require('./status-panel') utils = require('./utils') ChromeWindow = Ci.nsIDOMChromeWindow @@ -79,6 +80,11 @@ class Vim @browser = browser @window = @browser.ownerGlobal @_messageManager = @browser.messageManager + + @_statusPanel?.remove() + @_statusPanel = statusPanel.injectStatusPanel(@browser) + @_statusPanel.onclick = @hideNotification.bind(this) + @_addListeners() if refresh _resetState: -> @@ -141,9 +147,13 @@ class Vim notify: (message) -> @_parent.emit('notification', {vim: this, message}) + if @_parent.options.notifications_enabled + @_statusPanel.setAttribute('label', message) + @_statusPanel.removeAttribute('inactive') hideNotification: -> @_parent.emit('hideNotification', {vim: this}) + @_statusPanel.setAttribute('inactive', 'true') markPageInteraction: -> @_send('markPageInteraction') -- 2.39.3