Index: safari/ext/background.js |
=================================================================== |
--- a/safari/ext/background.js |
+++ b/safari/ext/background.js |
@@ -81,6 +81,8 @@ |
{ |
this._tab = tab; |
+ this.browserAction = new BrowserAction(this); |
+ |
this.onLoading = new LoadingTabEventTarget(tab); |
this.onBeforeNavigate = new TabEventTarget(tab, "beforeNavigate", false); |
this.onCompleted = new TabEventTarget(tab, "navigate", false); |
@@ -106,23 +108,6 @@ |
message, responseCallback, |
this._tab.page, this._tab |
); |
- }, |
- browserAction: { |
- setIcon: function(path) |
- { |
- safari.extension.toolbarItems[0].image = safari.extension.baseURI + path; |
- }, |
- setTitle: function(title) |
- { |
- safari.extension.toolbarItems[0].toolTip = title; |
- }, |
- setBadge: function(badge) |
- { |
- if (!badge) |
- safari.extension.toolbarItems[0].badge = 0; |
- else if ("number" in badge) |
- safari.extension.toolbarItems[0].badge = badge.number; |
- } |
} |
}; |
@@ -193,6 +178,86 @@ |
this._delete(tab._tab); |
}; |
+ ext.tabs = { |
+ onLoading: new LoadingTabEventTarget(safari.application), |
+ onBeforeNavigate: new TabEventTarget(safari.application, "beforeNavigate", true), |
+ onCompleted: new TabEventTarget(safari.application, "navigate", true), |
+ onActivated: new TabEventTarget(safari.application, "activate", true), |
+ onRemoved: new TabEventTarget(safari.application, "close", true) |
+ }; |
+ |
+ |
+ /* Browser actions */ |
+ |
+ var globalTooltipItemProperties = {} |
+ var tooltipItemPropertiesPerTab = new TabMap(); |
Wladimir Palant
2014/01/15 15:24:47
You meant toolbarItem, not tooltipItem, right?
Sebastian Noack
2014/01/15 19:25:47
It is gone now.
|
+ |
+ var getToolbarItemForWindow = function(win) |
+ { |
+ for (var i = 0; i < safari.extension.toolbarItems.length; i++) |
+ { |
+ var toolbarItem = safari.extension.toolbarItems[i]; |
+ |
+ if (toolbarItem.browserWindow == win) |
+ return toolbarItem; |
+ } |
Wladimir Palant
2014/01/15 15:24:47
This should return something if no toolbar item is
Sebastian Noack
2014/01/15 19:25:47
Done. Even though I think that it is a bug when th
|
+ }; |
+ |
+ var BrowserAction = function(tab) |
+ { |
+ this._tab = tab; |
+ }; |
+ BrowserAction.prototype = { |
+ _set: function(property, value) |
+ { |
+ var currentWindow = this._tab._tab.browserWindow; |
+ var toolbarItem = getToolbarItemForWindow(currentWindow); |
+ |
+ if (!(property in globalTooltipItemProperties)) |
+ globalTooltipItemProperties[property] = toolbarItem[property]; |
+ |
+ if (this._tab._tab == currentWindow.activeTab) |
+ toolbarItem[property] = value; |
+ |
+ var props = tooltipItemPropertiesPerTab.get(this._tab); |
+ if (!props) |
+ { |
+ props = {}; |
+ tooltipItemPropertiesPerTab.set(this._tab, props); |
+ } |
+ props[property] = value; |
+ }, |
+ setIcon: function(path) |
+ { |
+ this._set("image", safari.extension.baseURI + path); |
+ }, |
+ setTitle: function(title) |
+ { |
+ this._set("toolTip", title); |
+ }, |
+ setBadge: function(badge) |
+ { |
+ if (!badge) |
+ this._set("badge", 0); |
+ else if ("number" in badge) |
+ this._set("badge", badge.number); |
+ } |
+ }; |
+ |
+ ext.tabs.onActivated.addListener(function(tab) |
+ { |
+ var props = tooltipItemPropertiesPerTab.get(tab); |
+ var toolbarItem = getToolbarItemForWindow(tab._tab.browserWindow); |
+ |
+ for (var property in globalTooltipItemProperties) |
+ { |
+ if (props && property in props) |
+ toolbarItem[property] = props[property]; |
+ else |
+ toolbarItem[property] = globalTooltipItemProperties[property]; |
+ } |
Wladimir Palant
2014/01/15 15:24:47
What's the point of globalTooltipItemProperties? I
Sebastian Noack
2014/01/15 19:25:47
This approach just emulates the behavior we alread
|
+ }); |
+ |
/* Windows */ |
@@ -538,14 +603,6 @@ |
} |
}; |
- ext.tabs = { |
- onLoading: new LoadingTabEventTarget(safari.application), |
- onBeforeNavigate: new TabEventTarget(safari.application, "beforeNavigate", true), |
- onCompleted: new TabEventTarget(safari.application, "navigate", true), |
- onActivated: new TabEventTarget(safari.application, "activate", true), |
- onRemoved: new TabEventTarget(safari.application, "close", true) |
- }; |
- |
ext.backgroundPage = { |
getWindow: function() |
{ |