From 691b7072328ae570743a8d1a725407efb0c65f62 Mon Sep 17 00:00:00 2001 From: Elbert Alias Date: Sat, 17 May 2014 14:27:49 +1000 Subject: [PATCH] Single widget instance across windows (Firefox driver) --- drivers/firefox/lib/driver.js | 24 ++++++++++++++++++------ drivers/firefox/package.json | 2 +- share/apps.json | 4 ++-- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/drivers/firefox/lib/driver.js b/drivers/firefox/lib/driver.js index 5fcf3b692..869af279c 100644 --- a/drivers/firefox/lib/driver.js +++ b/drivers/firefox/lib/driver.js @@ -11,6 +11,7 @@ Tab, Panel, Widget, + widget, // Keep track of a global widget instance. A widget per window does not work. UrlBar; exports.main = function(options, callbacks) { @@ -34,24 +35,26 @@ self = this, tab; + w.log('new Window'); + this.window = win; this.tabs = {}; this.urlBar = null; this.widget = null; if ( require('sdk/simple-prefs').prefs.urlbar ) { - this.urlBar = new UrlBar(); + this.urlBar = new UrlBar(this.window); } else { - this.widget = new Widget(); + this.widget = widget || ( widget = new Widget() ); } require('sdk/simple-prefs').on('urlbar', function() { self.destroy(); if ( require('sdk/simple-prefs').prefs.urlbar ) { - self.urlBar = new UrlBar(); + self.urlBar = new UrlBar(this.window); } else { - self.widget = new Widget(); + self.widget = widget || ( widget = new Widget() ); } self.displayApps(); @@ -213,7 +216,7 @@ this.panel = new Panel(); this.widget = require('sdk/widget').Widget({ - id: 'wappalyzer-' + ( new Date() ).getTime() + ( Math.floor( Math.random() * 900 ) + 100 ), + id: 'wappalyzer', label: 'Wappalyzer', contentURL: require('sdk/self').data.url('images/icon32.png'), panel: this.panel.get() @@ -236,7 +239,7 @@ this.widget.destroy(); }; - UrlBar = function() { + UrlBar = function(window) { var self = this; this.panel = new Panel(); @@ -245,9 +248,18 @@ self.panel.get().show(); } + // Can't get document from sdk/windows. Use active window instead. + // This breaks switching between URL bar and widget with multiple windows open this.document = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator) .getMostRecentWindow('navigator:browser').document; + if ( this.document.getElementById('wappalyzer-urlbar') ) { + this.urlBar = this.document.getElementById('wappalyzer-urlbar'); + + return; + } + // + this.urlBar = this.document.createElement('hbox'); this.urlBar.setAttribute('id', 'wappalyzer-urlbar'); diff --git a/drivers/firefox/package.json b/drivers/firefox/package.json index 953f2820a..3bb68bd97 100644 --- a/drivers/firefox/package.json +++ b/drivers/firefox/package.json @@ -8,7 +8,7 @@ "description": "Identifies software on the web", "author": "Elbert Alias", "license": "GPLv3", - "version": "3.0.9", + "version": "3.0.10", "main": "driver", "preferences": [{ "name": "tracking", diff --git a/share/apps.json b/share/apps.json index e2bdd48f8..567e85fc4 100644 --- a/share/apps.json +++ b/share/apps.json @@ -1692,12 +1692,12 @@ "M.R. Inc Webserver": { "website": "mrincworld.com", "cats": [ 22 ], - "headers": { "Server": "M\\.R\\. Inc Inc Webserver" } + "headers": { "Server": "M\\.R\\. Inc Webserver" } }, "M.R. Inc Wild CMS": { "website": "mrincworld.com", "cats": [ 1, 6 ], - "headers": { "X-Powered-By": "M\\.R\\. Inc Inc Wild CMS" } + "headers": { "X-Powered-By": "M\\.R\\. Inc Wild CMS" } }, "Magento": { "website": "www.magentocommerce.com",