aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2015-03-06 13:45:36 +0000
committerStephen Blott2015-03-06 13:45:36 +0000
commit3c988a07a64a5bf4cab9ec98fe4d377c2af2208e (patch)
treefd91f6c98c975ebc64782730839e3e84ed7450fa
parent5b6014c2f6d3fa24c04fbb5435fe79896f400001 (diff)
downloadvimium-3c988a07a64a5bf4cab9ec98fe4d377c2af2208e.tar.bz2
Remove need for short delay to prevent vomnibar flicker.
This delivers a "hidden" massage to the vomnibar after the vomnibar has been hiddent in the host page. The vomnibar only performs whatever action is required when it receives this "hidden" message.
-rw-r--r--content_scripts/ui_component.coffee2
-rw-r--r--content_scripts/vomnibar.coffee5
-rw-r--r--pages/vomnibar.coffee20
3 files changed, 19 insertions, 8 deletions
diff --git a/content_scripts/ui_component.coffee b/content_scripts/ui_component.coffee
index c6b59464..47ff995e 100644
--- a/content_scripts/ui_component.coffee
+++ b/content_scripts/ui_component.coffee
@@ -46,7 +46,7 @@ class UIComponent
hide: (focusWindow = true)->
@iframeElement.classList.remove "vimiumUIComponentShowing"
@iframeElement.classList.add "vimiumUIComponentHidden"
- window.removeEventListener @onFocus if @onFocus
+ window.removeEventListener "focus", @onFocus if @onFocus
@onFocus = null
window.focus() if focusWindow
@showing = false
diff --git a/content_scripts/vomnibar.coffee b/content_scripts/vomnibar.coffee
index 6381fd7f..c4cfc8b9 100644
--- a/content_scripts/vomnibar.coffee
+++ b/content_scripts/vomnibar.coffee
@@ -38,7 +38,10 @@ Vomnibar =
init: ->
unless @vomnibarUI?
@vomnibarUI = new UIComponent "pages/vomnibar.html", "vomnibarFrame", (event) =>
- @vomnibarUI.hide() if event.data == "hide"
+ if event.data == "hide"
+ @vomnibarUI.hide()
+ @vomnibarUI.postMessage "hidden"
+
# This function opens the vomnibar. It accepts options, a map with the values:
# completer - The completer to fetch results from.
diff --git a/pages/vomnibar.coffee b/pages/vomnibar.coffee
index 8243b696..906aa0f3 100644
--- a/pages/vomnibar.coffee
+++ b/pages/vomnibar.coffee
@@ -39,10 +39,12 @@ Vomnibar =
@vomnibarUI.update()
hide: -> @vomnibarUI?.hide()
+ onHidden: -> @vomnibarUI?.onHidden()
class VomnibarUI
constructor: ->
@refreshInterval = 0
+ @postHideCallback = null
@initDom()
setQuery: (query) -> @input.value = query
@@ -59,13 +61,10 @@ class VomnibarUI
setForceNewTab: (forceNewTab) -> @forceNewTab = forceNewTab
- # Hide the vomnibar, then call callback. We add a short delay to allow the vomnibar to close before the
- # action is performed. This ensures (hopefully) that the vomnibar isn't visible when the tab is
- # subsequently refocused (see #1485).
- hide: (callback = ->) ->
+ hide: (callback = null) ->
UIComponentServer.postMessage "hide"
@reset()
- setTimeout callback, 20
+ @postHideCallback = callback
reset: ->
@completionList.style.display = ""
@@ -74,6 +73,12 @@ class VomnibarUI
@completions = []
@selection = @initialSelectionValue
+ # Called after the vomnibar has been hidden. We wait until after the vomnibar has been hidden to avoid
+ # vomnibar flicker (see #1485).
+ onHidden: ->
+ @postHideCallback?()
+ @postHideCallback = null
+
updateSelection: ->
# We retain global state here (previousAutoSelect) to tell if a search item (for which autoSelect is set)
# has just appeared or disappeared. If that happens, we set @selection to 0 or -1.
@@ -238,7 +243,10 @@ extend BackgroundCompleter,
switchToTab: (tabId) -> chrome.runtime.sendMessage({ handler: "selectSpecificTab", id: tabId })
UIComponentServer.registerHandler (event) ->
- if event.data == "hide" then Vomnibar.hide() else Vomnibar.activate event.data
+ switch event.data
+ when "hide" then Vomnibar.hide()
+ when "hidden" then Vomnibar.onHidden()
+ else Vomnibar.activate event.data
root = exports ? window
root.Vomnibar = Vomnibar