[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