[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