[Pkg-mozext-commits] [firetray] 366/399: for Thunderbird, base startup event on the last restored window's map.

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:24:15 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 08828ce82554b679e996076c6ecdf120b923f1f8
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Sun Apr 21 14:17:29 2013 +0200

    for Thunderbird, base startup event on the last restored window's map.
    
    Unfortunately there is not equivalent "sessionstore-windows-restored" in TB
    yet.  Many events related to windows are issued before windows are fully
    realized. "mail-startup-done"/"mail-tabs-session-restored" are issued by *each*
    window. "console-api-log-event" is not reliable and can be issued at relatively
    early stage on heavy configs. So that the best solution is probably to count
    restored windows ourselves...
---
 src/modules/FiretrayHandler.jsm      |   35 ++++++++++++++++++++++++++--------
 src/modules/linux/FiretrayWindow.jsm |    3 +++
 2 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index 4b39800..b6a4c01 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -125,11 +125,16 @@ firetray.Handler = {
 
     firetray.Utils.addObservers(firetray.Handler,
       [ "xpcom-will-shutdown", "profile-change-teardown" ]);
-    if (this.appId === FIRETRAY_APP_DB['thunderbird']['id']) {
-      firetray.Utils.addObservers(firetray.Handler, [ "console-api-log-event" ]);
-    } else if (this.appId === FIRETRAY_APP_DB['firefox']['id'] ||
-               this.appId === FIRETRAY_APP_DB['seamonkey']['id']) {
+    if (this.appId === FIRETRAY_APP_DB['firefox']['id'] ||
+        this.appId === FIRETRAY_APP_DB['seamonkey']['id']) {
       firetray.Utils.addObservers(firetray.Handler, [ "sessionstore-windows-restored" ]);
+    } else if (this.appId === FIRETRAY_APP_DB['thunderbird']['id']) {
+      this.restoredWindowsCount = this.readTBRestoreWindowsCount();
+      log.debug("restoredWindowsCount="+this.restoredWindowsCount);
+      if (!this.restoredWindowsCount) {
+        log.error("session file could not be read");
+        this.restoredWindowsCount = 1; // default
+      }
     } else {
       firetray.Utils.addObservers(firetray.Handler, [ "final-ui-startup" ]);
     }
@@ -188,6 +193,24 @@ firetray.Handler = {
     }
   },
 
+  readTBRestoreWindowsCount: function() {
+    Cu.import("resource:///modules/IOUtils.js");
+    let sessionFile = Services.dirsvc.get("ProfD", Ci.nsIFile);
+    sessionFile.append("session.json");
+    var initialState = null;
+    if (sessionFile.exists()) {
+      let data = IOUtils.loadFileToString(sessionFile);
+      if (!data) return null;
+      try {
+        initialState = JSON.parse(data);
+      } catch(x) {}
+      if (!initialState) return null;
+
+      return  initialState.windows.length;
+    }
+    return null;
+  },
+
   // FIXME: this should definetely be done in Chat, but IM accounts
   // seem not be initialized at early stage (Exception... "'TypeError:
   // this._items is undefined' when calling method:
@@ -219,10 +242,6 @@ firetray.Handler = {
     case "sessionstore-windows-restored":
       // sessionstore-windows-restored does not come after the realization of
       // all windows... so we wait a little
-    case "console-api-log-event": // one of the few events issued at later
-                                  // stage, once windows are realized
-      // second TB window also issues
-      // "mail-startup-done"/"mail-tabs-session-restored"
     case "final-ui-startup":    // subject=ChromeWindow
       log.debug(topic+": "+subject+","+data);
       firetray.Utils.removeObservers(firetray.Handler, [ topic ]);
diff --git a/src/modules/linux/FiretrayWindow.jsm b/src/modules/linux/FiretrayWindow.jsm
index 8909af0..eae4f0c 100644
--- a/src/modules/linux/FiretrayWindow.jsm
+++ b/src/modules/linux/FiretrayWindow.jsm
@@ -592,6 +592,9 @@ firetray.Window = {
       if (!firetray.Handler.appStarted &&
           firetray.Utils.prefService.getBoolPref('start_hidden')) {
         log.debug("start_hidden");
+        if (firetray.Handler.restoredWindowsCount &&
+            !--firetray.Handler.restoredWindowsCount)
+          firetray.Handler.startupDone();
         firetray.Window.startupHide(xid);
       }
       gdk.gdk_window_remove_filter(firetray.Handler.gdkWindows.get(xid),

-- 
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