[Pkg-mozext-commits] [firetray] 232/399: fix start_hidden bug introduced in f86a3ac

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:23:49 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 2b2ce871a093e0a152b0b4e6a6ab11208b78174a
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Sat May 12 15:24:14 2012 +0200

    fix start_hidden bug introduced in f86a3ac
---
 src/chrome/content/overlay.js        |   40 ++++++++++++++++++-----
 src/modules/linux/FiretrayWindow.jsm |   60 +++++-----------------------------
 2 files changed, 40 insertions(+), 60 deletions(-)

diff --git a/src/chrome/content/overlay.js b/src/chrome/content/overlay.js
index a5bc1c4..e23c6c2 100644
--- a/src/chrome/content/overlay.js
+++ b/src/chrome/content/overlay.js
@@ -10,6 +10,10 @@ if ("undefined" == typeof(Cu)) var Cu = Components.utils;
 // https://groups.google.com/group/mozilla.dev.extensions/browse_thread/thread/e89e9c2a834ff2b6#
 var firetrayChrome = { // each new window gets a new firetrayChrome !
 
+  strings: null,
+  winId: null,
+  startedHidden: false,
+
   onLoad: function(win) {
     this.strings = document.getElementById("firetray-strings"); // chrome-specific
 
@@ -17,17 +21,13 @@ var firetrayChrome = { // each new window gets a new firetrayChrome !
     let init = firetray.Handler.initialized || firetray.Handler.init();
 
     F.LOG("ONLOAD"); firetray.Handler.dumpWindows();
-    let winId = firetray.Handler.registerWindow(win);
+    this.winId = firetray.Handler.registerWindow(win);
 
     if (firetray.Handler.inMailApp && firetray.Messaging.initialized)
       firetray.Messaging.updateMsgCount();
 
     win.addEventListener('close', firetrayChrome.onClose, true);
-
-    if (firetray.Handler.windows[winId].startHidden) {
-      F.LOG('start_hidden');
-      firetray.Handler.hideSingleWindow(winId);
-    }
+    win.addEventListener('resize', firetrayChrome.onResize, true);
 
     F.LOG('Firetray LOADED: ' + init);
     return true;
@@ -58,13 +58,37 @@ var firetrayChrome = { // each new window gets a new firetrayChrome !
     F.LOG('hides_on_close: '+hides_on_close+', hides_single_window='+hides_single_window);
     if (hides_on_close) {
       if (hides_single_window) {
-        let winId = firetray.Handler.getWindowIdFromChromeWindow(win);
-        firetray.Handler.hideSingleWindow(winId);
+        firetray.Handler.hideSingleWindow(firetrayChrome.winId);
       } else
         firetray.Handler.hideAllWindows();
       event && event.preventDefault();
     }
+  },
+
+  /**
+   * at startup windows are displayed/shown/resized multiple times. We can't
+   * just set baseWin.visibility=false on 'load' because the window is not
+   * fully realized (position, size incorrect), neither when appStarted because
+   * windows would be displayed in between
+   */
+  onResize: function(event) {
+    F.LOG('onResize'+'. appStarted='+firetray.Handler.appStarted);
+    let win = event.originalTarget;
+    win.removeEventListener('resize', firetrayChrome.onResize, true);
+
+    if(!firetray.Handler.appStarted &&
+       firetray.Utils.prefService.getBoolPref('start_hidden')) {
+      F.LOG('start_hidden: '+firetrayChrome.winId);
+      let baseWin = firetray.Handler.getWindowInterface(win, "nsIBaseWindow");
+      baseWin.visibility = false;
+      if (!firetrayChrome.startedHidden) {
+        firetray.Handler.windows[firetrayChrome.winId].visible = false;
+        firetray.Handler.visibleWindowsCount -= 1;
+        firetrayChrome.startedHidden = true;
+      }
+    }
   }
+
 };
 
 // should be sufficient for a delayed Startup (no need for window.setTimeout())
diff --git a/src/modules/linux/FiretrayWindow.jsm b/src/modules/linux/FiretrayWindow.jsm
index cf8f401..a661b36 100644
--- a/src/modules/linux/FiretrayWindow.jsm
+++ b/src/modules/linux/FiretrayWindow.jsm
@@ -188,8 +188,8 @@ firetray.Window = {
     return true;
   },
 
-  showSingleStateful: function(xid) {
-    F.LOG("showSingleStateful xid="+xid);
+  show: function(xid) {
+    F.LOG("show xid="+xid);
 
     // try to restore previous state. TODO: z-order respected ?
     firetray.Window.restorePositionAndSize(xid);
@@ -205,22 +205,10 @@ firetray.Window = {
     firetray.PopupMenu.hideSingleWindowItemAndSeparatorMaybe(xid);
     firetray.Handler.showHideIcon();
   },
-  showSingleStatelessOnce: function(xid) {
-    F.LOG("showSingleStateless");
 
-    firetray.Window.setVisibility(xid, true);
-
-    firetray.PopupMenu.hideSingleWindowItemAndSeparatorMaybe(xid);
-    firetray.Handler.showHideIcon();
-
-    firetray.Handler.windows[xid].show = firetray.Window.showSingleStateful; // reset
-  },
-
-  // NOTE: we keep using high-level cross-plat BaseWindow.visibility (instead of
-  // gdk_window_show_unraised)
   /* FIXME: hiding windows should also hide child windows */
-  hideSingleStateful: function(xid) {
-    F.LOG("hideSingleStateful");
+  hide: function(xid) {
+    F.LOG("hide");
 
     firetray.Window.savePositionAndSize(xid);
     firetray.Window.saveStates(xid);
@@ -231,21 +219,6 @@ firetray.Window = {
     firetray.PopupMenu.showSingleWindowItem(xid);
     firetray.Handler.showHideIcon();
   },
-  /**
-   * hides without saving window states (position, size, ...) This is needed
-   * when application starts hidden: as windows are not realized, their state
-   * is not accurate.
-   */
-  hideSingleStatelessOnce: function(xid) {
-    F.LOG("hideSingleStateless");
-
-    firetray.Window.setVisibility(xid, false);
-
-    firetray.PopupMenu.showSingleWindowItem(xid);
-    firetray.Handler.showHideIcon();
-
-    firetray.Handler.windows[xid].hide = firetray.Window.hideSingleStateful; // reset
-  },
 
   savePositionAndSize: function(xid) {
     let gx = {}, gy = {}, gwidth = {}, gheight = {};
@@ -322,7 +295,7 @@ firetray.Window = {
   },
 
   setVisibility: function(xid, visibility) {
-    F.WARN("setVisibility="+visibility);
+    F.LOG("setVisibility="+visibility);
     let gtkWidget = ctypes.cast(firetray.Handler.gtkWindows.get(xid), gtk.GtkWidget.ptr);
     if (visibility)
       gtk.gtk_widget_show_all(gtkWidget);
@@ -512,6 +485,7 @@ firetray.Window = {
       //   break;
       }
 
+      // NOTE: Gecko 8.0 provides the 'sizemodechange' event
       if (isHidden) { // minimized
         F.LOG("winStates="+winStates+", isHidden="+isHidden);
         let hides_on_minimize = firetray.Utils.prefService.getBoolPref('hides_on_minimize');
@@ -585,17 +559,6 @@ firetray.Handler.registerWindow = function(win) {
     return null;
   }
 
-  if (!firetray.Handler.appStarted &&
-      firetray.Utils.prefService.getBoolPref('start_hidden')) {
-    this.windows[xid].startHidden = true;
-    this.windows[xid].hide = firetray.Window.hideSingleStatelessOnce;
-    this.windows[xid].show = firetray.Window.showSingleStatelessOnce;
-  } else {
-    this.windows[xid].startHidden = false;
-    this.windows[xid].hide = firetray.Window.hideSingleStateful;
-    this.windows[xid].show = firetray.Window.showSingleStateful;
-  }
-
   F.LOG("AFTER"); firetray.Handler.dumpWindows();
   return xid;
 };
@@ -606,15 +569,8 @@ firetray.Handler.unregisterWindow = function(win) {
   return firetray.Window.unregisterWindowByXID(xid);
 };
 
-firetray.Handler.showSingleWindow = function(xid) {
-  F.LOG("showSingleWindow xid="+xid);
-  this.windows[xid].show(xid);
-};
-
-firetray.Handler.hideSingleWindow = function(xid) {
-  F.LOG("hideSingleWindow xid="+xid);
-  this.windows[xid].hide(xid);
-};
+firetray.Handler.showSingleWindow = firetray.Window.show;
+firetray.Handler.hideSingleWindow = firetray.Window.hide;
 
 firetray.Handler.showHideAllWindows = function(gtkStatusIcon, userData) {
   F.LOG("showHideAllWindows: "+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