Index: lib/ui.js |
=================================================================== |
--- a/lib/ui.js |
+++ b/lib/ui.js |
@@ -279,16 +279,19 @@ let UI = exports.UI = |
request.open("GET", "chrome://adblockplus/content/ui/overlay.xul"); |
request.addEventListener("load", function(event) |
{ |
if (onShutdown.done) |
return; |
this.processOverlay(request.responseXML.documentElement); |
+ // Don't wait for the rest of the startup sequence, add icon already |
+ this.addToolbarButton(); |
+ |
overlayLoaded = true; |
if (overlayLoaded && filtersLoaded && sessionRestored) |
this.initDone(); |
}.bind(this), false); |
request.send(null); |
// Wait for filters to load |
if (FilterStorage._loading) |
@@ -391,20 +394,65 @@ let UI = exports.UI = |
}, |
/** |
* Gets called once the initialization is finished and Adblock Plus elements |
* can be added to the UI. |
*/ |
initDone: function() |
{ |
+ // The icon might be added already, make sure its state is correct |
+ this.updateState(); |
+ |
+ // Listen for pref and filters changes |
+ Prefs.addListener(function(name) |
+ { |
+ if (name == "enabled" || name == "defaulttoolbaraction" || name == "defaultstatusbaraction") |
+ this.updateState(); |
+ else if (name == "showinstatusbar") |
+ { |
+ for (let window in this.applicationWindows) |
+ this.updateStatusbarIcon(window); |
+ } |
+ }.bind(this)); |
+ FilterNotifier.addListener(function(action) |
+ { |
+ if (/^(filter|subscription)\.(added|removed|disabled|updated)$/.test(action) || action == "load") |
+ this.updateState(); |
+ }.bind(this)); |
+ |
+ notificationTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); |
+ notificationTimer.initWithCallback(this.showNextNotification.bind(this), |
+ 3 * 60 * 1000, Ci.nsITimer.TYPE_ONE_SHOT); |
+ onShutdown.add(function() notificationTimer.cancel()); |
+ |
+ // Add "anti-adblock messages" notification |
+ initAntiAdblockNotification(); |
+ |
+ let documentCreationObserver = { |
+ observe: function(subject, topic, data) |
+ { |
+ if (!(subject instanceof Ci.nsIDOMWindow)) |
+ return; |
+ |
+ this.showNextNotification(subject.location.href); |
+ }.bind(UI) |
+ }; |
+ Services.obs.addObserver(documentCreationObserver, "content-document-global-created", false); |
+ onShutdown.add(function() |
+ { |
+ Services.obs.removeObserver(documentCreationObserver, "content-document-global-created", false); |
+ }); |
+ }, |
+ |
+ addToolbarButton: function() |
+ { |
let {WindowObserver} = require("windowObserver"); |
new WindowObserver(this); |
- // Add toolbar icon |
let {defaultToolbarPosition} = require("appSupport"); |
if ("abp-toolbarbutton" in this.overlay && defaultToolbarPosition) |
{ |
try |
{ |
({CustomizableUI}) = Cu.import("resource:///modules/CustomizableUI.jsm", null); |
} |
catch (e) |
@@ -435,56 +483,16 @@ let UI = exports.UI = |
{ |
// For emulation only, this callback isn't part of the official |
// CustomizableUI API. |
this.updateIconState(node.ownerDocument.defaultView, node); |
}.bind(this), |
}); |
onShutdown.add(CustomizableUI.destroyWidget.bind(CustomizableUI, "abp-toolbarbutton")); |
} |
- |
- // Listen for pref and filters changes |
- Prefs.addListener(function(name) |
- { |
- if (name == "enabled" || name == "defaulttoolbaraction" || name == "defaultstatusbaraction") |
- this.updateState(); |
- else if (name == "showinstatusbar") |
- { |
- for (let window in this.applicationWindows) |
- this.updateStatusbarIcon(window); |
- } |
- }.bind(this)); |
- FilterNotifier.addListener(function(action) |
- { |
- if (/^(filter|subscription)\.(added|removed|disabled|updated)$/.test(action) || action == "load") |
- this.updateState(); |
- }.bind(this)); |
- |
- notificationTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); |
- notificationTimer.initWithCallback(this.showNextNotification.bind(this), |
- 3 * 60 * 1000, Ci.nsITimer.TYPE_ONE_SHOT); |
- onShutdown.add(function() notificationTimer.cancel()); |
- |
- // Add "anti-adblock messages" notification |
- initAntiAdblockNotification(); |
- |
- let documentCreationObserver = { |
- observe: function(subject, topic, data) |
- { |
- if (!(subject instanceof Ci.nsIDOMWindow)) |
- return; |
- |
- this.showNextNotification(subject.location.href); |
- }.bind(UI) |
- }; |
- Services.obs.addObserver(documentCreationObserver, "content-document-global-created", false); |
- onShutdown.add(function() |
- { |
- Services.obs.removeObserver(documentCreationObserver, "content-document-global-created", false); |
- }); |
}, |
/** |
* Will be set to true after the check whether first-run actions should run |
* has been performed. |
* @type Boolean |
*/ |
firstRunDone: false, |
@@ -1273,16 +1281,19 @@ let UI = exports.UI = |
/** |
* Handles click on toolbar and status bar icons. |
*/ |
onIconClick: function(/**Event*/ event) |
{ |
if (event.eventPhase != event.AT_TARGET) |
return; |
+ if (FilterStorage._loading) |
+ return; |
Wladimir Palant
2014/05/23 11:50:50
I guess I could just as well remove that failsafe
Thomas Greiner
2014/05/23 16:10:31
Doesn't seem to affect the upcoming changes to the
|
+ |
let isToolbar = (event.target.localName != "statusbarpanel"); |
let action = 0; |
if ((isToolbar && event.type == "command") || (!isToolbar && event.button == 0)) |
action = (isToolbar ? Prefs.defaulttoolbaraction : Prefs.defaultstatusbaraction); |
else if (event.button == 1) |
action = 3; |
let window = event.target.ownerDocument.defaultView; |