[Pkg-mozext-commits] [firetray] 136/399: * fix openBrowserWindow() when called from GtkMenuItem * add openMailMessage() to popup menu * add start_hidden option * fix getXWindowDesktop()
David Prévot
taffit at alioth.debian.org
Tue Oct 29 18:23:29 UTC 2013
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch dfsg-clean
in repository firetray.
commit 24941550c0c562cf4db7802bec13d23c9c510a0e
Author: foudfou <foudil.newbie+git at gmail.com>
Date: Sun Jan 15 01:02:00 2012 +0100
* fix openBrowserWindow() when called from GtkMenuItem
* add openMailMessage() to popup menu
* add start_hidden option
* fix getXWindowDesktop()
---
README.md | 2 +-
src/chrome/content/options.xul | 6 +-
src/chrome/content/overlay.js | 23 ++++--
src/chrome/locale/en-US/options.dtd | 3 +-
src/chrome/locale/en-US/overlay.properties | 1 +
src/defaults/preferences/prefs.js | 1 +
src/modules/FiretrayHandler.jsm | 105 ++++++++++++++++++++++++----
src/modules/commons.js | 7 +-
src/modules/gtk2/FiretrayStatusIcon.jsm | 36 ++++++----
src/modules/gtk2/FiretrayWindow.jsm | 1 +
10 files changed, 147 insertions(+), 38 deletions(-)
diff --git a/README.md b/README.md
index aabfc6b..c7ed96a 100644
--- a/README.md
+++ b/README.md
@@ -46,5 +46,5 @@ Acknowledgment
* Some code borrowed from
[Nils Mayer](https://addons.mozilla.org/fr/firefox/addon/minimizetotray-revived/
"MinToTrayR addon page").
-* kind support from Neil Deaking
+* kind support from Neil Deaking, Bobby Holley
diff --git a/src/chrome/content/options.xul b/src/chrome/content/options.xul
index 629ffb2..1d9d47a 100644
--- a/src/chrome/content/options.xul
+++ b/src/chrome/content/options.xul
@@ -22,6 +22,7 @@
<preference id="pref_bool_hides_on_close" name="extensions.firetray.hides_on_close" type="bool"/>
<preference id="pref_bool_hides_on_minimize" name="extensions.firetray.hides_on_minimize" type="bool"/>
<preference id="pref_bool_hides_single_window" name="extensions.firetray.hides_single_window" type="bool"/>
+ <preference id="pref_bool_start_hidden" name="extensions.firetray.start_hidden" type="bool"/>
<preference id="pref_string_icon_text_color" name="extensions.firetray.icon_text_color" type="string" />
<preference id="pref_string_custom_mail_icon" name="extensions.firetray.custom_mail_icon" type="string" />
<preference id="pref_string_mail_accounts" name="extensions.firetray.mail_accounts" type="string"/>
@@ -38,7 +39,7 @@
<tabpanel id="general_tabpanel" flex="1">
<groupbox flex="1">
- <caption label="&windows_behaviour;" tooltiptext="&windows_behaviour.tooltip;" />
+ <caption label="&windows_behaviour;" />
<checkbox id="ui_hides_on_close" preference="pref_bool_hides_on_close"
label="&bool_hides_on_close.label;"
@@ -52,6 +53,9 @@
label="&bool_hides_single_window.label;"
accesskey="&bool_hides_single_window.accesskey;"
tooltiptext="&bool_hides_single_window.tooltip;"/>
+ <checkbox id="ui_start_hidden" preference="pref_bool_start_hidden"
+ label="&bool_start_hidden.label;"
+ accesskey="&bool_start_hidden.accesskey;"/>
</groupbox>
</tabpanel>
diff --git a/src/chrome/content/overlay.js b/src/chrome/content/overlay.js
index 532b856..6380bd7 100644
--- a/src/chrome/content/overlay.js
+++ b/src/chrome/content/overlay.js
@@ -18,9 +18,8 @@ var firetrayChrome = {
// Set up preference change observer
firetray.Utils.prefService.QueryInterface(Ci.nsIPrefBranch2);
firetray.Utils.prefService.addObserver("", firetrayChrome, false);
- }
- catch (ex) {
- ERROR(ex);
+ } catch (x) {
+ ERROR(x);
return false;
}
@@ -39,6 +38,14 @@ var firetrayChrome = {
// NOTE: each new window gets a new firetrayChrome, and hence listens to
// pref changes
+ if (!firetray.Handler.appStarted
+ && firetray.Utils.prefService.getBoolPref('start_hidden')) {
+ LOG('start_hidden');
+ let winId = firetray.Handler.getWindowIdFromChromeWindow(win);
+ LOG('winId='+winId);
+ firetray.Handler.hideSingleWindow(winId);
+ }
+
LOG('Firetray LOADED: ' + init);
return true;
},
@@ -76,10 +83,12 @@ var firetrayChrome = {
},
observe: function(subject, topic, data) {
- // Observer for pref changes
- if (topic != "nsPref:changed") return;
- LOG('Pref changed: '+data);
- // switch(data) { ...
+ switch (topic) {
+ case "nsPref:changed":
+ LOG('Pref changed: '+data);
+ break;
+ default:
+ }
}
};
diff --git a/src/chrome/locale/en-US/options.dtd b/src/chrome/locale/en-US/options.dtd
index df2ec9e..bf960c2 100644
--- a/src/chrome/locale/en-US/options.dtd
+++ b/src/chrome/locale/en-US/options.dtd
@@ -8,7 +8,6 @@
<!ENTITY mail_options "Mail">
<!ENTITY windows_behaviour "Windows behaviour">
-<!ENTITY windows_behaviour.tooltip "">
<!ENTITY bool_hides_on_close.label "Closing window hides to tray">
<!ENTITY bool_hides_on_close.accesskey "C">
@@ -17,6 +16,8 @@
<!ENTITY bool_hides_on_minimize.accesskey "M">
<!ENTITY bool_hides_single_window.label "Hide the current window only">
<!ENTITY bool_hides_single_window.accesskey "H">
+<!ENTITY bool_start_hidden.label "Start application hidden to tray">
+<!ENTITY bool_start_hidden.accesskey "S">
<!ENTITY mail_notification.label "Mail notification">
<!ENTITY mail_notification_disabled.label "disabled">
diff --git a/src/chrome/locale/en-US/overlay.properties b/src/chrome/locale/en-US/overlay.properties
index 53b2e35..84b74e9 100644
--- a/src/chrome/locale/en-US/overlay.properties
+++ b/src/chrome/locale/en-US/overlay.properties
@@ -1,4 +1,5 @@
extensions.{9533f794-00b4-4354-aa15-c2bbda6989f8}.description=A system tray extension for linux.
popupMenu.itemLabel.Quit=Quit
popupMenu.itemLabel.NewWindow=New window
+popupMenu.itemLabel.NewMessage=New message
tooltip.unread_messages=#1 unread message;#1 unread messages
diff --git a/src/defaults/preferences/prefs.js b/src/defaults/preferences/prefs.js
index a1db399..b20e81b 100644
--- a/src/defaults/preferences/prefs.js
+++ b/src/defaults/preferences/prefs.js
@@ -9,6 +9,7 @@ pref("browser.tabs.warnOnClose", false);
pref("extensions.firetray.hides_on_close", true);
pref("extensions.firetray.hides_on_minimize", true);
pref("extensions.firetray.hides_single_window", false);
+pref("extensions.firetray.start_hidden", false);
pref("extensions.firetray.mail_notification", 1);
pref("extensions.firetray.icon_text_color", "#000000");
diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index d954bf9..37472f3 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -34,7 +34,9 @@ firetray.Handler = {
FILENAME_BLANK: null,
FILENAME_NEWMAIL: null,
runtimeOS: null,
+ mozAppId: null,
inMailApp: false,
+ inBrowserApp: false,
windows: {},
windowsCount: 0,
visibleWindowsCount: 0,
@@ -48,7 +50,6 @@ firetray.Handler = {
this.FILENAME_NEWMAIL = firetray.Utils.chromeToPath(
"chrome://firetray/skin/message-mail-new.png");
- // OS/platform checks
this.runtimeABI = Services.appinfo.XPCOMABI;
this.runtimeOS = Services.appinfo.OS; // "WINNT", "Linux", "Darwin"
// version checked during install, so we shouldn't need to care
@@ -66,14 +67,17 @@ firetray.Handler = {
return false;
}
- // instanciate tray icon
+ this.mozAppId = Services.appinfo.ID;
+ if (this.mozAppId === THUNDERBIRD_ID || this.mozAppId === SEAMONKEY_ID)
+ this.inMailApp = true;
+ if (this.mozAppId === FIREFOX_ID || this.mozAppId === SEAMONKEY_ID)
+ this.inBrowserApp = true;
+ LOG('inMailApp: '+this.inMailApp+', inBrowserApp: '+this.inBrowserApp);
+
firetray.StatusIcon.init();
LOG('StatusIcon initialized');
- // check if in mail app
- var mozAppId = Services.appinfo.ID;
- if (mozAppId === THUNDERBIRD_ID || mozAppId === SEAMONKEY_ID) {
- this.inMailApp = true;
+ if (this.inMailApp) {
try {
Cu.import("resource://firetray/FiretrayMessaging.jsm");
let prefMailNotification = firetray.Utils.prefService.getIntPref("mail_notification");
@@ -86,7 +90,8 @@ firetray.Handler = {
return false;
}
}
- LOG('inMailApp: '+this.inMailApp);
+
+ Services.obs.addObserver(this, this.getAppStartupTopic(this.mozAppId), false);
this.initialized = true;
return true;
@@ -105,9 +110,41 @@ firetray.Handler = {
return false;
}
+ Services.obs.removeObserver(this, this.getAppStartupTopic(this.mozAppId), false);
+
return true;
},
+ observe: function(subject, topic, data) {
+ switch (topic) {
+ case "sessionstore-windows-restored":
+ case "mail-startup-done":
+ case "final-ui-startup":
+ LOG("RECEIVED: "+topic+", launching timer");
+ // sessionstore-windows-restored does not come after the realisation of
+ // all windows... so we wait a little
+ var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
+ timer.initWithCallback(function() {
+ firetray.Handler.appStarted = true;
+ LOG("*** appStarted ***");
+ }, FIRETRAY_BROWSER_STARTUP_DELAY_MILLISECONDS, Ci.nsITimer.TYPE_ONE_SHOT);
+ break;
+ default:
+ }
+ },
+
+ getAppStartupTopic: function(id) {
+ switch (id) {
+ case FIREFOX_ID:
+ case SEAMONKEY_ID:
+ return 'sessionstore-windows-restored';
+ case THUNDERBIRD_ID:
+ return 'mail-startup-done';
+ default:
+ return 'final-ui-startup';
+ }
+ },
+
// these get overridden in OS-specific Window handlers
setImage: function(filename) {},
setImageDefault: function() {},
@@ -154,13 +191,55 @@ firetray.Handler = {
return winOut;
},
+ _getBrowserProperties: function() {
+ if (firetray.Handler.mozAppId === FIREFOX_ID)
+ return "chrome://branding/locale/browserconfig.properties";
+ else if (firetray.Handler.mozAppId === SEAMONKEY_ID)
+ return "chrome://navigator-region/locale/region.properties";
+ else return null;
+ },
+
+ _getHomePage: function() {
+ var prefDomain = "browser.startup.homepage";
+ var url;
+ try {
+ url = Services.prefs.getComplexValue(prefDomain,
+ Components.interfaces.nsIPrefLocalizedString).data;
+ } catch (e) {
+ }
+
+ // use this if we can't find the pref
+ if (!url) {
+ var SBS = Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService);
+ var configBundle = SBS.createBundle(firetray.Handler._getBrowserProperties());
+ url = configBundle.GetStringFromName(prefDomain);
+ }
+
+ return url;
+ },
+
openBrowserWindow: function() {
- var handler = Components.classes["@mozilla.org/browser/clh;1"]
- .getService(Components.interfaces.nsIBrowserHandler);
- var homePage = handler.defaultArgs;
- LOG("homePage="+homePage);
- var win = Services.wm.getMostRecentWindow("navigator:browser"); // nsIDOMWindow=[object ChromeWindow]
- win.open(homePage);
+ try {
+ var home = firetray.Handler._getHomePage();
+ LOG("home="+home);
+
+ // FIXME: obviously we need to wait to avoid seg fault on jsapi.cpp:827
+ // 827 if (t->data.requestDepth) {
+ var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
+ timer.initWithCallback(function() {
+ for(var key in firetray.Handler.windows) break;
+ firetray.Handler.windows[key].chromeWin.open(home);
+ }, FIRETRAY_BROWSER_NEW_WINDOW_DELAY_MILLISECONDS, Ci.nsITimer.TYPE_ONE_SHOT);
+ } catch (x) { ERROR(x); }
+ },
+
+ openMailMessage: function() {
+ try {
+ var aURI = Services.io.newURI("mailto:", null, null);
+ var msgComposeService = Cc["@mozilla.org/messengercompose;1"]
+ .getService(Ci.nsIMsgComposeService);
+ msgComposeService.OpenComposeWindowWithURI (null, aURI);
+ } catch (x) { ERROR(x); }
},
quitApplication: function() {
diff --git a/src/modules/commons.js b/src/modules/commons.js
index 934fb7b..e5d1906 100644
--- a/src/modules/commons.js
+++ b/src/modules/commons.js
@@ -6,7 +6,9 @@ var EXPORTED_SYMBOLS =
[ "firetray", "LOG", "WARN", "ERROR", "FIREFOX_ID", "THUNDERBIRD_ID",
"SEAMONKEY_ID", "getType", "isArray", "isEmpty", "strEquals",
"FT_NOTIFICATION_DISABLED", "FT_NOTIFICATION_UNREAD_MESSAGE_COUNT",
- "FT_NOTIFICATION_NEWMAIL_ICON", "FT_NOTIFICATION_CUSTOM_ICON" ];
+ "FT_NOTIFICATION_NEWMAIL_ICON", "FT_NOTIFICATION_CUSTOM_ICON",
+ "FIRETRAY_BROWSER_STARTUP_DELAY_MILLISECONDS",
+ "FIRETRAY_BROWSER_NEW_WINDOW_DELAY_MILLISECONDS" ];
const Cc = Components.classes;
const Ci = Components.interfaces;
@@ -27,6 +29,9 @@ const FT_NOTIFICATION_UNREAD_MESSAGE_COUNT = 1;
const FT_NOTIFICATION_NEWMAIL_ICON = 2;
const FT_NOTIFICATION_CUSTOM_ICON = 3;
+const FIRETRAY_BROWSER_STARTUP_DELAY_MILLISECONDS = 500;
+const FIRETRAY_BROWSER_NEW_WINDOW_DELAY_MILLISECONDS = 50;
+
/**
* firetray namespace.
*/
diff --git a/src/modules/gtk2/FiretrayStatusIcon.jsm b/src/modules/gtk2/FiretrayStatusIcon.jsm
index 8a0ef3c..109a853 100644
--- a/src/modules/gtk2/FiretrayStatusIcon.jsm
+++ b/src/modules/gtk2/FiretrayStatusIcon.jsm
@@ -67,32 +67,40 @@ firetray.StatusIcon = {
_buildPopupMenu: function() {
this.menu = gtk.gtk_menu_new();
var menuShell = ctypes.cast(this.menu, gtk.GtkMenuShell.ptr);
+ var addMenuSeparator = false;
- /*
- * FIXME: somehow a ctypes callback calling win.open() seems to break
- * main-thread-only rule :-(
- * https://developer.mozilla.org/en/js-ctypes/js-ctypes_reference/Callbacks
- * https://bugzilla.mozilla.org/show_bug.cgi?id=513778#c4
- * https://wiki.mozilla.org/Jsctypes/api#Callbacks
- * consider using nsIJetpackService
- */
-/*
- var mozAppId = Services.appinfo.ID;
- if (mozAppId === FIREFOX_ID || mozAppId === SEAMONKEY_ID) { // browser
+ if (firetray.Handler.inBrowserApp) {
var menuItemNewWindowLabel = firetray.Utils.strings.GetStringFromName("popupMenu.itemLabel.NewWindow");
var menuItemNewWindow = gtk.gtk_image_menu_item_new_with_label(
menuItemNewWindowLabel);
gtk.gtk_menu_shell_append(menuShell, ctypes.cast(menuItemNewWindow, gtk.GtkWidget.ptr));
this.callbacks.menuItemNewWindowActivate = gobject.GCallback_t(
- firetray.Handler.sendOpenBrowserWindowEvent);
+ firetray.Handler.openBrowserWindow);
gobject.g_signal_connect(menuItemNewWindow, "activate",
- firetray.StatusIcon.callbacks.menuItemNewWindowActivate, null);
+ firetray.StatusIcon.callbacks.menuItemNewWindowActivate, null);
+ addMenuSeparator = true;
+ }
+
+ if (firetray.Handler.inMailApp) {
+ var menuItemNewMessageLabel = firetray.Utils.strings.GetStringFromName("popupMenu.itemLabel.NewMessage");
+ var menuItemNewMessage = gtk.gtk_image_menu_item_new_with_label(
+ menuItemNewMessageLabel);
+ gtk.gtk_menu_shell_append(menuShell, ctypes.cast(menuItemNewMessage, gtk.GtkWidget.ptr));
+
+ this.callbacks.menuItemNewMessageActivate = gobject.GCallback_t(
+ firetray.Handler.openMailMessage);
+ gobject.g_signal_connect(menuItemNewMessage, "activate",
+ firetray.StatusIcon.callbacks.menuItemNewMessageActivate, null);
+
+ addMenuSeparator = true;
+ }
+
+ if (addMenuSeparator) {
var menuSeparator = gtk.gtk_separator_menu_item_new();
gtk.gtk_menu_shell_append(menuShell, ctypes.cast(menuSeparator, gtk.GtkWidget.ptr));
}
-*/
// shouldn't need to convert to utf8 thank to js-ctypes
var menuItemQuitLabel = firetray.Utils.strings.GetStringFromName("popupMenu.itemLabel.Quit");
diff --git a/src/modules/gtk2/FiretrayWindow.jsm b/src/modules/gtk2/FiretrayWindow.jsm
index 7628114..b7c1004 100644
--- a/src/modules/gtk2/FiretrayWindow.jsm
+++ b/src/modules/gtk2/FiretrayWindow.jsm
@@ -328,6 +328,7 @@ firetray.Window = {
let [propsFound, nitems] =
firetray.Window.getXWindowProperties(xwin, x11.current.Atoms._NET_WM_DESKTOP);
LOG("DESKTOP propsFound, nitems="+propsFound+", "+nitems);
+ if (!propsFound) return null;
if (strEquals(nitems.value, 0))
WARN("desktop number not found");
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/firetray.git
More information about the Pkg-mozext-commits
mailing list