[Pkg-mozext-commits] [firetray] 140/399: add option for showing icon only when some windows are hidden to tray
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 2d62194e8625603e4fd42259db5b20cbf8810796
Author: foudfou <foudil.newbie+git at gmail.com>
Date: Sun Jan 15 23:57:35 2012 +0100
add option for showing icon only when some windows are hidden to tray
---
README.md | 7 ++++---
TODO | 3 ---
src/chrome/content/options.xul | 13 +++++++++++--
src/chrome/locale/en-US/options.dtd | 5 ++++-
src/defaults/preferences/prefs.js | 1 +
src/modules/FiretrayHandler.jsm | 20 ++++++++++++++------
src/modules/FiretrayMessaging.jsm | 14 +++++++-------
src/modules/ctypes/gtk.jsm | 1 +
src/modules/gtk2/FiretrayStatusIcon.jsm | 27 +++++++++++++++++----------
src/modules/gtk2/FiretrayWindow.jsm | 4 ++++
10 files changed, 63 insertions(+), 32 deletions(-)
diff --git a/README.md b/README.md
index 535c2ce..63cdfc5 100644
--- a/README.md
+++ b/README.md
@@ -11,9 +11,10 @@ Features
* for all applications:
* show/hide a single or all windows
- * a window restored to its previous state, position, size, virtual desktop
- * ability to hide to tray on minimize
- * ability to start minimized to tray
+ * a window gets restored to its previous state, position, size, virtual desktop
+ * optional hide to tray on minimize
+ * optional start minimized to tray
+ * optional show icon only when hidden to tray
* for mail applications:
* display unread messages count in tray icon
diff --git a/TODO b/TODO
index 56e2b8d..7c76f3b 100644
--- a/TODO
+++ b/TODO
@@ -6,8 +6,6 @@ TODO
WONTFIX
-------
-* ability to hide windows individually/globally
-
* disable notifications for excluded mail account servers. NOTE: toggle
`login_at_startup` and `check_new_mail` is a bad idea. Mainly because the
user may be toggling them after we store the previous values (and before we
@@ -38,6 +36,5 @@ NEXT FEATURES
* mouse scrolls on tray icon hides/shows
* when restoring, if the window is iconified, deiconify it
* keyboard shortcut hide/show
-* show icon only when hidden to tray
[Vote](https://docs.google.com/spreadsheet/viewform?hl=fr&formkey=dFJqUC1pLTQzNkJYQldFdzdSV1BaSkE6MQ#gid=0)
diff --git a/src/chrome/content/options.xul b/src/chrome/content/options.xul
index 73bc75e..f3e9b69 100644
--- a/src/chrome/content/options.xul
+++ b/src/chrome/content/options.xul
@@ -23,6 +23,7 @@
<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_bool_show_icon_on_hide" name="extensions.firetray.show_icon_on_hide" 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"/>
@@ -37,10 +38,10 @@
<tabpanels flex="1">
<tabpanel id="general_tabpanel" flex="1">
+ <vbox pack="start" align="left" flex="1">
- <groupbox flex="1">
+ <groupbox>
<caption label="&windows_behaviour;" />
-
<checkbox id="ui_hides_on_close" preference="pref_bool_hides_on_close"
label="&bool_hides_on_close.label;"
accesskey="&bool_hides_on_close.accesskey;"
@@ -58,6 +59,14 @@
accesskey="&bool_start_hidden.accesskey;"/>
</groupbox>
+ <groupbox>
+ <caption label="&icon_settings;" />
+ <checkbox id="ui_show_icon_on_hide" preference="pref_bool_show_icon_on_hide"
+ label="&bool_show_icon_on_hide.label;"
+ accesskey="&bool_show_icon_on_hide.accesskey;"/>
+ </groupbox>
+
+ </vbox>
</tabpanel>
<tabpanel id="input_tabpanel" flex="1" />
diff --git a/src/chrome/locale/en-US/options.dtd b/src/chrome/locale/en-US/options.dtd
index bf960c2..52894f0 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 bool_hides_on_close.label "Closing window hides to tray">
<!ENTITY bool_hides_on_close.accesskey "C">
<!ENTITY bool_hides_single_window.tooltip "not all windows at once">
@@ -19,6 +18,10 @@
<!ENTITY bool_start_hidden.label "Start application hidden to tray">
<!ENTITY bool_start_hidden.accesskey "S">
+<!ENTITY icon_settings "Icon settings">
+<!ENTITY bool_show_icon_on_hide.label "Show only if at least a window is hidden">
+<!ENTITY bool_show_icon_on_hide.accesskey "w">
+
<!ENTITY mail_notification.label "Mail notification">
<!ENTITY mail_notification_disabled.label "disabled">
<!ENTITY mail_notification_disabled.accesskey "D">
diff --git a/src/defaults/preferences/prefs.js b/src/defaults/preferences/prefs.js
index b20e81b..935907e 100644
--- a/src/defaults/preferences/prefs.js
+++ b/src/defaults/preferences/prefs.js
@@ -10,6 +10,7 @@ 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.show_icon_on_hide", 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 bc6cf30..8c3afd6 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -75,6 +75,7 @@ firetray.Handler = {
LOG('inMailApp: '+this.inMailApp+', inBrowserApp: '+this.inBrowserApp);
firetray.StatusIcon.init();
+ firetray.Handler.showHideIcon();
LOG('StatusIcon initialized');
if (this.inMailApp) {
@@ -146,12 +147,13 @@ firetray.Handler = {
}
},
- // these get overridden in OS-specific Window handlers
- setImage: function(filename) {},
- setImageDefault: function() {},
- setText: function(text, color) {},
- setTooltip: function(localizedMessage) {},
- setTooltipDefault: function() {},
+ // these get overridden in OS-specific Icon/Window handlers
+ setIconImage: function(filename) {},
+ setIconImageDefault: function() {},
+ setIconText: function(text, color) {},
+ setIconTooltip: function(localizedMessage) {},
+ setIconTooltipDefault: function() {},
+ setIconVisibility: function(visible) {},
registerWindow: function(win) {},
unregisterWindow: function(win) {},
getWindowIdFromChromeWindow: function(win) {},
@@ -174,6 +176,12 @@ firetray.Handler = {
}
},
+ showHideIcon: function() {
+ if (firetray.Utils.prefService.getBoolPref('show_icon_on_hide'))
+ firetray.Handler.setIconVisibility(
+ (firetray.Handler.visibleWindowsCount !== firetray.Handler.windowsCount));
+ },
+
/** nsIBaseWindow, nsIXULWindow, ... */
getWindowInterface: function(win, iface) {
let winInterface, winOut;
diff --git a/src/modules/FiretrayMessaging.jsm b/src/modules/FiretrayMessaging.jsm
index 3f4d3f8..c4f7f30 100644
--- a/src/modules/FiretrayMessaging.jsm
+++ b/src/modules/FiretrayMessaging.jsm
@@ -53,7 +53,7 @@ firetray.Messaging = {
LOG("Disabling Messaging");
MailServices.mailSession.RemoveFolderListener(this.mailSessionListener);
- firetray.Handler.setImageDefault();
+ firetray.Handler.setIconImageDefault();
this.initialized = false;
},
@@ -120,22 +120,22 @@ firetray.Messaging = {
// update icon
if (this._unreadMsgCount == 0) {
- firetray.Handler.setImageDefault();
- firetray.Handler.setTooltipDefault();
+ firetray.Handler.setIconImageDefault();
+ firetray.Handler.setIconTooltipDefault();
} else if (this._unreadMsgCount > 0) {
switch (prefMailNotification) {
case FT_NOTIFICATION_UNREAD_MESSAGE_COUNT:
let prefIconTextColor = firetray.Utils.prefService.getCharPref("icon_text_color");
- firetray.Handler.setText(this._unreadMsgCount.toString(), prefIconTextColor);
+ firetray.Handler.setIconText(this._unreadMsgCount.toString(), prefIconTextColor);
break;
case FT_NOTIFICATION_NEWMAIL_ICON:
- firetray.Handler.setImage(firetray.Handler.FILENAME_NEWMAIL);
+ firetray.Handler.setIconImage(firetray.Handler.FILENAME_NEWMAIL);
break;
case FT_NOTIFICATION_CUSTOM_ICON:
let prefCustomIconPath = firetray.Utils.prefService.getCharPref("custom_mail_icon");
- firetray.Handler.setImage(prefCustomIconPath);
+ firetray.Handler.setIconImage(prefCustomIconPath);
break;
default:
ERROR("Unknown notification mode");
@@ -145,7 +145,7 @@ firetray.Messaging = {
this._unreadMsgCount,
firetray.Utils.strings.GetStringFromName("tooltip.unread_messages"))
.replace("#1", this._unreadMsgCount);;
- firetray.Handler.setTooltip(localizedMessage);
+ firetray.Handler.setIconTooltip(localizedMessage);
} else {
throw "negative message count"; // should never happen
diff --git a/src/modules/ctypes/gtk.jsm b/src/modules/ctypes/gtk.jsm
index 875aac0..60a3f31 100644
--- a/src/modules/ctypes/gtk.jsm
+++ b/src/modules/ctypes/gtk.jsm
@@ -71,6 +71,7 @@ function gtk_defines(lib) {
lib.lazy_bind("gtk_status_icon_new", this.GtkStatusIcon.ptr);
lib.lazy_bind("gtk_status_icon_set_from_file", ctypes.void_t, this.GtkStatusIcon.ptr, ctypes.char.ptr);
lib.lazy_bind("gtk_status_icon_set_tooltip_text", ctypes.void_t, this.GtkStatusIcon.ptr, ctypes.char.ptr);
+ lib.lazy_bind("gtk_status_icon_set_visible", ctypes.void_t, this.GtkStatusIcon.ptr, gobject.gboolean);
lib.lazy_bind("gtk_menu_new", this.GtkMenu.ptr);
lib.lazy_bind("gtk_image_menu_item_new_with_label", this.GtkImageMenuItem.ptr, gobject.gchar.ptr);
lib.lazy_bind("gtk_image_new_from_stock", this.GtkWidget.ptr, gobject.gchar.ptr, ctypes.int); // enum
diff --git a/src/modules/gtk2/FiretrayStatusIcon.jsm b/src/modules/gtk2/FiretrayStatusIcon.jsm
index e798254..3e619d0 100644
--- a/src/modules/gtk2/FiretrayStatusIcon.jsm
+++ b/src/modules/gtk2/FiretrayStatusIcon.jsm
@@ -38,11 +38,11 @@ firetray.StatusIcon = {
return false;
}
- firetray.Handler.setImageDefault();
+ firetray.Handler.setIconImageDefault();
this._buildPopupMenu();
- firetray.Handler.setTooltipDefault();
+ firetray.Handler.setIconTooltipDefault();
LOG("showHideAllWindows: "+firetray.Handler.hasOwnProperty("showHideAllWindows"));
this.callbacks.iconActivate = gtk.GCallbackStatusIconActivate_t(
@@ -148,7 +148,7 @@ firetray.StatusIcon = {
}; // firetray.StatusIcon
-firetray.Handler.setImage = function(filename) {
+firetray.Handler.setIconImage = function(filename) {
if (!firetray.StatusIcon.trayIcon)
return false;
LOG(filename);
@@ -163,14 +163,14 @@ firetray.Handler.setImage = function(filename) {
return true;
};
-firetray.Handler.setImageDefault = function() {
+firetray.Handler.setIconImageDefault = function() {
if (!this.FILENAME_DEFAULT)
throw "Default application icon filename not set";
- this.setImage(this.FILENAME_DEFAULT);
+ this.setIconImage(this.FILENAME_DEFAULT);
};
// GTK bug: Gdk-CRITICAL **: IA__gdk_window_get_root_coords: assertion `GDK_IS_WINDOW (window)' failed
-firetray.Handler.setTooltip = function(toolTipStr) {
+firetray.Handler.setIconTooltip = function(toolTipStr) {
if (!firetray.StatusIcon.trayIcon)
return false;
@@ -184,14 +184,14 @@ firetray.Handler.setTooltip = function(toolTipStr) {
return true;
};
-firetray.Handler.setTooltipDefault = function() {
+firetray.Handler.setIconTooltipDefault = function() {
if (!this.appNameOriginal)
throw "application name not initialized";
- this.setTooltip(this.appNameOriginal);
+ this.setIconTooltip(this.appNameOriginal);
};
-firetray.Handler.setText = function(text, color) { // TODO: split into smaller functions;
- LOG("setText, color="+color);
+firetray.Handler.setIconText = function(text, color) { // TODO: split into smaller functions;
+ LOG("setIconText, color="+color);
if (typeof(text) != "string")
throw new TypeError();
@@ -295,3 +295,10 @@ firetray.Handler.setText = function(text, color) { // TODO: split into smaller f
return true;
};
+
+firetray.Handler.setIconVisibility = function(visible) {
+ if (!firetray.StatusIcon.trayIcon)
+ return false;
+ gtk.gtk_status_icon_set_visible(firetray.StatusIcon.trayIcon, visible);
+ return true;
+};
diff --git a/src/modules/gtk2/FiretrayWindow.jsm b/src/modules/gtk2/FiretrayWindow.jsm
index 1fa5a49..7ef1f54 100644
--- a/src/modules/gtk2/FiretrayWindow.jsm
+++ b/src/modules/gtk2/FiretrayWindow.jsm
@@ -506,6 +506,8 @@ firetray.Handler.showSingleWindow = function(xid) {
firetray.Handler.windows[xid].visibility = true;
firetray.Handler.visibleWindowsCount += 1;
+
+ firetray.Handler.showHideIcon();
};
// NOTE: we keep using high-level cross-plat BaseWindow.visibility (instead of
@@ -520,6 +522,8 @@ firetray.Handler.hideSingleWindow = function(xid) {
firetray.Handler.windows[xid].visibility = false;
firetray.Handler.visibleWindowsCount -= 1;
+
+ firetray.Handler.showHideIcon();
};
firetray.Handler.showHideAllWindows = function(gtkStatusIcon, userData) {
--
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