[Pkg-mozext-commits] [firetray] 176/399: fix start_hidden: do not save+restore unrealized position and size.

David Prévot taffit at alioth.debian.org
Tue Oct 29 18:23:38 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 23cf34ea9f0068e2bc9679d3d8e126e3707de50d
Author: foudfou <foudil.newbie+git at gmail.com>
Date:   Mon Feb 13 23:55:01 2012 +0100

    fix start_hidden: do not save+restore unrealized position and size.
    
    NEEDS REFACTORING
---
 src/chrome/content/overlay.js        |    4 +-
 src/modules/FiretrayHandler.jsm      |   13 +++-
 src/modules/linux/FiretrayWindow.jsm |  125 ++++++++++++++++++++++------------
 3 files changed, 91 insertions(+), 51 deletions(-)

diff --git a/src/chrome/content/overlay.js b/src/chrome/content/overlay.js
index e975b6c..8673c41 100644
--- a/src/chrome/content/overlay.js
+++ b/src/chrome/content/overlay.js
@@ -19,11 +19,9 @@ var firetrayChrome = { // each new window gets a new firetrayChrome !
     LOG("ONLOAD"); firetray.Handler.dumpWindows();
     firetray.Handler.registerWindow(win);
 
-    // update unread messages count
     if (firetray.Handler.inMailApp && firetray.Messaging.initialized)
       firetray.Messaging.updateMsgCount();
 
-    // prevent window closing.
     win.addEventListener('close', firetrayChrome.onClose, true);
 
     if (!firetray.Handler.appStarted
@@ -63,7 +61,7 @@ var firetrayChrome = { // each new window gets a new firetrayChrome !
         firetray.Handler.hideSingleWindow(winId);
       } else
         firetray.Handler.hideAllWindows();
-      event && event.preventDefault(); // no event when called directly (xul)
+      event && event.preventDefault();
     }
   }
 };
diff --git a/src/modules/FiretrayHandler.jsm b/src/modules/FiretrayHandler.jsm
index 8a29618..54472ab 100644
--- a/src/modules/FiretrayHandler.jsm
+++ b/src/modules/FiretrayHandler.jsm
@@ -109,6 +109,14 @@ firetray.Handler = {
     VersionChange.setReinstallHook(welcome);
     VersionChange.watch();
 
+    if (firetray.Utils.prefService.getBoolPref('start_hidden')) {
+      firetray.Handler.showSingleWindow = firetray.Window.showSingleStatelessOnce;
+      firetray.Handler.hideSingleWindow = firetray.Window.hideSingleStatelessOnce;
+    } else {
+      firetray.Handler.showSingleWindow = firetray.Window.showSingleStateful;
+      firetray.Handler.hideSingleWindow = firetray.Window.hideSingleStateful;
+    }
+
     this.initialized = true;
     return true;
   },
@@ -139,11 +147,10 @@ firetray.Handler = {
       LOG("RECEIVED: "+topic+", launching timer");
       // sessionstore-windows-restored does not come after the realization of
       // all windows... so we wait a little
-      var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
-      timer.initWithCallback({ notify: function() {
+      firetray.Utils.timer(function() {
         firetray.Handler.appStarted = true;
         LOG("*** appStarted ***");
-      }}, FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS, Ci.nsITimer.TYPE_ONE_SHOT);
+      }, FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS, Ci.nsITimer.TYPE_ONE_SHOT);
       break;
     case "xpcom-will-shutdown":
       LOG("xpcom-will-shutdown");
diff --git a/src/modules/linux/FiretrayWindow.jsm b/src/modules/linux/FiretrayWindow.jsm
index a20cb9c..eca6608 100644
--- a/src/modules/linux/FiretrayWindow.jsm
+++ b/src/modules/linux/FiretrayWindow.jsm
@@ -188,7 +188,80 @@ firetray.Window = {
     return true;
   },
 
-  saveWindowPositionAndSize: function(xid) {
+  showSingleStateful: function(xid) {
+    LOG("show xid="+xid);
+
+    // try to restore previous state. TODO: z-order respected ?
+    firetray.Window.restorePositionAndSize(xid);
+    firetray.Window.restoreStates(xid);
+    firetray.Handler.windows[xid].baseWin.visibility = true; // show
+    firetray.Window.restoreDesktop(xid);               // after show
+    firetray.Window.activate(xid);
+
+    firetray.Handler.windows[xid].visibility = true;
+    firetray.Handler.visibleWindowsCount += 1;
+
+    if (firetray.Handler.popupMenuWindowItemsHandled())
+      firetray.PopupMenu.hideSingleWindowItemAndSeparatorMaybe(xid);
+    firetray.Handler.showHideIcon();
+  },
+
+  showSingleStatelessOnce: function(xid) {
+    LOG("showSingleStateless");
+
+    firetray.Handler.windows[xid].baseWin.visibility = true; // show
+
+    firetray.Handler.windows[xid].visibility = true;
+    firetray.Handler.visibleWindowsCount += 1;
+
+    if (firetray.Handler.popupMenuWindowItemsHandled())
+      firetray.PopupMenu.hideSingleWindowItemAndSeparatorMaybe(xid);
+    firetray.Handler.showHideIcon();
+
+    firetray.Handler.showSingleWindow = firetray.Window.showSingleStateful;
+  },
+
+  // 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) {
+    LOG("hideSingleStateful");
+
+    firetray.Window.savePositionAndSize(xid);
+    firetray.Window.saveStates(xid);
+    firetray.Window.saveDesktop(xid);
+
+    firetray.Handler.windows[xid].baseWin.visibility = false; // hide
+
+    firetray.Handler.windows[xid].visibility = false;
+    firetray.Handler.visibleWindowsCount -= 1;
+
+    if (firetray.Handler.popupMenuWindowItemsHandled())
+      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) {
+    LOG("hideSingleStateless");
+
+    firetray.Handler.windows[xid].baseWin.visibility = false; // hide
+
+    firetray.Handler.windows[xid].visibility = false;
+    firetray.Handler.visibleWindowsCount -= 1;
+
+    if (firetray.Handler.popupMenuWindowItemsHandled())
+      firetray.PopupMenu.showSingleWindowItem(xid);
+    firetray.Handler.showHideIcon();
+
+    firetray.Handler.hideSingleWindow = firetray.Window.hideSingleStateful;
+  },
+
+  savePositionAndSize: function(xid) {
     let gx = {}, gy = {}, gwidth = {}, gheight = {};
     firetray.Handler.windows[xid].baseWin.getPositionAndSize(gx, gy, gwidth, gheight);
     firetray.Handler.windows[xid].savedX = gx.value;
@@ -198,7 +271,7 @@ firetray.Window = {
     LOG("save: gx="+gx.value+", gy="+gy.value+", gwidth="+gwidth.value+", gheight="+gheight.value);
   },
 
-  restoreWindowPositionAndSize: function(xid) {
+  restorePositionAndSize: function(xid) {
     if ("undefined" === typeof(firetray.Handler.windows[xid].savedX))
       return; // windows[xid].saved* may not be initialized
 
@@ -215,13 +288,13 @@ firetray.Window = {
     });
   },
 
-  saveWindowStates: function(xid) {
+  saveStates: function(xid) {
     let winStates = firetray.Window.getXWindowStates(x11.Window(xid));
     firetray.Handler.windows[xid].savedStates = winStates;
     LOG("save: windowStates="+winStates);
   },
 
-  restoreWindowStates: function(xid) {
+  restoreStates: function(xid) {
     let winStates = firetray.Handler.windows[xid].savedStates;
     LOG("restored WindowStates: " + winStates);
     if (winStates & FIRETRAY_XWINDOW_MAXIMIZED) {
@@ -235,15 +308,15 @@ firetray.Window = {
     delete firetray.Handler.windows[xid].savedStates;
   },
 
-  saveWindowDesktop: function(xid) {
+  saveDesktop: function(xid) {
     let winDesktop = firetray.Window.getXWindowDesktop(x11.Window(xid));
     firetray.Handler.windows[xid].savedDesktop = winDesktop;
     LOG("save: windowDesktop="+winDesktop);
   },
 
-  restoreWindowDesktop: function(xid) {
+  restoreDesktop: function(xid) {
     let desktopDest = firetray.Handler.windows[xid].savedDesktop;
-    if (desktopDest === null) return;
+    if (desktopDest === null || "undefined" === typeof(desktopDest)) return;
 
     let dataSize = 1;
     let data = ctypes.long(dataSize);
@@ -498,44 +571,6 @@ firetray.Handler.unregisterWindow = function(win) {
   return firetray.Window.unregisterWindowByXID(xid);
 };
 
-firetray.Handler.showSingleWindow = function(xid) {
-  LOG("show xid="+xid);
-
-  // try to restore previous state. TODO: z-order respected ?
-  firetray.Window.restoreWindowPositionAndSize(xid);
-  firetray.Window.restoreWindowStates(xid);
-  firetray.Handler.windows[xid].baseWin.visibility = true; // show
-  firetray.Window.restoreWindowDesktop(xid);               // after show
-  firetray.Window.activate(xid);
-  // TODO: we need want to restore to the original monitor (screen)
-
-  firetray.Handler.windows[xid].visibility = true;
-  firetray.Handler.visibleWindowsCount += 1;
-
-  if (firetray.Handler.popupMenuWindowItemsHandled())
-    firetray.PopupMenu.hideSingleWindowItemAndSeparatorMaybe(xid);
-  firetray.Handler.showHideIcon();
-};
-
-// NOTE: we keep using high-level cross-plat BaseWindow.visibility (instead of
-// gdk_window_show_unraised)
-/* FIXME: hiding windows should also hide child windows */
-firetray.Handler.hideSingleWindow = function(xid) {
-  LOG("hideSingleWindow");
-
-  firetray.Window.saveWindowPositionAndSize(xid);
-  firetray.Window.saveWindowStates(xid);
-  firetray.Window.saveWindowDesktop(xid);
-  firetray.Handler.windows[xid].baseWin.visibility = false; // hide
-
-  firetray.Handler.windows[xid].visibility = false;
-  firetray.Handler.visibleWindowsCount -= 1;
-
-  if (firetray.Handler.popupMenuWindowItemsHandled())
-    firetray.PopupMenu.showSingleWindowItem(xid);
-  firetray.Handler.showHideIcon();
-};
-
 firetray.Handler.showHideAllWindows = function(gtkStatusIcon, userData) {
   LOG("showHideAllWindows: "+userData);
   // NOTE: showHideAllWindows being a callback, we need to use

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